破解某PDF转换器产品
本文章纯属出于作者自己对技术的探索,绝不用于商业用途(虽然网上已经能够下载到注册机了)
软件功能就不多说了,PDF转换成WORD格式,对于学生党来说也算是神器了吧,那么我们今天就用自己的办法来获得这款神器的使用权。
下图是注册界面,软件会给我们提供一个机器码,那么可以推测,注册码就是根据机器码加密而成的了。
很遗憾OD并不能对这款软件进行调试,还好我们有另一个神器———IDA,先分析一下.exe文件,函数比较多。。一时找不到下手点。那我们先尝试输入一个错误的注册码,弹出了一个提示框
点确定后自动连接了如下网址:
tj.sjhfrj.com/redirect/ver1/pdfconverter/buy/6.5/Setup_xjpdf2word/1797259983
我们可以从这个网址上下手,在IDA里浏览一下字符串,看到了几个关键字符串,我们可以选择任何一个来查看它的交叉引用。
然后我们定位到了registerCodeEnter()函数中来,其上层函数如下图,那么这个registerCodeEnter()十有八九就是我们点击注册之后进入的函数了。
在registerCodeEnter()函数中我们看到了一个字符串判断的函数,如果判断不相等则跳到含有字符串”tj.sjhfrj.com/redirect/ver1/pdfconverter/buy/6.5/Setup_xjpdf2word”的函数中,所以我们有理由怀疑这个判断所调用的两个字符串就是真注册码与我们所输入的注册码,get_text得到的当然是我们输入的注册码,那么在PDFConvert.bllBase.dll中的get_reg_code(string)函数就是生成注册码的关键函数了(它调用的参数是string类型,初步猜测是机器码,返回值也是String类型,应该就是注册码)。
让我们来分析PDFConvert.bllBase.dll
为了使加密算法更直观,我把对整个get_reg_code函数的分析提取了出来:
.method public hidebysig instance string get_reg_code([opt] string machine_code) { .param [1] = string("") .maxstack 3 .locals init (int64 V0, string V1, int32 V2) ldarg.1 ldsfld string [mscorlib]System.String::Empty call bool [mscorlib]System.String::op_Equality(string, string) brfalse.s loc_1025 ldarg.0 call instance string PDFConvert.bllBase.reg::get_machine_code() starg.s 1 // 得到机器码(string型) loc_1025: ldarg.1 call int64 [mscorlib]System.Convert::ToInt64(string) stloc.0 // 把机器码转化成int64型的整数,保存到变量v0中 ldstr asc_20CE // "" stloc.1 ldc.i4.0 stloc.2 // 初始化一个int变量v2为0,作为计数器使用 br.s loc_1069 // 将计数器的值与0x64比较 loc_1036: ldloc.0 ldc.i4.2 conv.i8 mul // v0 = v0*2 stloc.0 ldloca.s 0 call instance string [mscorlib]System.Int64::ToString() stloc.1 // 把变量v0转化成字符串保存在v1中, ldloc.1 callvirt instance int32 [mscorlib]System.String::get_Length() ldc.i4.s 0xC // 获取v1长度与0xc比较 bgt.s loc_1056 ldloc.1 call int64 [mscorlib]System.Convert::ToInt64(string) stloc.0 br.s loc_1065 loc_1056: ldloc.1 ldc.i4.0 ldc.i4.s 0xC callvirt instance string [mscorlib]System.String::Substring(int32, int32) call int64 [mscorlib]System.Convert::ToInt64(string) stloc.0 // 如果v1长度大于0xc,则截取其前8位转换成int64型保存在v0中 loc_1065: // CODE XREF: PDFConvert.bllBase.reg__get_reg_code+44j ldloc.2 ldc.i4.1 add // v2++ stloc.2 loc_1069: ldloc.2 // 将计数器的值与0x64比较 ldc.i4.s 0x64 blt.s loc_1036 // 如果比0x64小,则进入循环 ldloca.s 0 call instance string [mscorlib]System.Int64::ToString() ret } |
然后我们需要尝试这用c++把源码还原出来,其中的大数操作真真的让人很头疼。
QWORD CtextDlg::encode(CString code) { QWORD m_code = 0; QWORD m_temp= 0; CString tmp; for (int i = 0; i < 0x64; i++) { tmp = code.Right(8); code = code.Left(code.GetLength() - 8); m_temp = _tcstoul(tmp, NULL, 10); m_code = _tcstoul(code, NULL, 10); m_code = m_code * 100000000 + m_temp; m_code *= 2; code.Format(L"%d", m_code / 100000000); code.AppendFormat(L"%08d", m_code % 100000000); int j = code.GetLength(); if (j>12) { code = code.Mid(0,12); } } tmp = code.Right(8); code = code.Left(code.GetLength() - 8); m_temp = _tcstoul(tmp, NULL, 10); m_code = _tcstoul(code, NULL, 10); m_code = m_code * 100000000 + m_temp; return m_code; } |
至此,注册机就算是出炉啦,让我们试一试效果
Perfect!可以开开心心的使用啦!
破解某PDF转换器产品的更多相关文章
- .NET破解之迅捷PDF转换器(续)
在以前的博文<.NET破解之迅捷PDF转换器>中使用了暴力破解的方法,现在软件版本从5.0升级到6.3,所以也尝试用新的方法. 方法一:暴力破解法 如往常一样,查找搜索到关键的函数,即Is ...
- 破解加密PDF文件pdfcrack
破解加密PDF文件pdfcrack PDF是常见的文档格式.它允许用户设置双重密码来保护文档.第一重是用户密码(user password),当打开PDF文档,输入该密码.第二重是所有者密码(ow ...
- .NET破解之PDFdo转换器
无意中看到一个PDF转换器,叫PDFdo,看起了功能挺多的,于是想把它破了. 下载 官网:http://www.pdfdo.com/ 安装 安装后,只有一个exe应用程序,如果是.NET 程序应该有很 ...
- PDF转WORD工具推荐:迅捷PDF转换器6.8版
迅捷PDF转换器是一款功能强大的pdf转换成word转换器软件.它不仅支持pdf转换成word,word转pdf,还可以实现excel,ppt,jpg与pdf文件的一键式转换.有了它,你可以很轻松转换 ...
- (分享)多功能 PDF转换器v3.0版本
转换的效果非常不错,值得使用.破解成功的截图:这个程序必须随便输入注册码注册,不然会有水印的. 这是程序主界面了 正在测试pdf转word过程,转换结果个人感觉非常不错,跟原版pdf的格式非常接近,个 ...
- .NET破解之PDF编辑器
本教程只能用于学习研究,不可进行任何商业用途.如有使用,请购买正版,尊重他人劳动成果和知识产权! 第一效果团队(1XG Team)组建于2004年,并长期致力于WINDOWS平台应用软件开发,产品主要 ...
- Windows:打印为PDF(PDF转换器)
造冰箱的大熊猫@cnblogs 2019/4/17 文中图片可通过点击鼠标右键查看大图 Windows下实现PDF打印的几个办法: 1.Foxit Reader(福昕PDF浏览器) 安装Foxit R ...
- 利用ARCHPR明文破解获取PDF
我们经常下载一些rar或zip压缩文件,解压时有时发现要密码,而密码多是为了推广而设置的网址等,如果不知道密码,可 以去来源网站上寻找或在压缩文件的注释中查看. 而并非所有都是如此,例如,网上有些人, ...
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...
随机推荐
- MySQL按年度、季度、月度、周、日SQL统计查询
说明 SELECT YEAR('2014-10-29') //2014 SELECT MONTH('2014-10-29') //10 SELECT DAY('2014-10-29') //29 SE ...
- python笔记—循环控制
1.print可以打印多个参数,在括号内用,号区分,显示时一个,号显示一个空格 2.import导入时可以用as别名代替,方便两个模块中有相同函数时使用 3.序列解包:将一个序列(或任何可迭代对象)解 ...
- Sitecore8.2 Tracker.Current is not initialized错误
这是在访问前端的时候出现的错误...Tracker.Current 未初始化..并没更新修改什么,好端端的这样 而Siatecore后台可以正常访问进入 先查看日志--> 由此我判断可能是Mon ...
- C# 如何获取可执行文件路径的上上级目录
1. DirectoryInfo di = new DirectoryInfo(string.Format(@"{0}..\..\", Application.StartupPat ...
- 2019金融科技风往哪儿吹?蚂蚁金服联合20余家金融机构预测新年热点:5G、区块链上榜
2019年,金融科技的风向标在哪里?哪些板块成新宠,哪些科技成潮流? 1月4日,蚂蚁金服ATEC城市峰会在上海举行.大会上,蚂蚁金服与20余家金融机构一起预测了2019年金融科技的发展. “未来金融会 ...
- App 打包
记录一下: 1. applicationIdSuffix 实现不同 ApplicationId 打包,buildTypes 中添加编译后会成功生成加对应后缀的ApplicationId.在 produ ...
- 合并K个排序链表(java实现)
题目: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: ...
- [python]Python代码安全分析工具(Bandit)
简介: Bandit是一款Python源码分析框架,可用于Python代码的安全性分析.Bandit使用标准库中的ast模块,将Python源码解析成Python语法节点构成的树.Bandit允许用户 ...
- 《SQL 基础教程》第六章:函数、谓词、CASE 表达式
函数是 SQL 中的一部分.在 SQL 中,除了普通的函数之外,还有特殊的函数(谓词和 CASE 表达式)用于各种情况. 函数 函数的种类有: 算术函数 字符串函数 日期函数 转换函数(用于转换数据类 ...
- hql 函数大全
序号 函数名称 说明 类型 支持 使用方法 备注 1 ABS(n) 取绝对值 数学函数 JPAQL HQL ABS(column_name[数字类型对象属性]) 2 SQRT(n) 取平方根 数 ...