yanhuohua999 发表于 2009-10-20 01:57

拿个软件的分析下破解思路(高手请飘过)

[ 破文标题 ] 测试题一 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
没壳直接载入

今天就根据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:
005F83B7|.8B00          MOV EAX,DWORD PTR DS:
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:
005F8339|.8B00          MOV EAX,DWORD PTR DS:
005F833B|.8B4D F4       MOV ECX,DWORD PTR SS:
005F833E|.8B55 F8       MOV EDX,DWORD PTR SS:
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:
005F834F|.8B00          MOV EAX,DWORD PTR DS:
005F8351|.8B88 08030000 MOV ECX,DWORD PTR DS:
005F8357|.B2 01         MOV DL,1
005F8359|.A1 F42C4400   MOV EAX,DWORD PTR DS:
005F835E|.E8 41AAE4FF   CALL recorder.00442DA4
005F8363|.8BD8          MOV EBX,EAX
005F8365|.8B45 F8       MOV EAX,DWORD PTR SS:
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:
005F8377|.FF57 04       CALL DWORD PTR DS:
005F837A|.8B45 F4       MOV EAX,DWORD PTR SS:
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:
005F838C|.FF57 04       CALL DWORD PTR DS:
005F838F|.8BC3          MOV EAX,EBX
005F8391|.E8 DEB7E0FF   CALL recorder.00403B74
005F8396|.A1 C88D6400   MOV EAX,DWORD PTR DS:
005F839B|.8B00          MOV EAX,DWORD PTR DS:
005F839D|.8B4D F4       MOV ECX,DWORD PTR SS:
005F83A0|.8B55 F8       MOV EDX,DWORD PTR SS:
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:

在上面有个可以跳过去重启提示的跳,有点可以,验证下什么作用,在他的上面2~3个call处下断,我们在005F8324处下断,然后运行程序注册测试下这个跳的作用~~~
运行程序后注册,然后断下来了,看到这个CALL的数据没,直接显示我们的用户名了,F8单步,
005F8324|.E8 E71DE8FF   CALL recorder.0047A110            用户名出现
005F8329|.8B45 EC       MOV EAX,DWORD PTR SS:
005F832C|.8D55 F4       LEA EDX,DWORD PTR SS:
005F832F|.E8 1011E1FF   CALL recorder.00409444               假码出现
005F8334|.A1 C88D6400   MOV EAX,DWORD PTR DS:
005F8339|.8B00          MOV EAX,DWORD PTR DS:
005F833B|.8B4D F4       MOV ECX,DWORD PTR SS:
005F833E|.8B55 F8       MOV EDX,DWORD PTR SS:
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:
005F832C|.8D55 F4       LEA EDX,DWORD PTR SS:
005F832F|.E8 1011E1FF   CALL recorder.00409444
005F8334|.A1 C88D6400   MOV EAX,DWORD PTR DS:
005F8339|.8B00          MOV EAX,DWORD PTR DS:
005F833B|.8B4D F4       MOV ECX,DWORD PTR SS:
005F833E|.8B55 F8       MOV EDX,DWORD PTR SS:
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:
005F8313|.8D55 F8       LEA EDX,DWORD PTR SS:
005F8316|.E8 2911E1FF   CALL recorder.00409444
005F831B|.8D55 EC       LEA EDX,DWORD PTR SS:
005F831E|.8B86 14030000 MOV EAX,DWORD PTR DS:
005F8324|.E8 E71DE8FF   CALL recorder.0047A110
005F8329|.8B45 EC       MOV EAX,DWORD PTR SS:
005F832C|.8D55 F4       LEA EDX,DWORD PTR SS:
005F832F|.E8 1011E1FF   CALL recorder.00409444
005F8334|.A1 C88D6400   MOV EAX,DWORD PTR DS:
看看。。和上面的一样,又回到关键的地方了。。


方法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:
005F834F|.8B00          MOV EAX,DWORD PTR DS:
005F8351|.8B88 08030000 MOV ECX,DWORD PTR DS:
005F8357|.B2 01         MOV DL,1
005F8359|.A1 F42C4400   MOV EAX,DWORD PTR DS:
005F835E|.E8 41AAE4FF   CALL recorder.00442DA4
005F8363|.8BD8          MOV EBX,EAX
005F8365|.8B45 F8       MOV EAX,DWORD PTR SS:
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:
005F8377|.FF57 04       CALL DWORD PTR DS:
005F837A|.8B45 F4       MOV EAX,DWORD PTR SS:
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:,ECX
0061AF4F   .8955 FC       MOV DWORD PTR SS:,EDX
0061AF52   .8B45 FC       MOV EAX,DWORD PTR SS:
0061AF55   .E8 FE9EDEFF   CALL recorder.00404E58
0061AF5A   .8B45 F8       MOV EAX,DWORD PTR SS:
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


运行后注册成功,保存修改后的软件,运行,直接注册过的嘿嘿

[ 破解总结 ]-----------------------------------------

有空给大家做视频好了,我打字太慢。。。
-----------------------------------------------------
[ 版权声明 ]
-----------------------------------------------------
http://www.52pojie.cn/home/attachment/200910/19/93927_1255974762N0Q0.jpg

20602060 发表于 2009-10-21 12:00

yanhuohua999同学,你把作业也发上来了啊?

winluo 发表于 2009-10-21 10:32

很感谢,太好了,学习到了。

lyjxy 发表于 2009-10-20 19:45

v好文章!!学习了。。

Hmily 发表于 2009-10-20 10:39

暴力破解,分析的很好~

xujunlin5588 发表于 2009-10-20 08:32

好基础啊。新手学习了。

001 发表于 2009-10-20 03:02

虽然看不太懂,但顶你一下!

我本善良 发表于 2009-10-21 20:29

我也来学习下

syy111 发表于 2009-10-23 14:47

路过,本人是菜鸟

fandingshizhi1 发表于 2009-10-24 14:22

学习下·!···················
页: [1] 2 3
查看完整版本: 拿个软件的分析下破解思路(高手请飘过)