好友
阅读权限10
听众
最后登录1970-1-1
|
[ 破文标题 ] 测试题一 By:yanhuohua999
[ 破文作者 ] yanhuohua999
[ 作者邮箱 ] whf16325.tom@tom.com
[ 破解工具 ] PEID、flyODBG
[ 破解平台 ] Windows XP SP2
[ 软件名称 ] MP3音频录音机 专业版
[ 原版下载 ] http://www.flywing.cn/mp3_audio_recorder.htm
[ 破解声明 ] 只提供交流思路,不提供补丁
-----------------------------------------------------
[ 破解过程 ]-----------------------------------------
MP3音频录音机 专业版
追码不重要,主要是对软件各个角度来做分析。
查壳:Borland Delphi 6.0 - 7.0 [Overlay]
没壳直接载入
今天就根据N大的序所学到的思路来把这个软件过一遍。。。。
运行看看软件,先认识下他,看看长的什么样子...(1.没有注册的启动有提示、2.注册试试发现有错误提示字符串 3.错误后有提示窗弹出4.没有注册的有功能限制 5.想到注册后正确序列号会保存到硬盘文件或注册表)大概先认识他就这么多,一会调试着看看。。。。这些可都是突破口啊
先方法1.字符串法:
OD载入,不运行了,直接右键查找字符串,来看看有没有可用的信息。发现《感谢您注册我们的软件,请关闭本软件并重新运行,以使您的注册生效!》,这里不是注册失败,而是重新运行,和错误码错误的时候提示有冲突,想到这应该大概是序列号正确的时候的提示,一会验证下,双击,OD停在这里 005F83A8
005F83A8 |. B8 4C845F00 MOV EAX,recorder.005F844C ; 感谢您注册我们的软件,请关闭本软件并重新运行,以使您的注册生效!
005F83AD |. E8 6229E4FF CALL recorder.0043AD14
005F83B2 |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
005F83B7 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
005F83B9 |. E8 A6540200 CALL recorder.0061D864
005F83BE |. 8BC6 MOV EAX,ESI
------------------------------------------------------------
向上翻看下程序,观察下,代码如下:
005F832F |. E8 1011E1FF CALL recorder.00409444
005F8334 |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
005F8339 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
005F833B |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
005F833E |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
005F8341 |. E8 F62B0200 CALL recorder.0061AF3C
005F8346 |. 84C0 TEST AL,AL
005F8348 |. 74 7D JE SHORT recorder.005F83C7 大家注意这里有个跳过重启提示的JE,很可疑
005F834A |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
005F834F |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
005F8351 |. 8B88 08030000 MOV ECX,DWORD PTR DS:[EAX+308]
005F8357 |. B2 01 MOV DL,1
005F8359 |. A1 F42C4400 MOV EAX,DWORD PTR DS:[442CF4]
005F835E |. E8 41AAE4FF CALL recorder.00442DA4
005F8363 |. 8BD8 MOV EBX,EAX
005F8365 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
005F8368 |. 50 PUSH EAX
005F8369 |. B9 14845F00 MOV ECX,recorder.005F8414 ; username
005F836E |. BA 28845F00 MOV EDX,recorder.005F8428 ; user_info
005F8373 |. 8BC3 MOV EAX,EBX
005F8375 |. 8B38 MOV EDI,DWORD PTR DS:[EAX]
005F8377 |. FF57 04 CALL DWORD PTR DS:[EDI+4]
005F837A |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
005F837D |. 50 PUSH EAX
005F837E |. B9 3C845F00 MOV ECX,recorder.005F843C ; regcode
005F8383 |. BA 28845F00 MOV EDX,recorder.005F8428 ; user_info
005F8388 |. 8BC3 MOV EAX,EBX
005F838A |. 8B38 MOV EDI,DWORD PTR DS:[EAX]
005F838C |. FF57 04 CALL DWORD PTR DS:[EDI+4]
005F838F |. 8BC3 MOV EAX,EBX
005F8391 |. E8 DEB7E0FF CALL recorder.00403B74
005F8396 |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
005F839B |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
005F839D |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
005F83A0 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
005F83A3 |. E8 C0480200 CALL recorder.0061CC68
005F83A8 |. B8 4C845F00 MOV EAX,recorder.005F844C ; 感谢您注册我们的软件,请关闭本软件并重新运行,以使您的注册生效!
005F83AD |. E8 6229E4FF CALL recorder.0043AD14
005F83B2 |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
在上面有个可以跳过去重启提示的跳,有点可以,验证下什么作用,在他的上面2~3个call处下断,我们在005F8324处下断,然后运行程序注册测试下这个跳的作用~~~
运行程序后注册,然后断下来了,看到这个CALL的数据没,直接显示我们的用户名了,F8单步,
005F8324 |. E8 E71DE8FF CALL recorder.0047A110 用户名出现
005F8329 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
005F832C |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
005F832F |. E8 1011E1FF CALL recorder.00409444 假码出现
005F8334 |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
005F8339 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
005F833B |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
005F833E |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
005F8341 |. E8 F62B0200 CALL recorder.0061AF3C 算法CALL
005F8346 |. 84C0 TEST AL,AL
005F8348 |. 74 7D JE SHORT recorder.005F83C7 关键跳。
大家看到没有这里不是明码比较,而是al 标识的比较,接着跟着程序跳走,提示错误,看来这里是真正的注册成功与否的比较。一会拿这里开刀。。。。这里只说找关键点的思路
方法2.假如没有字符提示怎么办?万能断点法!
OD重新载入程序,运行,下万能断点。注册,好断下来了
005F8324 |. E8 E71DE8FF CALL recorder.0047A110 断在这里
005F8329 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
005F832C |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
005F832F |. E8 1011E1FF CALL recorder.00409444
005F8334 |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
005F8339 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
005F833B |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
005F833E |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
005F8341 |. E8 F62B0200 CALL recorder.0061AF3C
005F8346 |. 84C0 TEST AL,AL
005F8348 |. 74 7D JE SHORT recorder.005F83C7
断下来后不是程序段,寄存窗口出现我们用户名,我们f8单步走,alt+f9回到程序,然后单步向下走走,看下程序的变化,
005F830B |. E8 001EE8FF CALL recorder.0047A110
005F8310 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
005F8313 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
005F8316 |. E8 2911E1FF CALL recorder.00409444
005F831B |. 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
005F831E |. 8B86 14030000 MOV EAX,DWORD PTR DS:[ESI+314]
005F8324 |. E8 E71DE8FF CALL recorder.0047A110
005F8329 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
005F832C |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
005F832F |. E8 1011E1FF CALL recorder.00409444
005F8334 |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
看看。。和上面的一样,又回到关键的地方了。。
方法3.假如万能断点断不下来怎么办?窗体函数法!因为启动的时候有提示窗口弹出嘛!
OD重新载入程序,下函数CreateWindowExA、CreateWindowExW.
这个文字写不好写,我有空做个语音视频好了
我现在破解这个软件,大家看好。
还是来到关键call。处
005F8341 |. E8 F62B0200 CALL recorder.0061AF3C 关键call。。
005F8346 |. 84C0 TEST AL,AL
005F8348 |. 74 7D JE SHORT recorder.005F83C7
005F834A |. A1 C88D6400 MOV EAX,DWORD PTR DS:[648DC8]
005F834F |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
005F8351 |. 8B88 08030000 MOV ECX,DWORD PTR DS:[EAX+308]
005F8357 |. B2 01 MOV DL,1
005F8359 |. A1 F42C4400 MOV EAX,DWORD PTR DS:[442CF4]
005F835E |. E8 41AAE4FF CALL recorder.00442DA4
005F8363 |. 8BD8 MOV EBX,EAX
005F8365 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
005F8368 |. 50 PUSH EAX
005F8369 |. B9 14845F00 MOV ECX,recorder.005F8414 ; username
005F836E |. BA 28845F00 MOV EDX,recorder.005F8428 ; user_info
005F8373 |. 8BC3 MOV EAX,EBX
005F8375 |. 8B38 MOV EDI,DWORD PTR DS:[EAX]
005F8377 |. FF57 04 CALL DWORD PTR DS:[EDI+4]
005F837A |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
005F837D |. 50 PUSH EAX
005F837E |. B9 3C845F00 MOV ECX,recorder.005F843C ; regcode
005F8383 |. BA 28845F00 MOV EDX,recorder.005F8428 ; user_info
005F8388 |. 8BC3 MOV EAX,EBX
回车跟进这个 call 关键call,
因为经过这个call后AL赋值,返回为0就跳到错误,返回为1就是正确的。。
跟进后发现
EBP=0012FDA8
局部调用来自 005F8341, 005F8A09, 0061AA85, 0061B48E
有四处调用,
0061AF3C $ 55 PUSH EBP
0061AF3D . 8BEC MOV EBP,ESP
0061AF3F . 6A 00 PUSH 0
0061AF41 . 6A 00 PUSH 0
0061AF43 . 6A 00 PUSH 0
0061AF45 . 6A 00 PUSH 0
0061AF47 . 6A 00 PUSH 0
0061AF49 . 53 PUSH EBX
0061AF4A . 56 PUSH ESI
0061AF4B . 57 PUSH EDI
0061AF4C . 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
0061AF4F . 8955 FC MOV DWORD PTR SS:[EBP-4],EDX
0061AF52 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0061AF55 . E8 FE9EDEFF CALL recorder.00404E58
0061AF5A . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0061AF5D . E8 F69EDEFF CALL recorder.00404E58
0061AF62 . 33C0 XOR EAX,EAX
我们这样破解,把上面的代码汇编成:
0061AF3C $ 55 xor eax,eax eax清空数据
0061AF3D . 8BEC MOV eax,1 直接赋值为1
0061AF3F . 6A 00 retn 在这里就 直接返回了
0061AF41 . 6A 00 PUSH 0
0061AF43 . 6A 00 PUSH 0
运行后注册成功,保存修改后的软件,运行,直接注册过的嘿嘿
[ 破解总结 ]-----------------------------------------
有空给大家做视频好了,我打字太慢。。。
-----------------------------------------------------
[ 版权声明 ]
-----------------------------------------------------
|
免费评分
-
查看全部评分
|