拿个软件的分析下破解思路(高手请飘过)
[ 破文标题 ] 测试题一 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 yanhuohua999同学,你把作业也发上来了啊? 很感谢,太好了,学习到了。 v好文章!!学习了。。 暴力破解,分析的很好~ 好基础啊。新手学习了。 虽然看不太懂,但顶你一下! 我也来学习下 路过,本人是菜鸟 学习下·!···················