标题:手动脱壳入门第十篇WWPack32 1.12

-------------------------------------------------------------------------------------------------------------------------------

时间:2006/8/28 17:15:33

-------------------------------------------------------------------------------------------------------------------------------

内容:

xTiNt
 手动脱壳入门第十篇WWPack32 1.12  
手动脱壳入门第十篇WWPack32 1.12
【脱文标题】 手动脱壳入门第十篇WWPack32 1.12
【脱文作者】 weiyi75[Dfcg] 
【作者邮箱】 weiyi75@sohu.com 
【作者主页】 Dfcg官方大本营 
【使用工具】 Peid,Ollydbg,Imprec,Loadpe
【脱壳平台】 Win2K/XP
【软件名称】 echap701
【软件简介】 WWPack32 1.12 加壳的一个Win98的记事本
【软件大小】 18 KB
【加壳方式】 WWPack32 1.x -> Piotr Warezak
【保护方式】 WWPack
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:
脱壳目标,WWPack32 1.12加壳的记事本。
本地下载
软件后用PEiD测echap701.exe的壳为WWPack32 1.x -> Piotr Warezak。
手动脱壳建议大家用Ollydbg,工作平台Win2000,WinXp,Win9x不推荐。
手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。不要用Peid查入口,单步跟踪,提高手动找入口能力。
用OD载入程序后。
确定一个错误载入警告,然后Od提示程序加壳,选不继续分析。
停在这里
0040D000 > 53 PUSH EBX
0040D001 55 PUSH EBP
0040D002 8BE8 MOV EBP,EAX
0040D004 33DB XOR EBX,EBX
0040D006 EB 60 JMP SHORT echap701.0040D068 跳走
0040D068 E8 00000000 CALL echap701.0040D06D F7步过
0040D06D 58 POP EAX
0040D06E 2D 6D000000 SUB EAX,6D
0040D073 50 PUSH EAX
0040D074 60 PUSHAD 关键字。
0040D077 50 PUSH EAX
0040D078 58 POP EAX
0040D079 50 PUSH EAX
0040D07A 50 PUSH EAX
0040D07B 8BE8 MOV EBP,EAX
0040D07D 51 PUSH ECX
0040D07E FD STD
...........................................................
0040D0AB 8BF8 MOV EDI,EAX
0040D0AD FC CLD
0040D0AE AD LODS DWORD PTR DS:[ESI]
0040D0AF 8BE8 MOV EBP,EAX
0040D0B1 B3 20 MOV BL,20
0040D0B3 EB 37 JMP SHORT echap701.0040D0EC 跳走
0040D0EC D1E5 SHL EBP,1 到这里
0040D0EE 66:4B DEC BX
0040D0F0 ^ 77 F9 JA SHORT echap701.0040D0EB 小循环
0040D0F2 ^ 74 F0 JE SHORT echap701.0040D0E4 F4下来
0040D0F4 B1 02 MOV CL,2
0040D0F6 E8 BAFFFFFF CALL echap701.0040D0B5 F8步过
0040D0FB 3C 03 CMP AL,3
0040D0FD 72 44 JB SHORT echap701.0040D143 跳走
0040D143 3C 01 CMP AL,1 到这里
0040D145 9C PUSHFD 又一个关键字
0040D146 B1 03 MOV CL,3
0040D148 E8 68FFFFFF CALL echap701.0040D0B5 F8步过
0040D14D 3C 03 CMP AL,3
0040D14F 77 0F JA SHORT echap701.0040D160
0040D151 74 04 JE SHORT echap701.0040D157
0040D153 04 05 ADD AL,5
0040D155 EB 3B JMP SHORT echap701.0040D192 跳走
0040D192 8AC8 MOV CL,AL 到这里
0040D194 66:BA 0100 MOV DX,1
0040D198 663E2 SHL DX,CL
0040D19B 66:83EA 1F SUB DX,1F
0040D19F E8 11FFFFFF CALL echap701.0040D0B5 F8步过
0040D1A4 66:03C2 ADD AX,DX
0040D1A7 8BD7 MOV EDX,EDI
0040D1A9 0FB7C0 MOVZX EAX,AX
0040D1AC 2BD0 SUB EDX,EAX
0040D1AE 9D POPFD 对应PUSHFD,解压一部分。
0040D1AF 72 0A JB SHORT echap701.0040D1BB
0040D1B1 |66:B9 0300 MOV CX,3
0040D1B5 |74 67 JE SHORT echap701.0040D21E
0040D21E 87F2 XCHG EDX,ESI 来到这里 
0040D220 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
0040D222 8BF2 MOV ESI,EDX
0040D224 ^ E9 C3FEFFFF JMP echap701.0040D0EC 往回跳,我们前几篇的脱壳文章看的应该比较多了吧
0040D229 58 POP EAX F4直接下来 
0040D22A 83C0 04 ADD EAX,4
0040D22D 2BC7 SUB EAX,EDI
0040D22F 8BC8 MOV ECX,EAX
0040D231 33C0 XOR EAX,EAX
0040D233 F3:AA REP STOS BYTE PTR ES:[EDI]
0040D235 59 POP ECX
0040D236 5D POP EBP
0040D237 2E:80BC0D B1020>CMP BYTE PTR CS:[EBP+ECX+2B1],0
0040D240 74 08 JE SHORT echap701.0040D24A
0040D242 83C1 11 ADD ECX,11
0040D245 ^ E9 2EFEFFFF JMP echap701.0040D078 又往回跳,看到连续Jmp回跳,入口估计快到了。
0040D24A 8BC5 MOV EAX,EBP F4下来。 
0040D24C BB B2020000 MOV EBX,2B2
0040D251 03DD ADD EBX,EBP
0040D253 03D9 ADD EBX,ECX
0040D255 3E:8B8D 9902000>MOV ECX,DWORD PTR DS:[EBP+299]
0040D25C 3E:2B85 9D02000>SUB EAX,DWORD PTR DS:[EBP+29D]
0040D263 03C8 ADD ECX,EAX
0040D265 8B33 MOV ESI,DWORD PTR DS:[EBX]
0040D267 83C3 04 ADD EBX,4
0040D26A 83FE 00 CMP ESI,0
0040D26D 74 12 JE SHORT echap701.0040D281 跳走。
0040D281 58 POP EAX 到这里。 
0040D282 61 POPAD 关键字对应0040D074 处 PUSHAD 关键字,入口就在附近。
0040D283 58 POP EAX
0040D284 8BE8 MOV EBP,EAX
0040D286 2E:0385 9502000>ADD EAX,DWORD PTR CS:[EBP+295]
0040D28D 05 99020000 ADD EAX,299
0040D292 5D POP EBP
0040D293 5B POP EBX
0040D294 ^ E9 333EFFFF JMP echap701.004010CC 要跨段跳跃了
004010CC 55 PUSH EBP 入口点,跨段来到这里并且经过了PoPad关键字,我们在这里用Od的Dump插件直接脱壳
004010CD 8BEC MOV EBP,ESP
004010CF 83EC 44 SUB ESP,44
004010D2 56 PUSH ESI
004010D3 FF15 E4634000 CALL DWORD PTR DS:[<&KERNEL32.GetCommand>; KERNEL32.GetCommandLineA
004010D9 8BF0 MOV ESI,EAX
004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]
004010DD 3C 22 CMP AL,22
004010DF 75 1B JNZ SHORT echap701.004010FC
脱壳后发现程序不能运行,用Imprec修复引入函数表同样无法运行。
改用LoadPe脱壳吧,脱壳方法截图见手动脱壳入门第七篇EZIP1.0,脱壳后用Imprec修复引入函数表还是无法运行。还是有办法的,Loadpe有个重建PE功能,选项中做如图所示。
 
