XXXXXX15 破解
本帖最后由 姐又寡闻了 于 2019-6-6 22:16 编辑新手第一次成功独立完成破解,把过程分享出来,跟同样的新手们讨论学习。大神请忽视。
前几天需要将一份说明书的扫描件转换为可编辑的电子文档,于是需要使用 OCR (光学识别) 软件来做这件事,无奈找了几款比较好的,都是收费的。有些下载完根本就没法用,由于这类软件通常体积比较大,没法一个个的下载尝试哪个能用哪个不能用,所以只能拿其中的一个破解试试。好了,废话不多说了,开始动手吧。
在虚拟机中按照安装向导一步步的把这个软件装上。
破解的第一步是什么?载入 OD?错,当然是查壳啦。
打开,软件的安装目录,找到主程序,拖入 PEiD 中。见图1。
图1 用 PEiD 查壳什么都没找到?辣也不sing。。点击 PEiDDSCAN 文本框右边的大于号按钮,点击“深度扫描”,得出了结果“VC++6.0”。看来没壳,运气不错。{:1_912:}
壳查完了,可以 OD 载入了吗?别急,先把程序运行起来看看效果,这样有助于我们破解它。见图2。
图2 运行起来的第一个界面
接下来我们点击关闭,发现会弹出“激活错误”的对话框。见图3。
图3 关闭时弹出的对话框
分析:
既然弹出了注册窗口,那么我们的目标就明确了,那就是找出这个对话框是怎么弹出来的。
为什么要定这样的目标呢,在开始破解之前我们先来分(cai)析(ce)一下。。
首先程序启动的时候要判断是否已经注册了,如果注册就放行,否则就弹出注册窗口。既然找到“判断条件”就可以让它放行,那不就是找关键跳或者关键 call 就行了嘛。(备注,此时你应该想到拦截显示窗口应该下哪个 API 断点)
关闭窗口的时候弹出了“激活错误”对话框,说明注册窗口在关闭的时候检查了注册状态,并且如果发现没有注册就结束进程。(备注,此时你应该想到拦截弹出对话框和拦截程序退出应该下哪个 API 断点)
既然目标有了,那么我们就开始行动吧。
废话说完了,现在终于可以直接 OD 载入了。
载入后会停在入口点处,此处直接放行就行了,因为加载的库比较多,从 OEP (程序入口点)追踪到弹出注册窗口距离比较远,单步跟踪的话会疯掉的。。
经过测试发现,由于窗口加载得比较多,所以下 ShowWindow() API 断点也并不划算。会被断下来几十次,我们从这几十次里找注册窗口是很麻烦的。
既然无法拦截弹出注册窗口,那么我们就换第二种思路,拦截关闭时候弹出的“激活错误”窗口。
图4 下 MessageBoxW 断点
程序启动起来之后,我们就可以下 MessageBoxW() 断点了,见图4。
断点下好之后,我们关闭注册窗口,让它弹出“激活错误”对话框,见图5。
图5 MessageBoxW() 被拦截
程序停下来之后我们需要会到程序领空,因为我们现在在系统领空里,还不能修改。
回到程序领空有两种常用的办法,第一种方法是在右下角的堆栈窗口的第一行上按回车键,这样可以自动回溯;第二种方法是按 Alt+F9,让程序自己执行回去。
注意,这时候程序运行起来之后会弹出对话框,我们必须得点击“确定”按钮关闭对话框后才会再被 OD 断下来。
回到程序领空之后,我们往上翻代码,这段代码我们需要分析一下,所以 LZ 先把代码贴上来。见图6。
0050847A|.E8 51040A00 call readiris.005A88D0 ;关键call
0050847F|.83C4 08 add esp,0x8 ;弹栈
00508482|.8985 CCFDFFFF mov ,eax ; 将关键call 的返回值保存到 local.141 变量中
00508488|.8D85 E4FDFFFF lea eax,
0050848E|.50 push eax
0050848F|.E8 6C0A0000 call readiris.00508F00 ;注意,这个不是关键call
00508494|.83C4 04 add esp,0x4
00508497|.83BD CCFDFFFF>cmp ,0x0 ; 比较 local.141 变量的值是否为0,local.141 即关键call 的返回值
0050849E|.75 79 jnz short readiris.00508519 ;关键跳,如果 local.141 的值是 0 就不跳。一旦跳入就弹出“激活失败”,并退出程序。
005084A0|.8BF4 mov esi,esp
005084A2|.6A 30 push 0x30
005084A4|.68 C00FF800 push readiris.00F80FC0 ;UNICODE "Readiris"
005084A9|.6A 00 push 0x0
005084AB|.68 341D0000 push 0x1D34
005084B0|.8D8D E8FCFFFF lea ecx,
005084B6|.E8 6525FCFF call readiris.004CAA20
005084BB|.8985 E0FCFFFF mov ,eax
005084C1|.8B8D E0FCFFFF mov ecx,
005084C7|.E8 B4EDEFFF call readiris.00407280
005084CC|.50 push eax
005084CD|.8BFC mov edi,esp
005084CF|.FF15 F48DDF00 call dword ptr ds:[<&USER32.GetFocus>] ; [GetFocus
005084D5|.3BFC cmp edi,esp
005084D7|.E8 C4312300 call readiris.0073B6A0
005084DC|.50 push eax ; |hOwner = 000D01B4 ('_Readiris 15',class='Afx:00400000:0')
005084DD|.FF15 B08EDF00 call dword ptr ds:[<&USER32.MessageBoxW>] ;弹出注册错误
由于 IE 的兼容性问题,LZ 无法打开代码编辑窗口,所以就直接粘贴在这里了。
可以很清晰的看到,005084DD 调用了 MessageBoxW() 函数,而上面能够跳过这个弹窗的就是 0050849E,所以 0050849E 一定就是关键跳了。
一般来说关键跳上面的 call 就是关键call,但是在 0050849E 上面的 0050848F 并不是关键call,而再往上一个 call 也就是 0050847A 才是关键call。
这是为什么呢, 因为决定关键跳要不要跳的是 local.141 变量,而这个 local.141 变量的值是从哪来的?就是 0050847A 这个函数的返回值,所以我们断定它是关键call。
另外我们发现,在调用 0050847A 之前并没有弹出注册窗口,而 F8 步过 0050847A 之后,注册窗口就出来了,那么说明校验注册标识的动作就是在这个函数里做的。
不过我们的目的是爆破,并不是追注册码,所以在这里直接修改就行了。
修改的方式有两种:
1.把关键跳给改成 jmp,让它无条件跳过去,这样就不管关键call 返回什么都不会退出了。
2.修改关键call,直接让它返回 1。
图6 关键 call
这里我们选择第二种方式,也就是修改关键call。
为什么呢,主要有两个原因:
第一,关键call 里面会弹出注册窗口,如果只修改关键跳,每次启动软件的时候还是会弹出注册窗口,只是我们不注册也可以正常使用这个软件而已。
第二,我们无法保证程序其它地方不会调用这个关键call来校验,所以直接修改了这个关键call 就可以一了百了了。
那么这时候我们在关键call 按 F2 下断,然后 Ctrl+F2 直接重新运行程序,放过 OEP 后就会直接来到 0050847A 这里。
我们 F7 跟进去,直接在段首按空格键修改代码:
mov eax,1
retn
右键保存文件即可。
见图7、图8、图9、图10。
图7 修改前
图8 修改后
图9 复制到文件
图10 保存文件
最后说一点需要注意的地方:如果发现程序运行不起来了,并不是程序的暗桩,而是前一个进程没有退出导致的,把 OD 关掉,打开任务管理器,把所有 readiris.exe 进程 kill 掉就可以了。
下载地址:http://pan.baidu.com/s/1dEQ2Y1j 密码:t4bf
wgsls 发表于 2016-10-29 21:52
补丁替换程序后,不弹出注册,启动程序后载入需要转换的文件,显示只能转换3页……是不是不能联网?(xp系 ...
有截图吗,我看下。
在我这测试标题栏会显示“第3页/共3页”,但是我用12页的文档做测试,也是没问题的,全都能转换。
而且右侧显示试用剩余天数10天,我把日期向后调整一年,显示试用剩余0天,但仍是可用的。
如果是上述两种情形,可以忽略。 c0co123 发表于 2017-11-22 19:04
1. 用得是你网盘下的
2. win7 64
我又从网盘下载了一份,在一个干净的 win7 虚拟机里面测试了,没有出现只能转3页的情况。
你安装好之后,使用压缩包里的 readiris.exe 替换安装目录下的同名文件了吗?readiris.exe 是破解补丁,要替换才生效。 看看怎么用 简直就是高手!我学习了!望以后多出这类教程!谢谢啊! 楼主教材很详细,但是我还是有些懵逼了 补丁替换程序后,不弹出注册,启动程序后载入需要转换的文件,显示只能转换3页……是不是不能联网?(xp系统下测试) yuhuashi 发表于 2016-10-30 13:58
有截图吗,我看下。
在我这测试标题栏会显示“第3页/共3页”,但是我用12页的文档做测试,也是没问题的 ...
确实用不成的(xp系统)。
本帖最后由 yuhuashi 于 2016-10-31 11:51 编辑
wgsls 发表于 2016-10-30 22:54
确实用不成的(xp系统)。
好奇怪,我也是在 xp 系统上测试的,而且网络是正常的,转换了 102 页都没有问题。
谢谢分享 我也是只能用3页、