Rapid PHP 2007 速破手记
【文章标题】: Rapid PHP 2007 速破手记【文章作者】: jjdg
【软件名称】: Rapid PHP 2007
【软件大小】: 4894kb
【下载地址】: http://gzgwbn.skycn.com/down/rapidphp8.zip
【加壳方式】: 修改壳
【保护方式】: 壳
【使用工具】: ODPEID
【操作平台】: XP
【软件介绍】: 一款PHP编辑器,不仅可以快速创建PHP,还支持HTML..
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
Rapid PHP Editor 2007 V8.3
软件介绍:
一款PHP编辑器,不仅可以快速创建PHP,还支持HTML、XHTML、CSS和JavaScript编码,提供完整的工具实现包括验证、重复利用、操作、安排编码的格式等功能。
一直想动动笔,可时间很紧,今天碰巧有空,花了点时间破解了一个软件,和大家分享一下!
1.下载、安装
2.PEID 查壳,显示:什么也没有
3.OD载入,提示:...可能这是一个自解压或...,随后又弹出个对话框:....代码分析将是非常不可靠或完全错误的.您仍要继续分析吗? 看来这个程序确是有壳,只不过PEID检测不出来而已!
4.点N后,停在下面:
00B0C000 >E8 00000000 CALL rapidphp.00B0C005 停在这里!
00B0C005 58 POP EAX
00B0C006 83D8 05 SBB EAX,5
00B0C009 89C3 MOV EBX,EAX
00B0C00B 83C3 30 ADD EBX,30
00B0C00E 8B43 39 MOV EAX,DWORD PTR DS:
00B0C011 05 00004000 ADD EAX,rapidphp.00400000 ; ASCII "MZP"
00B0C016 8B4B 3D MOV ECX,DWORD PTR DS:
00B0C019 89C6 MOV ESI,EAX
00B0C01B 89C7 MOV EDI,EAX
00B0C01D 8CD8 MOV AX,DS
00B0C01F 8EC0 MOV ES,AX ; 段寄存器更改
00B0C021 B4 00 MOV AH,0
00B0C023 AC LODS BYTE PTR DS:
00B0C024 30E0 XOR AL,AH
00B0C026 88C4 MOV AH,AL
00B0C028 AA STOS BYTE PTR ES:
00B0C029^ E2 F8 LOOPD SHORT rapidphp.00B0C023 f7到这里
00B0C02B 8B43 08 MOV EAX,DWORD PTR DS: f4一次
00B0C02E 50 PUSH EAX
00B0C02F C3 RETN
F7单步到00B0C029^ E2 F8 LOOPD SHORT rapidphp.00B0C023
然后在00B0C02B 8B43 08 MOV EAX,DWORD PTR DS: 按一下f4
f8继续走过retn,来到
00B01220 60 PUSHAD好!标志出来了!注意ESP
f8一次,ok,用ESP定律吧!
下硬件访问断点
f9一次,来到
00B01DA5 8D4424 80 LEA EAX,DWORD PTR SS: 来到这里!
00B01DA9 6A 00 PUSH 0
00B01DAB 39C4 CMP ESP,EAX
00B01DAD^ 75 FA JNZ SHORT rapidphp.00B01DA9
00B01DAF 83EC 80 SUB ESP,-80 f4到这里
00B01DB2- E9 55BDD6FF JMP rapidphp.0086DB0C
按f4走到00B01DAF 83EC 80 SUB ESP,-80
f8来到,
0086DB0C 55 PUSH EBP f8来到这里!
0086DB0D 8BEC MOV EBP,ESP
0086DB0F 83C4 E0 ADD ESP,-20
0086DB12 53 PUSH EBX
0086DB13 56 PUSH ESI
0086DB14 57 PUSH EDI
0086DB15 33C0 XOR EAX,EAX
0086DB17 8945 E0 MOV DWORD PTR SS:,EAX
0086DB1A 8945 E8 MOV DWORD PTR SS:,EAX
0086DB1D 8945 E4 MOV DWORD PTR SS:,EAX
0086DB20 8945 EC MOV DWORD PTR SS:,EAX
0086DB23 B8 BCC98600 MOV EAX,rapidphp.0086C9BC
好了!
不需要PEID了,直接看就应该知道是delphi的程序头!
就在0086DB0C脱壳先!
5.OD载入脱壳后的文件
先f9一下,看看情况,程序弹出启动的NAG,并且伴随提示音,而且显示:your free 30-usage.....,进入程序没找到输注册码的地方,关闭程序又有NAG弹出,OK情况明了了!
没有输注册码的地方就只能爆破了!
OD重新载入,查找ascii字符串your free,来到
0086C738 55 PUSH EBP
0086C739 68 02C88600 PUSH 1.0086C802
0086C73E 64:FF30 PUSH DWORD PTR FS:
0086C741 64:8920 MOV DWORD PTR FS:,ESP
0086C744 8D55 FC LEA EDX,DWORD PTR SS:
0086C747 B8 18C88600 MOV EAX,1.0086C818 ; yvjcqrdw`yhlfwjvjcqyrlkajrvyfpww`kqs`wvljkylkq`wk`q%v`qqlkbvyr`gla
0086C74C E8 07FADFFF CALL 1.0066C158
0086C751 8B45 FC MOV EAX,DWORD PTR SS:
0086C754 E8 97FEFFFF CALL 1.0086C5F0
0086C759 8BF0 MOV ESI,EAX
0086C75B 89B3 50030000 MOV DWORD PTR DS:,ESI
0086C761 85F6 TEST ESI,ESI
0086C763 75 20 JNZ SHORT 1.0086C785
0086C765 BA 64C88600 MOV EDX,1.0086C864 ; close
0086C76A 8B83 FC020000 MOV EAX,DWORD PTR DS:
0086C770 E8 AB54C1FF CALL 1.00481C20
0086C775 8B83 FC020000 MOV EAX,DWORD PTR DS:
0086C77B C780 14020000 0>MOV DWORD PTR DS:,2
0086C785 8D45 F8 LEA EAX,DWORD PTR SS:
0086C788 50 PUSH EAX
0086C789 8B83 50030000 MOV EAX,DWORD PTR DS:
0086C78F 8945 F0 MOV DWORD PTR SS:,EAX
0086C792 C645 F4 00 MOV BYTE PTR SS:,0
0086C796 8D55 F0 LEA EDX,DWORD PTR SS:
0086C799 33C9 XOR ECX,ECX
0086C79B B8 74C88600 MOV EAX,1.0086C874 ; your free 30-usage trial period has %d uses remaining. 来到这里!
在0086C738 下断点,
考虑到有NAG的弹出,下窗口断点showwindow
f9运行,程序停在0086C738,f8单步向下,
注意f8到0086C759 8BF0 MOV ESI,EAX 的时候,EAX=1C即28,刚好是剩余的使用次数,可见上面这个call很重要!
一路f8向下,来到
0086DCFF 8B15 2C658700 MOV EDX,DWORD PTR DS: ; 1.0087DD04
向上看看,
0086DCEC E8 5FAEB9FF CALL <JMP.&USER32.MessageBeep> 注意这里!
0086DCF1 33C9 XOR ECX,ECX
0086DCF3 B2 01 MOV DL,1
0086DCF5 A1 BCC18600 MOV EAX,DWORD PTR DS:
0086DCFA E8 35EBC2FF CALL 1.0049C834
看来,程序启动的提示音来自0086DCEC,
继续f8到0086DD10NAG弹出,
重新载入程序,在0086C754下断点,f9运行,程序断下,f7进去,f8来到
0086C694 8BC8 MOV ECX,EAX
可以发现,EAX里面就是剩余的使用次数,
0086C696 83F9 1E CMP ECX,1E
然后与30次试用次数做比较
0086C699 /7E 02 JLE SHORT 3.0086C69D
小于就跳走,否则就把ECX清零
0086C6A4 49 DEC ECX
将剩余的使用次数-1,
当次数=0后,0086C763 处的跳转就不会实现,而原先的evaluate按钮就变成close导致程序关闭!
因此将
0086C694 8BC8 MOV ECX,EAX
0086C696 83F9 1E CMP ECX,1E
0086C699 7E 02 JLE SHORT 3.0086C69D
改为
0086C694 B9 1E000000 MOV ECX,1E
0086C699 EB 02 JMP SHORT 4.0086C69D
就可以解决次数的问题!
在0086DCEC和0086DD10下断点,f9,程序停在0086DCEC,f7进去,
00408B50- FF25 ACE98700 JMP DWORD PTR DS:[<&USER32.MessageBeep>] ; USER32.MessageBeep
改为ret直接返回就不会有提示音了!
f7进入0086DD10,来到
004A0C8C 55 PUSH EBP
直接改为ret!
好了!NAG也屏蔽掉了!
通过对比可以发现:实际上0086C694处不修改也可以的!
总结:00408B50和004A0C8C 改为ret即可完成此软件的爆破!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
jjdg
2007年12月26日 19:17:09
[ 本帖最后由 jjdg 于 2007-12-26 23:09 编辑 ] /:L 又学习了不少.
原来NAG是这么久可以改的.
不过楼主似乎用的是PEDIY的破文生成器吧..
"【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!" 忘了改了,不好意思!/:L
页:
[1]