飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2906|回复: 2

[原创] Rapid PHP 2007 速破手记

[复制链接]

该用户从未签到

发表于 2007-12-26 19:05:49 | 显示全部楼层 |阅读模式
【文章标题】: Rapid PHP 2007 速破手记
【文章作者】: jjdg
【软件名称】: Rapid PHP 2007
【软件大小】: 4894kb
【下载地址】: http://gzgwbn.skycn.com/down/rapidphp8.zip
【加壳方式】: 修改壳
【保护方式】: 壳
【使用工具】: OD  PEID
【操作平台】: 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:[EBX+39]
  00B0C011    05 00004000     ADD EAX,rapidphp.00400000                ; ASCII "MZP"
  00B0C016    8B4B 3D         MOV ECX,DWORD PTR DS:[EBX+3D]
  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:[ESI]
  00B0C024    30E0            XOR AL,AH
  00B0C026    88C4            MOV AH,AL
  00B0C028    AA              STOS BYTE PTR ES:[EDI]
  00B0C029  ^ E2 F8           LOOPD SHORT rapidphp.00B0C023            f7到这里
  00B0C02B    8B43 08         MOV EAX,DWORD PTR DS:[EBX+8]             f4一次
  00B0C02E    50              PUSH EAX
  00B0C02F    C3              RETN
  
  F7单步到00B0C029  ^ E2 F8           LOOPD SHORT rapidphp.00B0C023
  然后在00B0C02B    8B43 08         MOV EAX,DWORD PTR DS:[EBX+8] 按一下f4
  f8继续走过retn,来到
  00B01220    60              PUSHAD  好!标志出来了!注意ESP
  f8一次,ok,用ESP定律吧!
  下硬件访问断点
  f9一次,来到
  00B01DA5    8D4424 80       LEA EAX,DWORD PTR SS:[ESP-80]      来到这里!
  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:[EBP-20],EAX
  0086DB1A    8945 E8         MOV DWORD PTR SS:[EBP-18],EAX
  0086DB1D    8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX
  0086DB20    8945 EC         MOV DWORD PTR SS:[EBP-14],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:[EAX]
  0086C741    64:8920         MOV DWORD PTR FS:[EAX],ESP
  0086C744    8D55 FC         LEA EDX,DWORD PTR SS:[EBP-4]
  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:[EBP-4]
  0086C754    E8 97FEFFFF     CALL 1.0086C5F0
  0086C759    8BF0            MOV ESI,EAX
  0086C75B    89B3 50030000   MOV DWORD PTR DS:[EBX+350],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:[EBX+2FC]
  0086C770    E8 AB54C1FF     CALL 1.00481C20
  0086C775    8B83 FC020000   MOV EAX,DWORD PTR DS:[EBX+2FC]
  0086C77B    C780 14020000 0>MOV DWORD PTR DS:[EAX+214],2
  0086C785    8D45 F8         LEA EAX,DWORD PTR SS:[EBP-8]
  0086C788    50              PUSH EAX
  0086C789    8B83 50030000   MOV EAX,DWORD PTR DS:[EBX+350]
  0086C78F    8945 F0         MOV DWORD PTR SS:[EBP-10],EAX
  0086C792    C645 F4 00      MOV BYTE PTR SS:[EBP-C],0
  0086C796    8D55 F0         LEA EDX,DWORD PTR SS:[EBP-10]
  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:[87652C]            ; 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:[86C1BC]
  0086DCFA    E8 35EBC2FF     CALL 1.0049C834
  看来,程序启动的提示音来自0086DCEC,
  继续f8到0086DD10  NAG弹出,
  重新载入程序,在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 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2007-12-26 19:34:11 | 显示全部楼层
/:L 又学习了不少.

原来NAG是这么久可以改的.

不过楼主似乎用的是PEDIY的破文生成器吧..
"【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!"
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-12-26 23:10:32 | 显示全部楼层
忘了改了,不好意思!/:L
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表