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

软件功能就不多说了,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. ZJOI 2014 星系调查(推导)

    题意 https://loj.ac/problem/2201 思路 说白了就是一条路径上有 \(n\) 个二维坐标,求一条直线使得所有点到此直线的距离和最小. 设这条直线为 \(y=kx+b\) ,距 ...

  2. spring mvc 简单的文件上传与下载

    上传文件有很多种方法,这里主要讲解的是spring mvc内提供的文件上传 前提使用:spring mvc 在这个之前我们需要把环境给配置好 1:springmvc的XML配置文件加上这一段就即可, ...

  3. Nginx 安装及配置、负载均衡https网站及转发后页面js、css等路径找不到问题、更换证书导致问题解决

    官网下载nginx:http://nginx.org/en/download.html 安装nginx编译环境:yum install -y gcc-c++ 安装pcre库解析正则:yum insta ...

  4. ssh整合oracle数据源报错????

    在SSH整合的时候,引入oracle的pom节点,但是报错,因为没有权限,要手动将Oracle.jar注册到本地仓库 保证你电脑有maven环境,测试 方式为 cmd---->mvn -vers ...

  5. python实现列表去重的方法

    >>> l=[,,,,,,] >>> list(set(l)) [, , , ] >>>

  6. 环境准备—之—linux下安装python3和pip3

    转自 上海悠悠 https://www.cnblogs.com/yoyoketang/p/10195102.html 前言 centos7 自带有 python,但是却是 python2 版本的 py ...

  7. js查找、自组织数据

    function search(arr, data) { ; i < arr.length; ++i) { if (arr[i] == data) { return true; } } retu ...

  8. Asp.Net Boilerplate Project 使用swagger调试api

    文件有点大,去掉了packages文件夹,(Swashbuckle.Core.5.6.0) 链接:https://pan.baidu.com/s/1DzMLhFyRav0dufS4dTeMzg 提取码 ...

  9. MIUI8系统完整刷入开发版开启root权限的经验

    小米的机器不同手机型号一般情况官网都提供两个不同的安卓系统版本,可分为稳定版和开发版,稳定版没有提供root超级权限管理,开发版中就支持了root超级权限,很多情况我们需要使用的一些功能强大的APP, ...

  10. JAVA程序设计的第一次作业

    这是我第一次接触博客,刚开始用博客很生疏,感觉很麻烦,但是后来慢慢从老师那里了解到了许多博客可以带给我们的便利.通过博客,我们不仅可以记录自己从刚开始进入程序学习的懵懵懂懂到后来想要学,想深究,想探讨 ...