本帖最后由 20120427 于 2013-10-12 17:55 编辑
不得不吐槽下这个软件够坑爹的,输入正确的用户名和注册码提示已经注册成功,但是20%转换限制还在.....
这款软件是重启验证注册表的,我不知道他注册了和没注册到底有什么概念.....
先来追下注册码0053437F . E8 30030000 call AllConve.005346B4 //关键call,算法在里面
00534384 . 84C0 test al,al //如果al为1,下面这个跳就不会实现
00534386 . 74 09 je XAllConve.00534391 //关键跳,跳过注册成功
00534388 . 8BC3 mov eax,ebx
0053438A . E8 21010000 call AllConve.005344B0 //恭喜!软件注册成功!
我们可以F7进入关键call0053476C |. 3BC6 cmp eax,esi //这里是比较我们输入的注册码 eax存放的是我们输入的假码(OD中以十六进制表示,所以我们要转换到十进制)esi就存放我们的真码
例如我输入的用户名:52pojie 得到的注册码:179470094
再来破解20%转换限制
20%转换限制是在未开始转换前,当然也并不是启动软件就有了这个限制,在选项设置这里我们如果点击确定,这个时候20%的转换限制就出现了!这款软件破解实际上并不难,留意寄存器,可以发现很多......
比如我现在要转换一个视频文件,播放时长6分30秒也就是390秒加上20%转换限制就是78秒0052E0C0 /. 55 push ebp //大家可以在这里F2下断
一路跟我们可以看到寄存器窗口的变化
通过浮点进行计算,我们往下看0052E78A |. DB85 6CFEFFFF fild [local.101] //F2下断,F9运行到这里,可以发现这个地方
软件未运行也是这个值,说明它没有发生变化
390000÷5=78000 刚好就是那个78秒
0052E77E |. 69C0 E8030000 imul eax,eax,0x3E8 //eax=186(十进制是390)3E8(十进制是1000) imul(整数乘)
0052E784 |. 8985 6CFEFFFF mov [local.101],eax //把计算后的结果放到[local.101]里面
0052E78A |. DB85 6CFEFFFF fild [local.101] //390000
0052E790 |. D835 84EF5200 fdiv dword ptr ds:[0x52EF84] //5 fdiv(浮点除)
通过这里来看eax不能等于播放时长,先找到播放时长的来源,再往上找找有什么地方可以把eax赋值为0
0052E3B7 |. E8 9870EDFF call AllConve.00405454 //播放时长的来源 F7进入看看
00405462 |. 09C9 or ecx,ecx //如果ecx 为1,那么eax就等于0
0040545E |. 8B4C24 18 mov ecx,dword ptr ss:[esp+0x18] //ecx来自[esp+0x18]
0052E397 |> \6A 00 push 0x0 //实际上就来自这里,如果这里是push 1,那么20%的限制就没有了
一些软件注册是判断某个变量(1=已注册 0=未注册)但这个程序不存在这种变量
破解方法:
[0x52EF84]浮点清0
004818A1 . /74 0E je XAllConve.004818B1 //修改为jmp, 改变标题,去掉启动提示注册的问题
004818A1 /EB 0E jmp XAllConve.004818B1
00531C88 . 53 push ebx //修改为retn 这里是注册按钮一个弹网页的
最后保存下修改过的程序...
简单吧......
附带一张 用真码注册的图
|