然后点重建PE按钮,选择dumped_.exe,确定后正常运行。
"手动脱壳入门第十篇"脱壳动画!

  
 

  

xTiNt
 手动脱壳入门第十篇WWPack32 1.12  
手动脱壳入门第十篇WWPack32 1.12
【脱文标题】 手动脱壳入门第十篇WWPack32 1.12
【脱文作者】 weiyi75[Dfcg] 
【作者邮箱】 weiyi75@sohu.com 
【作者主页】 Dfcg官方大本营 
【使用工具】 Peid,Ollydbg,Imprec,Loadpe
【脱壳平台】 Win2K/XP
【软件名称】 echap701
【软件简介】 WWPack32 1.12 加壳的一个Win98的记事本
【软件大小】 18 KB
【加壳方式】 WWPack32 1.x -> Piotr Warezak
【保护方式】 WWPack
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:
脱壳目标,WWPack32 1.12加壳的记事本。
本地下载
软件后用PEiD测echap701.exe的壳为WWPack32 1.x -> Piotr Warezak。
手动脱壳建议大家用Ollydbg,工作平台Win2000,WinXp,Win9x不推荐。
手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。不要用Peid查入口,单步跟踪,提高手动找入口能力。
用OD载入程序后。
确定一个错误载入警告,然后Od提示程序加壳,选不继续分析。
停在这里
0040D000 > 53 PUSH EBX
0040D001 55 PUSH EBP
0040D002 8BE8 MOV EBP,EAX
0040D004 33DB XOR EBX,EBX
0040D006 EB 60 JMP SHORT echap701.0040D068 跳走
0040D068 E8 00000000 CALL echap701.0040D06D F7步过
0040D06D 58 POP EAX
0040D06E 2D 6D000000 SUB EAX,6D
0040D073 50 PUSH EAX
0040D074 60 PUSHAD 关键字。
0040D077 50 PUSH EAX
0040D078 58 POP EAX
0040D079 50 PUSH EAX
0040D07A 50 PUSH EAX
0040D07B 8BE8 MOV EBP,EAX
0040D07D 51 PUSH ECX
0040D07E FD STD
...........................................................
0040D0AB 8BF8 MOV EDI,EAX
0040D0AD FC CLD
0040D0AE AD LODS DWORD PTR DS:[ESI]
0040D0AF 8BE8 MOV EBP,EAX
0040D0B1 B3 20 MOV BL,20
0040D0B3 EB 37 JMP SHORT echap701.0040D0EC 跳走
0040D0EC D1E5 SHL EBP,1 到这里
0040D0EE 66:4B DEC BX
0040D0F0 ^ 77 F9 JA SHORT echap701.0040D0EB 小循环
0040D0F2 ^ 74 F0 JE SHORT echap701.0040D0E4 F4下来
0040D0F4 B1 02 MOV CL,2
0040D0F6 E8 BAFFFFFF CALL echap701.0040D0B5 F8步过
0040D0FB 3C 03 CMP AL,3
0040D0FD 72 44 JB SHORT echap701.0040D143 跳走
0040D143 3C 01 CMP AL,1 到这里
0040D145 9C PUSHFD 又一个关键字
0040D146 B1 03 MOV CL,3
0040D148 E8 68FFFFFF CALL echap701.0040D0B5 F8步过
0040D14D 3C 03 CMP AL,3
0040D14F 77 0F JA SHORT echap701.0040D160
0040D151 74 04 JE SHORT echap701.0040D157
0040D153 04 05 ADD AL,5
0040D155 EB 3B JMP SHORT echap701.0040D192 跳走
0040D192 8AC8 MOV CL,AL 到这里
0040D194 66:BA 0100 MOV DX,1
0040D198 663E2 SHL DX,CL
0040D19B 66:83EA 1F SUB DX,1F
0040D19F E8 11FFFFFF CALL echap701.0040D0B5 F8步过
0040D1A4 66:03C2 ADD AX,DX
0040D1A7 8BD7 MOV EDX,EDI
0040D1A9 0FB7C0 MOVZX EAX,AX
0040D1AC 2BD0 SUB EDX,EAX
0040D1AE 9D POPFD 对应PUSHFD,解压一部分。
0040D1AF 72 0A JB SHORT echap701.0040D1BB
0040D1B1 |66:B9 0300 MOV CX,3
0040D1B5 |74 67 JE SHORT echap701.0040D21E
0040D21E 87F2 XCHG EDX,ESI 来到这里 
0040D220 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
0040D222 8BF2 MOV ESI,EDX
0040D224 ^ E9 C3FEFFFF JMP echap701.0040D0EC 往回跳,我们前几篇的脱壳文章看的应该比较多了吧
0040D229 58 POP EAX F4直接下来 
0040D22A 83C0 04 ADD EAX,4
0040D22D 2BC7 SUB EAX,EDI
0040D22F 8BC8 MOV ECX,EAX
0040D231 33C0 XOR EAX,EAX
0040D233 F3:AA REP STOS BYTE PTR ES:[EDI]
0040D235 59 POP ECX
0040D236 5D POP EBP
0040D237 2E:80BC0D B1020>CMP BYTE PTR CS:[EBP+ECX+2B1],0
0040D240 74 08 JE SHORT echap701.0040D24A
0040D242 83C1 11 ADD ECX,11
0040D245 ^ E9 2EFEFFFF JMP echap701.0040D078 又往回跳,看到连续Jmp回跳,入口估计快到了。
0040D24A 8BC5 MOV EAX,EBP F4下来。 
0040D24C BB B2020000 MOV EBX,2B2
0040D251 03DD ADD EBX,EBP
0040D253 03D9 ADD EBX,ECX
0040D255 3E:8B8D 9902000>MOV ECX,DWORD PTR DS:[EBP+299]
0040D25C 3E:2B85 9D02000>SUB EAX,DWORD PTR DS:[EBP+29D]
0040D263 03C8 ADD ECX,EAX
0040D265 8B33 MOV ESI,DWORD PTR DS:[EBX]
0040D267 83C3 04 ADD EBX,4
0040D26A 83FE 00 CMP ESI,0
0040D26D 74 12 JE SHORT echap701.0040D281 跳走。
0040D281 58 POP EAX 到这里。 
0040D282 61 POPAD 关键字对应0040D074 处 PUSHAD 关键字,入口就在附近。
0040D283 58 POP EAX
0040D284 8BE8 MOV EBP,EAX
0040D286 2E:0385 9502000>ADD EAX,DWORD PTR CS:[EBP+295]
0040D28D 05 99020000 ADD EAX,299
0040D292 5D POP EBP
0040D293 5B POP EBX
0040D294 ^ E9 333EFFFF JMP echap701.004010CC 要跨段跳跃了
004010CC 55 PUSH EBP 入口点,跨段来到这里并且经过了PoPad关键字,我们在这里用Od的Dump插件直接脱壳
004010CD 8BEC MOV EBP,ESP
004010CF 83EC 44 SUB ESP,44
004010D2 56 PUSH ESI
004010D3 FF15 E4634000 CALL DWORD PTR DS:[<&KERNEL32.GetCommand>; KERNEL32.GetCommandLineA
004010D9 8BF0 MOV ESI,EAX
004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]
004010DD 3C 22 CMP AL,22
004010DF 75 1B JNZ SHORT echap701.004010FC
脱壳后发现程序不能运行,用Imprec修复引入函数表同样无法运行。
改用LoadPe脱壳吧,脱壳方法截图见手动脱壳入门第七篇EZIP1.0,脱壳后用Imprec修复引入函数表还是无法运行。还是有办法的,Loadpe有个重建PE功能,选项中做如图所示。
 
然后点重建PE按钮,选择dumped_.exe,确定后正常运行。
"手动脱壳入门第十篇"脱壳动画!