破解某PDF转换器产品
本文章纯属出于作者自己对技术的探索,绝不用于商业用途(虽然网上已经能够下载到注册机了)
软件功能就不多说了,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转换器产品的更多相关文章
- .NET破解之迅捷PDF转换器(续)
在以前的博文<.NET破解之迅捷PDF转换器>中使用了暴力破解的方法,现在软件版本从5.0升级到6.3,所以也尝试用新的方法. 方法一:暴力破解法 如往常一样,查找搜索到关键的函数,即Is ...
- 破解加密PDF文件pdfcrack
破解加密PDF文件pdfcrack PDF是常见的文档格式.它允许用户设置双重密码来保护文档.第一重是用户密码(user password),当打开PDF文档,输入该密码.第二重是所有者密码(ow ...
- .NET破解之PDFdo转换器
无意中看到一个PDF转换器,叫PDFdo,看起了功能挺多的,于是想把它破了. 下载 官网:http://www.pdfdo.com/ 安装 安装后,只有一个exe应用程序,如果是.NET 程序应该有很 ...
- PDF转WORD工具推荐:迅捷PDF转换器6.8版
迅捷PDF转换器是一款功能强大的pdf转换成word转换器软件.它不仅支持pdf转换成word,word转pdf,还可以实现excel,ppt,jpg与pdf文件的一键式转换.有了它,你可以很轻松转换 ...
- (分享)多功能 PDF转换器v3.0版本
转换的效果非常不错,值得使用.破解成功的截图:这个程序必须随便输入注册码注册,不然会有水印的. 这是程序主界面了 正在测试pdf转word过程,转换结果个人感觉非常不错,跟原版pdf的格式非常接近,个 ...
- .NET破解之PDF编辑器
本教程只能用于学习研究,不可进行任何商业用途.如有使用,请购买正版,尊重他人劳动成果和知识产权! 第一效果团队(1XG Team)组建于2004年,并长期致力于WINDOWS平台应用软件开发,产品主要 ...
- Windows:打印为PDF(PDF转换器)
造冰箱的大熊猫@cnblogs 2019/4/17 文中图片可通过点击鼠标右键查看大图 Windows下实现PDF打印的几个办法: 1.Foxit Reader(福昕PDF浏览器) 安装Foxit R ...
- 利用ARCHPR明文破解获取PDF
我们经常下载一些rar或zip压缩文件,解压时有时发现要密码,而密码多是为了推广而设置的网址等,如果不知道密码,可 以去来源网站上寻找或在压缩文件的注释中查看. 而并非所有都是如此,例如,网上有些人, ...
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...
随机推荐
- android sdk下载及安装教程
转自https://www.cnblogs.com/summary-2017/p/8073225.html 1.点击这个网址https://www.androiddevtools.cn/,打开页面后选 ...
- L1,L2正则化代码
# L1正则 import numpy as np from sklearn.linear_model import Lasso from sklearn.linear_model import SG ...
- 【新特性】JDK1.9
一.目录结构 JDK9具体目录结构如下所示: bin: 该目录包含所有的命令. conf: 包含用户可以编辑的配置文件,例如以前位于jre\lib 目录中的.properties 和 .policy ...
- 调参贝叶斯优化(BayesianOptimization)
from sklearn.datasets import make_classification from sklearn.model_selection import cross_val_score ...
- Jmeter 获取系统时间,和对系统时间进行增减时间
今天做了一个测试,比如发送短信验证码之后的, 验证90s被验证码有效的问题 那如何测试开发的代码,判断了90s内有效呢1. 验证码获取时间距离现在89秒,验证通过2. 验证码获取时间距离现在90秒,验 ...
- DAY20 常用模块(三)
一.加密模块 1.加密方式: 1.有解密的加密方式 2.无解密的加密方式,碰撞检查 1.不同数据加密后的结果一定不一致 2.相同数据的加密结果一定是一致 2.hashlib模块 1.基本使用 ciph ...
- python---- pyqt 十字光标
# encoding: UTF-8 import sys,os import pyqtgraph as pg import datetime as dt import numpy as np impo ...
- 创建X个任意元素数组并且可以遍历的的一个方法
方法一: Array.apply(null, { length: 20 })分析:apply 第二个参数应该是数组,现在把 { length: 20 } 转化为数组,就是一个长度为X的数组(类数组对象 ...
- 如何在Ubuntu 18.04上安装Pip
一.简介: Pip是一个软件包管理系统,它简化了用Python编写的软件包(如Python包索引(PyPI)中的软件包)的安装和管理. 在Ubuntu 18.04上缺省没有安装Pip,但安装非常简单. ...
- 《c++ concurrency in action》读书笔记1
1. 什么是并发通俗来说,并发指两个或者多个独立的事件(活动)同时发生.比如,一边走路一边说话,两个手同时做不同的事情.计算机系统的并发是指一个系统并行处理多个独立的事件(活动), 而不是按顺序或者一 ...