飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5254|回复: 13

[原创] 爆破HTMLPad 2007 Pro 8.1.0.78

[复制链接]

该用户从未签到

发表于 2007-8-3 02:58:36 | 显示全部楼层 |阅读模式
【文章标题】: 爆破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

评分

参与人数 1威望 +20 飘云币 +20 收起 理由
tigerisme + 20 + 20 精彩

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2007-8-3 08:54:06 | 显示全部楼层
不错哦,谢谢楼主分享了
PYG19周年生日快乐!

该用户从未签到

发表于 2007-8-3 09:10:35 | 显示全部楼层
精彩,谢谢兄弟的文章!/:good
PYG19周年生日快乐!

该用户从未签到

发表于 2007-8-4 12:08:03 | 显示全部楼层
学习一下了 谢谢楼主!!
PYG19周年生日快乐!
  • TA的每日心情
    开心
    前天 17:30
  • 签到天数: 465 天

    [LV.9]以坛为家II

    发表于 2007-8-4 17:31:01 | 显示全部楼层
    学习了,谢谢分享!
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    昨天 12:09
  • 签到天数: 671 天

    [LV.9]以坛为家II

    发表于 2007-8-4 18:36:18 | 显示全部楼层
    写的很详细,谢谢分享!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-12-8 13:11
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2007-12-2 10:04:31 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-12-3 00:00:13 | 显示全部楼层
    相当好的教程啊,谢谢
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-12-3 00:51:57 | 显示全部楼层
    有很多地方不明白具体用意
    比如
      00A83029  ^ E2 F8           LOOPD SHORT htmlpad.00A83023
      00A8302B    8B43 08         MOV EAX,DWORD PTR DS:[EBX+8]        <---F4到在这里!      
      00A8302E    50              PUSH EAX
    可以把你 的 思路说清楚吗?
    为什么这么做,怎么判断的!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-6-7 12:35
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2007-12-4 08:23:23 | 显示全部楼层
    谢谢分享 很详细啊
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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