本文章纯属出于作者自己对技术的探索,绝不用于商业用途(虽然网上已经能够下载到注册机了)

软件功能就不多说了,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转换器产品的更多相关文章

  1. .NET破解之迅捷PDF转换器(续)

    在以前的博文<.NET破解之迅捷PDF转换器>中使用了暴力破解的方法,现在软件版本从5.0升级到6.3,所以也尝试用新的方法. 方法一:暴力破解法 如往常一样,查找搜索到关键的函数,即Is ...

  2. 破解加密PDF文件pdfcrack

    破解加密PDF文件pdfcrack   PDF是常见的文档格式.它允许用户设置双重密码来保护文档.第一重是用户密码(user password),当打开PDF文档,输入该密码.第二重是所有者密码(ow ...

  3. .NET破解之PDFdo转换器

    无意中看到一个PDF转换器,叫PDFdo,看起了功能挺多的,于是想把它破了. 下载 官网:http://www.pdfdo.com/ 安装 安装后,只有一个exe应用程序,如果是.NET 程序应该有很 ...

  4. PDF转WORD工具推荐:迅捷PDF转换器6.8版

    迅捷PDF转换器是一款功能强大的pdf转换成word转换器软件.它不仅支持pdf转换成word,word转pdf,还可以实现excel,ppt,jpg与pdf文件的一键式转换.有了它,你可以很轻松转换 ...

  5. (分享)多功能 PDF转换器v3.0版本

    转换的效果非常不错,值得使用.破解成功的截图:这个程序必须随便输入注册码注册,不然会有水印的. 这是程序主界面了 正在测试pdf转word过程,转换结果个人感觉非常不错,跟原版pdf的格式非常接近,个 ...

  6. .NET破解之PDF编辑器

    本教程只能用于学习研究,不可进行任何商业用途.如有使用,请购买正版,尊重他人劳动成果和知识产权! 第一效果团队(1XG Team)组建于2004年,并长期致力于WINDOWS平台应用软件开发,产品主要 ...

  7. Windows:打印为PDF(PDF转换器)

    造冰箱的大熊猫@cnblogs 2019/4/17 文中图片可通过点击鼠标右键查看大图 Windows下实现PDF打印的几个办法: 1.Foxit Reader(福昕PDF浏览器) 安装Foxit R ...

  8. 利用ARCHPR明文破解获取PDF

    我们经常下载一些rar或zip压缩文件,解压时有时发现要密码,而密码多是为了推广而设置的网址等,如果不知道密码,可 以去来源网站上寻找或在压缩文件的注释中查看. 而并非所有都是如此,例如,网上有些人, ...

  9. 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件

    PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...

随机推荐

  1. 利用策略模式实现了同一接口的多个Servicel实现类,如何同时注入Controller

    解决方法如上图,通过给实现类起别名,并在controller中,通过@Qualifier注解获取不同的实现类,之前没有这样写,会出现这样的情况: 通过@autowired注解注入dao层时为空,会报空 ...

  2. Maven打war包命令

    https://jingyan.baidu.com/article/295430f1e7c4b30c7e005095.html clean compile package

  3. win10 开机自启指定软件

    开机自启 %programdata%\Microsoft\Windows\Start Menu\Programs\StartUp

  4. Spring Boot 2 整合Swagger简单入门

    Swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件. 1.pom.xml添加配置 可以到http://mvnrepository.com上搜索springfox,便可以看到Sp ...

  5. P4717 【模板】快速沃尔什变换

    思路 FWT的模板 FWT解决这样的卷积 \[ C_k=\sum_{i\otimes j=k} A_iB_j \] \(\otimes\)可能是and,or,xor等位运算 几个式子 FWTand: ...

  6. Spark机器学习基础三

    监督学习 0.线性回归(加L1.L2正则化) from __future__ import print_function from pyspark.ml.regression import Linea ...

  7. Qt setstylesheet指定窗口

    #窗口名称{ ...} 在窗口名称前加#号可以指定某个窗口设置stylesheet而不影响子窗口.子控件,可以用于设置边框,不影响子控件产生一样的边框.

  8. JavaScript 的 this 原理

    一.问题的由来 学懂 JavaScript 语言,一个标志就是理解下面两种写法,可能有不一样的结果. var obj = { foo: function () {} }; var foo = obj. ...

  9. Codeforces 799 D. Field expansion

    题目链接:http://codeforces.com/contest/799/problem/D 因为${a_i>=2}$那么一个数字至多操作${log_{2}^{max(a,b)/min(h, ...

  10. Ubuntu - apt -commands

    1. install sudo apt install [软件名] sudo apt-get install [软件名]Tab补全,可以使用sudo apt upgrade 升级apt, 也可以通过s ...