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

软件功能就不多说了,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. 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN

    论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...

  2. [Linux]ubuntu安装基本流程

    ubuntu安装基本流程 1.设置分辨率2.设置语言环境3.设置服务器镜像源4.添加终端5.apt.apt-get更新和升级系统软件 sudo apt update/upgrade sudo apt- ...

  3. Unity --- 在原目录中,将选中的Texture剥离为rgb和alpha

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; us ...

  4. 雷林鹏分享:Composer 安装

    下午在安装 Laravel 框架过程中,遇到了不少问题,因为 Laravel 的安装依赖于 composer,这里就先介绍一下 composer 的安装方法: 安装方法: #下载 sudo curl ...

  5. (5)TCP和UDP协议

    TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TCP的应用:Web浏览 ...

  6. Fragment调用startActivityForResult导致的回调Activity无法获取正确的requestId的问题

    今天遇到了一个问题 从Fragment内调用了startActivityForResult方法设置了requestId是1 但是在Activity内的onActivityResult的回调内 获得的r ...

  7. NodeJS基础总结(一)

    NodeJS官网网址:https://nodejs.org/en/ 使用require方法加载fs核心模块 var fs = require('fs'); 一.读取文件//   第一个参数就是尧读取的 ...

  8. CF数据结构练习(二)

    1. 833D Red-Black Cobweb 大意: 给定树, 边为黑色或白色, 求所有黑白边比例在$[\frac{1}{2},2]$内的路径边权乘积的乘积. 考虑点分治, 记黑边数为$a$, 白 ...

  9. fetch请求get方式以及post提交参数为formdata类型的数据

    1.请求方式post,请求函数参数 _requestData(callback,_cityDt){ const switchIp = "http://192.168.43.103/api/p ...

  10. Oracle DB管理内存

    • 描述SGA 中的内存组件• 实施自动内存管理• 手动配置SGA 参数• 配置自动PGA 内存管理  内存管理:概览DBA 必须将内存管理视为其工作中至关重要的部分,因为:• 可用内存空间量有限• ...