- UID
- 16062
注册时间2006-6-19
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
【文章标题】: 爆破HTMLPad 2007 Pro 8.1.0.78
【文章作者】: JJDG
【软件名称】: HTMLPad 2007 Pro 8.1.0.78
【软件大小】: 3.83M
【下载地址】: http://dl.onlinedown.net/down/htmlpad8.zip
【保护方式】: 文件头修改+壳
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD PEID
【操作平台】: xp
【软件介绍】: HTMLPad 2004 是个具有强大功能的HTML原始码编辑器
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
HTMLPad 2007 Pro 8.1.0.78
软件大小:3952KB 软件类别:国外软件/主页制作
下载次数:9011 软件授权:共享版
软件语言:英文 运行环境:Win9x/Me/NT/2000/XP/2003
软件评级: 更新时间:2007-7-27 10:19:22
开 发 商:Home Page 联 系 人:未知
软件详细信息
HTMLPad 2004 是个具有强大功能的 HTML 原始码编辑器,专为自动化及加速各式各样的网页文件的研发所设计,尤其是 HTML。特别的是它支援 JavaScript、VBScript、SSI、ASP、Perl,更是一个所见即所得的网页编辑器。
下载安装后,peid查看:什么也没发现
运行程序,有提示音,并且弹出提示剩余使用次数的对话框
进入程序,找不到输入注册码的地方,所以决定直接爆破!
OD载入,提示程序被压缩、加密,然后停在下面:
00A83000 > E8 00000000 CALL htmlpad.00A83005 <---停在这里!
00A83005 58 POP EAX
00A83006 83D8 05 SBB EAX,5
00A83009 89C3 MOV EBX,EAX
00A8300B 83C3 30 ADD EBX,30
00A8300E 8B43 39 MOV EAX,DWORD PTR DS:[EBX+39]
00A83011 05 00004000 ADD EAX,htmlpad.00400000 ; ASCII "MZP"
00A83016 8B4B 3D MOV ECX,DWORD PTR DS:[EBX+3D]
00A83019 89C6 MOV ESI,EAX
00A8301B 89C7 MOV EDI,EAX
00A8301D 8CD8 MOV AX,DS
00A8301F 8EC0 MOV ES,AX ; 段寄存器更改
00A83021 B4 00 MOV AH,0
00A83023 AC LODS BYTE PTR DS:[ESI]
00A83024 30E0 XOR AL,AH
00A83026 88C4 MOV AH,AL
00A83028 AA STOS BYTE PTR ES:[EDI]
00A83029 ^ E2 F8 LOOPD SHORT htmlpad.00A83023
00A8302B 8B43 08 MOV EAX,DWORD PTR DS:[EBX+8] <---F4到在这里!
00A8302E 50 PUSH EAX
00A8302F C3 RETN
00A83030 0000 ADD BYTE PTR DS:[EAX],AL
00A83032 0000 ADD BYTE PTR DS:[EAX],AL
00A83034 0000 ADD BYTE PTR DS:[EAX],AL
00A83036 0000 ADD BYTE PTR DS:[EAX],AL
00A83038 B0 7C MOV AL,7C
00A8303A A7 CMPS DWORD PTR DS:[ESI],DWORD PTR ES:[ED>
00A8303B 0000 ADD BYTE PTR DS:[EAX],AL
00A8303D 0002 ADD BYTE PTR DS:[EDX],AL
00A8303F 1A00 SBB AL,BYTE PTR DS:[EAX]
00A83041 0000 ADD BYTE PTR DS:[EAX],AL
00A83043 0000 ADD BYTE PTR DS:[EAX],AL
00A83045 0000 ADD BYTE PTR DS:[EAX],AL
00A83047 0000 ADD BYTE PTR DS:[EAX],AL
一上来就是个CALL啊!什么壳啊?会不会可能是修改了文件头啊?
F7向下,然后F4到00A8302B,F8单步,来到:
00A77CB0 60 PUSHAD <---来到这里 眼熟的东西出来!
00A77CB1 BE 00208E00 MOV ESI,htmlpad.008E2000
00A77CB6 8DBE 00F0B1FF LEA EDI,DWORD PTR DS:[ESI+FFB1F000]
00A77CBC 57 PUSH EDI
00A77CBD 89E5 MOV EBP,ESP
00A77CBF 8D9C24 80C1FFFF LEA EBX,DWORD PTR SS:[ESP-3E80]
00A77CC6 31C0 XOR EAX,EAX
00A77CC8 50 PUSH EAX
00A77CC9 39DC CMP ESP,EBX
00A77CCB ^ 75 FB JNZ SHORT htmlpad.00A77CC8
00A77CCD 46 INC ESI
00A77CCE 46 INC ESI
00A77CCF 53 PUSH EBX
00A77CD0 68 695E6700 PUSH htmlpad.00675E69
00A77CD5 57 PUSH EDI
00A77CD6 83C3 04 ADD EBX,4
00A77CD9 53 PUSH EBX
00A77CDA 68 A65C1900 PUSH 195CA6
00A77CDF 56 PUSH ESI
00A77CE0 83C3 04 ADD EBX,4
00A77CE3 53 PUSH EBX
00A77CE4 50 PUSH EAX
F8一次,
注意寄存器里面ESP的变化,
EAX 00A77CB0 htmlpad.00A77CB0
ECX 00000000
EDX 7C92EB94 ntdll.KiFastSystemCallRet
EBX 00A83030 htmlpad.00A83030
ESP 0012FFA4
EBP 0012FFF0
ESI 008E2400 htmlpad.008E2400
EDI 008E2400 htmlpad.008E2400
EIP 00A77CB1 htmlpad.00A77CB1
C 0 ES 0023 32位 0(FFFFFFFF)
P 1 CS 001B 32位 0(FFFFFFFF)
A 0 SS 0023 32位 0(FFFFFFFF)
Z 0 DS 0023 32位 0(FFFFFFFF)
S 0 FS 003B 32位 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_SUCCESS (00000000)
EFL 00000206 (NO,NB,NE,A,NS,PE,GE,G)
ST0 empty -UNORM BCE0 01050104 00000000
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 1.0000000000000000000
ST7 empty 1.0000000000000000000
3 2 1 0 E S P U O Z D I
FST 4000 Cond 1 0 0 0 Err 0 0 0 0 0 0 0 0 (EQ)
FCW 027F Prec NEAR,53 掩码 1 1 1 1 1 1
采用ESP定律下硬件访问断点:在ESP 0012FFA4上面右键,数据窗口中跟随,在0012FFA4 008E2400 .$? htmlpad.008E2400上面右键,选择断点-硬件访问-字,
F9来到,
00A78835 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80] <---停在这里!
00A78839 6A 00 PUSH 0
00A7883B 39C4 CMP ESP,EAX
00A7883D ^ 75 FA JNZ SHORT htmlpad.00A78839
00A7883F 83EC 80 SUB ESP,-80 <---F4到在这里!
00A78842 - E9 5DECD9FF JMP htmlpad.008174A4
F4到00A7883F,F8两次,来到:
008174A4 55 PUSH EBP 好了!这里一看就是delphi的开头!就在这里脱壳!
008174A5 8BEC MOV EBP,ESP
008174A7 83C4 E0 ADD ESP,-20
008174AA 53 PUSH EBX
008174AB 56 PUSH ESI
008174AC 57 PUSH EDI
008174AD 33C0 XOR EAX,EAX
008174AF 8945 E0 MOV DWORD PTR SS:[EBP-20],EAX
008174B2 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
008174B5 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
008174B8 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
008174BB B8 8C638100 MOV EAX,htmlpad.0081638C
008174C0 E8 4B04BFFF CALL htmlpad.00407910
008174C5 33C0 XOR EAX,EAX
008174C7 55 PUSH EBP
008174C8 68 E1778100 PUSH htmlpad.008177E1
008174CD 64:FF30 PUSH DWORD PTR FS:[EAX]
008174D0 64:8920 MOV DWORD PTR FS:[EAX],ESP
008174D3 E8 5C99E3FF CALL htmlpad.00650E34
008174D8 68 F0778100 PUSH htmlpad.008177F0 ; ASCII "WeBuilder"
008174DD 6A 00 PUSH 0
008174DF 6A 00 PUSH 0
008174E1 E8 6E08BFFF CALL htmlpad.00407D54
008174E6 33DB XOR EBX,EBX
008174E8 E8 B709BFFF CALL htmlpad.00407EA4 ; JMP 到 ntdll.RtlGetLastWin32Error
在008174A4脱壳,保存文件!
程序脱壳后可以运行!
PEID检测,Borland Delphi 6.0 - 7.0
下面开始爆破!
OD载入脱壳后的文件,提示程序被压缩,不管了,继续,
先查找ASCII字符串,看看有没有可用的,
仅发现一处有用的:0077A8BB B8 94A97700 MOV EAX,2.0077A994 ; your free 30-usage trial period has %d uses remaining.
在0077A8BB先下个断点再说
F9一下,程序断下,注意右边寄存器里面的值,
EAX 0000001B <---仔细看这里!
ECX 00000000
EDX 0012FE08
EBX 014EE2F8
ESP 0012FDF0
EBP 0012FE18
ESI 0000001D
EDI 7C930738 ntdll.7C930738
EIP 0077A8BB 2.0077A8BB
C 0 ES 0023 32位 0(FFFFFFFF)
P 1 CS 001B 32位 0(FFFFFFFF)
A 0 SS 0023 32位 0(FFFFFFFF)
Z 1 DS 0023 32位 0(FFFFFFFF)
S 0 FS 003B 32位 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_NO_SCROLLBARS (000005A7)
EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE)
ST0 empty -UNORM BCE0 01050104 00000000
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 1.0000000000000000000
ST6 empty -20.322303726834154090
ST7 empty 0.9999884259259259611
3 2 1 0 E S P U O Z D I
FST 4000 Cond 1 0 0 0 Err 0 0 0 0 0 0 0 0 (EQ)
FCW 1372 Prec NEAR,64 掩码 1 1 0 0 1 0
F8单步走过几个RetN后,来到
00817676 8B00 MOV EAX,DWORD PTR DS:[EAX]
00817678 BA 50788100 MOV EDX,2.00817850 ; ASCII "HTMLPad 2007"
0081767D E8 32B1C8FF CALL 2.004A27B4
00817682 6A 00 PUSH 0
00817684 E8 8313BFFF CALL <JMP.&USER32.MessageBeep> <---提示音应该就是这个触发的了! F7进去
00817689 33C9 XOR ECX,ECX
0081768B B2 01 MOV DL,1
0081768D A1 F0A27700 MOV EAX,DWORD PTR DS:[77A2F0]
00817692 E8 C539C8FF CALL 2.0049B05C
00817697 8B15 BC008200 MOV EDX,DWORD PTR DS:[8200BC] ; 2.00825AA0 来到这里!
0081769D 8902 MOV DWORD PTR DS:[EDX],EAX
0081769F A1 BC008200 MOV EAX,DWORD PTR DS:[8200BC]
008176A4 8B00 MOV EAX,DWORD PTR DS:[EAX]
008176A6 8B10 MOV EDX,DWORD PTR DS:[EAX]
008176A8 FF92 EC000000 CALL DWORD PTR DS:[EDX+EC] <----NAG F7进去
008176AE 83F8 02 CMP EAX,2
008176B1 0F84 0F010000 JE 2.008177C6
一路来到00817697,
发现上面有个00817684 E8 8313BFFF CALL <JMP.&USER32.MessageBeep> ,推测提示音应该就是这个触发的了,
F8一过008176A8,那个讨厌的NAG就出来了,上面提示还有27天,27不就是16进制的1B吗?
在NAG上面点了evaluate后,停在008176AE 83F8 02 CMP EAX,2
F9直接进入程序了,
好!
小结一下:
要爆破这个程序,有3个问题要解决,1,时间的问题;2,提示音的问题;3,NAG的问题
OD重新载入,
因为0077A8BB处,EAX已经赋值为1B,所以重点看它是在上面哪里进行赋值的,于是bp 0077A871
另外,下断点,
bp 00817684 <---提示音的问题
bp 008176A8 <---NAG的问题
F9运行,程序断在00817684,F7进去,
00408A0C - FF25 90798200 JMP DWORD PTR DS:[<&USER32.MessageBeep>] ; USER32.MessageBeep
直接改JMP DWORD PTR DS:[<&USER32.MessageBeep>] 为RET,
F8回到00817689 33C9 XOR ECX,ECX,提示音没有了!
继续F9,
程序断在0077A871 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
寄存器里面:
EAX 0012FDE8
ECX FFFFFFFE
EDX 0077A938 ASCII "YVjcqrdw`YHlfwjvjcqYRlkajrvYFpww`kqS`wvljkYLkq`wk`q%V`qqlkbvYR`gLA"
EBX 014EE2F8
ESP 0012FDF4
EBP 0012FE18
ESI 00000000
EDI 7C930738 ntdll.7C930738
EIP 0077A871 2.0077A871
C 0 ES 0023 32位 0(FFFFFFFF)
P 0 CS 001B 32位 0(FFFFFFFF)
A 0 SS 0023 32位 0(FFFFFFFF)
Z 0 DS 0023 32位 0(FFFFFFFF)
S 1 FS 003B 32位 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_NO_SCROLLBARS (000005A7)
EFL 00000282 (NO,NB,NE,A,S,PO,L,LE)
ST0 empty 7.3425752709623960480
ST1 empty 23.352865954566006480
ST2 empty 111.29743639608906400
ST3 empty 2035.6020761245671960
ST4 empty 11345.481353325642430
ST5 empty 1.0000000000000000000
ST6 empty -20.322303726834154090
ST7 empty 0.9999884259259259611
3 2 1 0 E S P U O Z D I
FST 4000 Cond 1 0 0 0 Err 0 0 0 0 0 0 0 0 (EQ)
FCW 1372 Prec NEAR,64 掩码 1 1 0 0 1 0
看来,还没有对EAX赋值,F8继续,
0077A871 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0077A874 E8 97FEFFFF CALL 2.0077A710 F7进去
0077A879 8BF0 MOV ESI,EAX F8到这里
F8到0077A879的时候,可以看见,EAX被赋值了,
EAX 0000001A
ECX 00000001
EDX 014EE8FC ASCII "\Software\Microsoft\Windows\CurrentVersion\Internet Settings\WebID"
EBX 014EE2F8
ESP 0012FDF4
EBP 0012FE18
ESI 00000000
EDI 7C930738 ntdll.7C930738
EIP 0077A879 2.0077A879
C 0 ES 0023 32位 0(FFFFFFFF)
P 0 CS 001B 32位 0(FFFFFFFF)
A 0 SS 0023 32位 0(FFFFFFFF)
Z 0 DS 0023 32位 0(FFFFFFFF)
S 0 FS 003B 32位 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_NO_SCROLLBARS (000005A7)
EFL 00000202 (NO,NB,NE,A,NS,PO,GE,G)
ST0 empty 7.3425752709623960480
ST1 empty 23.352865954566006480
ST2 empty 111.29743639608906400
ST3 empty 2035.6020761245671960
ST4 empty 11345.481353325642430
ST5 empty 1.0000000000000000000
ST6 empty -20.322303726834154090
ST7 empty 0.9999884259259259611
3 2 1 0 E S P U O Z D I
FST 4000 Cond 1 0 0 0 Err 0 0 0 0 0 0 0 0 (EQ)
FCW 1372 Prec NEAR,64 掩码 1 1 0 0 1 0
看来,关键就在0077A874的CALL 里面,
重新载入程序,
在0077A874用F7进去,
F8向下,同时注意寄存器EAX的变化,
0077A7B4 8BC8 MOV ECX,EAX EAX的值就变为00000019,
0077A7B6 83F9 1E CMP ECX,1E 1E!这不就是30次吗!?
0077A7B9 7E 02 JLE SHORT 2.0077A7BD 不足30次就跳
0077A7BB 33C9 XOR ECX,ECX
0077A7BD 894D F8 MOV DWORD PTR SS:[EBP-8],ECX 剩余的次数
0077A7C0 85C9 TEST ECX,ECX 为0就直接跳走
0077A7C2 74 01 JE SHORT 2.0077A7C5
0077A7C4 49 DEC ECX 还有可用的次数就减少一次
0077A7C5 69C1 82010000 IMUL EAX,ECX,182
0077A7CB 8BC8 MOV ECX,EAX
好了!
只要把0077A7B6 83F9 1E CMP ECX,1E 改为 CMP ECX,ECX
把0077A7C4 49 DEC ECX 改为 nop 这样次数就不会减少了
F9来到008176A8 FF92 EC000000 CALL DWORD PTR DS:[EDX+EC] ,
F7进去,
0049F4B4 55 PUSH EBP 停在这里!
0049F4B5 8BEC MOV EBP,ESP
0049F4B7 83C4 E0 ADD ESP,-20
0049F4BA 53 PUSH EBX
0049F4BB 56 PUSH ESI
0049F4BC 33D2 XOR EDX,EDX
0049F4BE 8955 E0 MOV DWORD PTR SS:[EBP-20],EDX
0049F4C1 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
0049F4C4 33C0 XOR EAX,EAX
0049F4C6 55 PUSH EBP
0049F4C7 68 7CF74900 PUSH 2.0049F77C
0049F4CC 64:FF30 PUSH DWORD PTR FS:[EAX]
0049F4CF 64:8920 MOV DWORD PTR FS:[EAX],ESP
0049F4D2 E8 41F9FDFF CALL 2.0047EE18
0049F4D7 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0049F4DA 8078 57 00 CMP BYTE PTR DS:[EAX+57],0
把0049F4B4 55 PUSH EBP 改为ret,
F8返回,NAG没有出现,程序直接进入操作界面了!
把文件保存一下,关闭OD,直接运行试试!OK!
爆破成功了!
--------------------------------------------------------------------------------
【经验总结】
虽然不知道这个软件的壳到底是什么名字,而且可能程序是在加壳后又修改了文件头,但总的来说,这个壳不难!
对于0077A7B4那部分代码,我们还可以做一些其他的修改,比如改DEC ECX为INC ECX,这样用一次多一次,当然如果NAG被
nop了,就看不到这种用一送一的效果了!
希望菜鸟们都可以练一下!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年07月30日 下午 04:47:59 |
评分
-
查看全部评分
|