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

软件功能就不多说了,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. 完整的多文件上传实例(java版)

    昨天刚刚做了一个文件列表上传,后端很简单,用 MultipartFile[] files 获取文件流数组,后端就当IO流操作就可以,似乎好像没啥好写的,但是!!!!!前端是真的糙单.要是自己写一个前端 ...

  2. ReentrantLock源码

    ReentrantLock与Synchronized区别在于后者是JVM实现,前者是JDK实现,属于Java对象,使用的时候必须有明确的加锁(Lock)和解锁(Release)方法,否则可能会造成死锁 ...

  3. 软件测试1gkd

        通过老师课上的讲解以及对书本和百度百科的学习,我对软件测试有如下的理解.     软件开发的最基本要求是按时.高质量地发布软件产品,而软件测试是软件质量保证的最重要的手段之一.在整个软件生命周 ...

  4. SonarQube安装文档

    1.SonarQube 1.1 SonarQube介绍 SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误. SonarQube是否可以使用自定义规则由开发人员的开 ...

  5. jquery延迟加载(懒加载)插件

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  6. Yum安装时出现 The program yum-complete-transaction is found in the yum-utils package

    yum安装时出现 The program yum-complete-transaction is found in the yum-utils package yum之后,会显示上信息,并且最终执行结 ...

  7. 爬坑之路---Google map

    google.maps.event.adddDomListen(window, 'load', callback);当文档流中所有的dom加载完成后,执行回调函数,可以不用在script中使用defe ...

  8. guxh的python笔记十一:异常处理

    1,抓错方法 name = [0, 1, 2] try: name[3] except IndexError as exc: # 抓单个错误,打印错误信息e print(exc) except (In ...

  9. Lab 11-3

    Analyze the malware found in Lab11-03.exe and Lab11-03.dll. Make sure that both files are in the sam ...

  10. JavaScrpt常用的封装方法

    1.闭包封装.在这个封装方法中,所有的实例成员都共享属性和方法, 使得所有得方法和属性都私有且对象间共享 (function ($) { var Person = function(name) { r ...