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

软件功能就不多说了,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. 原生js计时器

    闲来无事,写一个简单的计时器 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  2. Android系统修改之Notification布局修改(一)

    源码基于Android4.4 相关布局文件的位置: frameworks/base/core/res目录下: 1. notification_template_base.xml 2. notifica ...

  3. 阿里云centos怎么用xshell5登陆

    第一种是用ssh,安装Xshell5   打开XShell   新建会话输入ip   选择新建的会话,点击连接,选择接受并保护,输入root,点击确定   输入密码   已经连接成功了,用Xshell ...

  4. Text ------widget树由两个widget:Center(及其子widget)和Text组成

    import 'package:flutter/material.dart'; void main() => runApp(new Center( child: new Text( 'Hello ...

  5. 使用C#创建Windows服务 并发布Windows 服务

    一.开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NET版本:.NET Framework 4.0 目标平台:X86 二.创建Windows Servic ...

  6. 【GIT】【命令行】

    1) 进入某没有做git的目录: git init ->username@DESKTOP-765V31O MINGW64 ~/PycharmProjects/user_data (master) ...

  7. PHP——laravel之DB类->查询

    DB类之查询: 满足条件的全部获取:DB::table("表名")->where("name",">","1" ...

  8. 让小乌龟可以唱歌——对Python turtle进行拓展

    在Scratch中,小猫是可以唱歌的,而且Scratch的声音木块有着丰富的功能,在这方面Python turtle略有欠缺,今天我们就来完善一下. Python声音模块 Python处理声音的模块很 ...

  9. XML 与 XML Schema的使用教程

    引言:我写本文的宗旨在于给需要使用XML,而又对XML不是很熟悉的人们提供一种使用思路,而不没有给出具体的     使用方法,至于下文中提到的使用方法,还未尝试过,都是从网上整理而来! 一.概述 什么 ...

  10. java.nio.file.NoSuchFileException

    springboot +es es 2.1.0 参考这个 https://www.cnblogs.com/yueshutong/p/9381543.html cluster-nodes :改成127. ...