标题:手动脱壳入门第九篇Pepack 1.0

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

时间:2006/8/28 17:14:43

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

内容:

xTiNt
 手动脱壳入门第九篇Pepack 1.0  
手动脱壳入门第九篇Pepack 1.0
【脱文标题】 手动脱壳入门第九篇Pepack 1.0
【脱文作者】 weiyi75[Dfcg] 
【作者邮箱】 weiyi75@sohu.com 
【作者主页】 Dfcg官方大本营 
【使用工具】 Peid,Ollydbg
【脱壳平台】 Win2K/XP
【软件名称】 pepack1.0加壳的Win98的记事本
【软件简介】 You are actually reading the documentation of the very best Portable Executable Packer around the world. I have compared PEPACK to all the other PE packers I know off: PETITE, PECRYPT, WWPACK32, SHRINKER, STNPEE... And I can proudly say, that PEPACK beats up all of them.Off course PEPACKed files can be unpacked with PROCDUMP, but this is only a PACKER! not a protector!JUST ONE IMPORTANT THING: DO NOT THINK YOUR PC HAS LOCKED UP! COMPRESSION IS VERY SLOW. 1MB IN 30-60 SEC. BUT DECOMPRESSION IS FUCKING FAST!!!I MAYBE WILL CHANGE THE INTERFACE IN THE NEXT VERSION...
【软件大小】 18.9 KB
【加壳方式】 PE Pack 1.0 -> ANAKiN
【保护方式】 PE Pack 
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:
软件截图.
 
我们直接在Dos界面下运行pepack.exe,软件提示语法和参数,通常选默认值就可以了。
我们将Win98的记事本拷到Pepack目录同一层,然后在Dos界面输入
pepack nottepad.exe 
回车后记事本就加了一层壳,呵呵,连图标都压没了。
程序下载地址
本地下载
首先必须的工具要准备好
脱壳目标,pepack1.0加壳的记事本。
本地下载
安装软件后用Peid测NOTEPAD.EXE的壳为PE Pack 1.0 -> ANAKiN。
手动脱壳建议大家用Ollydbg,工作平台Win2000,WinXp,Win9x不推荐。
手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。不要用Peid查入口,单步跟踪,提高手动找入口能力。
用OD载入程序后。
确定一个入口警告,然后Od提示程序加壳,选不继续分析。
停在这里
00403235 > /74 00 JE SHORT NOTEPAD.00403237
开始地点,和我们平时看到的Pushad等不同。怎样找Oep呢,只能在程序跨段跳跃时,地址变化很大时寻找Oep,一般通过Jmp,Ret等语句跨段,和Ezip有点像。
00403237 -\E9 C49D0000 JMP NOTEPAD.0040D000 跳走。
0040D000 60 PUSHAD 呵,还是用Popad
0040D001 E8 00000000 CALL NOTEPAD.0040D006 很近的Call用F7过,养成习惯,以后猛壳中用F8程序立即运行,如果你跟踪半天就又要重新开始。
0040D006 5D POP EBP
0040D007 83ED 06 SUB EBP,6
0040D00A 80BD 3E050000 0>CMP BYTE PTR SS:[EBP+53E],1
0040D011 0F84 48020000 JE NOTEPAD.0040D25F这里是个很大的跳转点,暂时没跳,因为程序没解压,程序在内存中解压时就是一些循环,没解压完就往会跳转,解压完毕后就跳出循环圈,到下一个循环段或入口处,我们随着手动脱壳的增多慢慢体会。这样的大循环我们要留意,往前面遇到回跳的语句,下一句也不能F4跳出,这里就是循环出口。
0040D017 C685 3E050000 0>MOV BYTE PTR SS:[EBP+53E],1
0040D01E 8BC5 MOV EAX,EBP
0040D020 2B85 4B050000 SUB EAX,DWORD PTR SS:[EBP+54B]
0040D026 89AD 14050000 MOV DWORD PTR SS:[EBP+514],EBP
0040D02C 8985 8B050000 MOV DWORD PTR SS:[EBP+58B],EAX
0040D032 8B85 8B050000 MOV EAX,DWORD PTR SS:[EBP+58B]
0040D038 0385 6F050000 ADD EAX,DWORD PTR SS:[EBP+56F]
0040D03E 8985 43050000 MOV DWORD PTR SS:[EBP+543],EAX
0040D044 80BD 3C050000 0>CMP BYTE PTR SS:[EBP+53C],1
0040D04B 75 1C JNZ SHORT NOTEPAD.0040D069 跳。
0040D069 6A 04 PUSH 4
0040D06B 68 00100000 PUSH 1000
0040D070 FFB5 5F050000 PUSH DWORD PTR SS:[EBP+55F]
0040D076 6A 00 PUSH 0
0040D078 E8 9F040000 CALL NOTEPAD.0040D51C
0040D07D 0BC0 OR EAX,EAX
0040D07F 0F84 45020000 JE NOTEPAD.0040D2CA 这里也是个很大的跳转点,暂时没跳,也留意。
0040D085 8985 63050000 MOV DWORD PTR SS:[EBP+563],EAX
0040D08B 8BB5 5B050000 MOV ESI,DWORD PTR SS:[EBP+55B]
0040D091 03F5 ADD ESI,EBP
0040D093 AD LODS DWORD PTR DS:[ESI]
0040D094 0BC0 OR EAX,EAX
0040D096 0F84 81000000 JE NOTEPAD.0040D11D 这里又是个很大的跳转点,暂时没跳,也留意。
0040D09C 8BF8 MOV EDI,EAX
0040D09E 03BD 8B050000 ADD EDI,DWORD PTR SS:[EBP+58B]
0040D0A4 AD LODS DWORD PTR DS:[ESI]
0040D0A5 8BC8 MOV ECX,EAX
0040D0A7 AD LODS DWORD PTR DS:[ESI]
0040D0A8 0BC0 OR EAX,EAX
0040D0AA ^ 74 E7 JE SHORT NOTEPAD.0040D093 没跳。
.............................................................
0040D0C1 E8 89020000 CALL NOTEPAD.0040D34F F8步过远程Call,一般遇到较远距离的Call用F8过。
0040D0C6 83C4 08 ADD ESP,8
0040D0C9 5F POP EDI
0040D0CA 83E8 05 SUB EAX,5
0040D0CD 33C9 XOR ECX,ECX
0040D0CF 52 PUSH EDX
0040D0D0 53 PUSH EBX
0040D0D1 33D2 XOR EDX,EDX
0040D0D3 F9 STC
0040D0D4 73 38 JNB SHORT NOTEPAD.0040D10E
0040D0D6 48 DEC EAX
0040D0D7 74 35 JE SHORT NOTEPAD.0040D10E
0040D0D9 78 33 JS SHORT NOTEPAD.0040D10E
0040D0DB 66:8B1C39 MOV BX,WORD PTR DS:[ECX+EDI]
0040D0DF 80FB E8 CMP BL,0E8
0040D0E2 74 0F JE SHORT NOTEPAD.0040D0F3
0040D0E4 80FB E9 CMP BL,0E9
0040D0E7 74 0A JE SHORT NOTEPAD.0040D0F3
0040D0E9 66:81FB FF25 CMP BX,25FF
0040D0EE 74 0F JE SHORT NOTEPAD.0040D0FF
0040D0F0 41 INC ECX
0040D0F1 ^ EB E3 JMP SHORT NOTEPAD.0040D0D6 这里往回跳。
0040D0F3 294C39 01 SUB DWORD PTR DS:[ECX+EDI+1],ECX F4到这里。
0040D0F7 83C1 05 ADD ECX,5
0040D0FA 83E8 04 SUB EAX,4
0040D0FD ^ EB D7 JMP SHORT NOTEPAD.0040D0D6 又往回跳。
0040D0FF 295439 02 SUB DWORD PTR DS:[ECX+EDI+2],EDX F4顺利到达这里。
0040D103 83C1 06 ADD ECX,6
0040D106 83EA 04 SUB EDX,4
0040D109 83E8 05 SUB EAX,5
0040D10C ^ EB C8 JMP SHORT NOTEPAD.0040D0D6 又往回跳。
0040D10E C685 D3000000 F>MOV BYTE PTR SS:[EBP+D3],0F8 F4到这里。
0040D115 5B POP EBX 
0040D116 5A POP EDX
0040D117 5E POP ESI
0040D118 ^ E9 76FFFFFF JMP NOTEPAD.0040D093 往回跳。
0040D11D 6A 04 PUSH 4 F4顺利到达这里。
0040D11F FFB5 5F050000 PUSH DWORD PTR SS:[EBP+55F]
0040D125 FFB5 63050000 PUSH DWORD PTR SS:[EBP+563]
0040D12B E8 F2030000 CALL NOTEPAD.0040D522 F8步过远程Call
0040D130 80BD 3C050000 0>CMP BYTE PTR SS:[EBP+53C],1
0040D137 75 0E JNZ SHORT NOTEPAD.0040D147 跳。
0040D147 8B85 43050000 MOV EAX,DWORD PTR SS:[EBP+543] 到这里。 
0040D14D 8985 3F050000 MOV DWORD PTR SS:[EBP+53F],EAX
0040D153 8B95 43050000 MOV EDX,DWORD PTR SS:[EBP+543]
0040D159 2B95 3F050000 SUB EDX,DWORD PTR SS:[EBP+53F]
0040D15F 0395 8B050000 ADD EDX,DWORD PTR SS:[EBP+58B]
0040D165 8995 47050000 MOV DWORD PTR SS:[EBP+547],EDX
0040D16B 8BB5 6B050000 MOV ESI,DWORD PTR SS:[EBP+56B]
0040D171 0BF6 OR ESI,ESI
0040D173 74 33 JE SHORT NOTEPAD.0040D1A8
.............................................................
0040D1B9 /0F84 A0000000 JE NOTEPAD.0040D25F 又是一个大跳转,前面的就不用留意了,留意这里。
0040D1BF |894A 0C MOV DWORD PTR DS:[EDX+C],ECX
0040D1C2 |0385 47050000 ADD EAX,DWORD PTR SS:[EBP+547]
0040D1C8 |52 PUSH EDX
0040D1C9 |51 PUSH ECX
0040D1CA |50 PUSH EAX
0040D1CB |50 PUSH EAX
0040D1CC |8985 53050000 MOV DWORD PTR SS:[EBP+553],EAX
0040D1D2 |8BD8 MOV EBX,EAX
.............................................................
0040D1D4 E8 4F030000 CALL NOTEPAD.0040D528 F8步过远程Call
0040D1D9 5B POP EBX
0040D1DA 59 POP ECX
0040D1DB 5A POP EDX
0040D1DC 0BC0 OR EAX,EAX
0040D1DE 75 12 JNZ SHORT NOTEPAD.0040D1F2
0040D1E0 52 PUSH EDX
0040D1E1 51 PUSH ECX
0040D1E2 53 PUSH EBX
0040D1E3 E8 46030000 CALL NOTEPAD.0040D52E F8步过远程Call
0040D1E8 0BC0 OR EAX,EAX
0040D1EA 0F84 82000000 JE NOTEPAD.0040D272 又是一个大跳转,真多。
.............................................................
0040D218 /74 3D JE SHORT NOTEPAD.0040D257 看这个跳转的位置,我们看到了Popad标志,快到了,不能让他往回走,继续向下。
0040D21A |890E MOV DWORD PTR DS:[ESI],ECX
0040D21C |79 05 JNS SHORT NOTEPAD.0040D223
0040D21E |0FB7C0 MOVZX EAX,AX
0040D221 |EB 0D JMP SHORT NOTEPAD.0040D230
0040D223 |0385 47050000 ADD EAX,DWORD PTR SS:[EBP+547]
0040D229 |66:C700 0000 MOV WORD PTR DS:[EAX],0
.............................................................
0040D23D E8 F2020000 CALL NOTEPAD.0040D534
0040D242 5B POP EBX
0040D243 0BC0 OR EAX,EAX
0040D245 74 4D JE SHORT NOTEPAD.0040D294 没跳,也不能跳,它会跳过Popad语句,那样的话我们还要跟踪。
0040D247 5B POP EBX
0040D248 59 POP ECX
0040D249 5F POP EDI
0040D24A 8907 MOV DWORD PTR DS:[EDI],EAX
0040D24C 5E POP ESI
0040D24D 5A POP EDX
0040D24E 5B POP EBX
0040D24F 83C6 04 ADD ESI,4
0040D252 83C7 04 ADD EDI,4
0040D255 ^ EB BD JMP SHORT NOTEPAD.0040D214 往回跳
0040D257 83C2 14 ADD EDX,14
0040D25A ^ E9 55FFFFFF JMP NOTEPAD.0040D1B4 往回跳
0040D25F 8B85 57050000 MOV EAX,DWORD PTR SS:[EBP+557] 太顺利,F4直接到这里。
0040D265 0385 8B050000 ADD EAX,DWORD PTR SS:[EBP+58B] Eax寄存器里面10CC+400000=4010CC
0040D26B 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
0040D26F 61 POPAD 出口标志
0040D270 FFE0 JMP EAX 跨段跳跃到我们熟悉的记事本Oep=4010CC
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:[4063E4] ; 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 NOTEPAD.004010FC
004010E1 56 PUSH ESI
重建输入表时,插件有两个选项。Method2重建输入表很快,脱壳后运行率高。Method1重建输入表慢,脱壳后运行率较低。本程序用Method1,2重建输入表后程序都可直接运行。
简单方法:
0040D000 60 PUSHAD
0040D001 E8 00000000 CALL NOTEPAD.0040D006
0040D006 5D POP EBP
0040D007 83ED 06 SUB EBP,6
0040D00A 80BD 3E050000 0>CMP BYTE PTR SS:[EBP+53E],1
0040D011 0F84 48020000 JE NOTEPAD.0040D25F
0040D017 C685 3E050000 0>MOV BYTE PTR SS:[EBP+53E],1
运行到这里时Ctrl+F向下找Popad
0040D26F 61 POPAD F2下断点F9运行到这里后取消断点。
0040D270 FFE0 JMP EAX
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:[4063E4] ; 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 NOTEPAD.004010FC
004010E1 56 PUSH ESI
脱壳后软件运行正常。
"手动脱壳入门第九篇"脱壳动画!

  
 

  

xTiNt
 手动脱壳入门第九篇Pepack 1.0  
手动脱壳入门第九篇Pepack 1.0
【脱文标题】 手动脱壳入门第九篇Pepack 1.0
【脱文作者】 weiyi75[Dfcg] 
【作者邮箱】 weiyi75@sohu.com 
【作者主页】 Dfcg官方大本营 
【使用工具】 Peid,Ollydbg
【脱壳平台】 Win2K/XP
【软件名称】 pepack1.0加壳的Win98的记事本
【软件简介】 You are actually reading the documentation of the very best Portable Executable Packer around the world. I have compared PEPACK to all the other PE packers I know off: PETITE, PECRYPT, WWPACK32, SHRINKER, STNPEE... And I can proudly say, that PEPACK beats up all of them.Off course PEPACKed files can be unpacked with PROCDUMP, but this is only a PACKER! not a protector!JUST ONE IMPORTANT THING: DO NOT THINK YOUR PC HAS LOCKED UP! COMPRESSION IS VERY SLOW. 1MB IN 30-60 SEC. BUT DECOMPRESSION IS FUCKING FAST!!!I MAYBE WILL CHANGE THE INTERFACE IN THE NEXT VERSION...
【软件大小】 18.9 KB
【加壳方式】 PE Pack 1.0 -> ANAKiN
【保护方式】 PE Pack 
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:
软件截图.
 
我们直接在Dos界面下运行pepack.exe,软件提示语法和参数,通常选默认值就可以了。
我们将Win98的记事本拷到Pepack目录同一层,然后在Dos界面输入
pepack nottepad.exe 
回车后记事本就加了一层壳,呵呵,连图标都压没了。
程序下载地址
本地下载
首先必须的工具要准备好
脱壳目标,pepack1.0加壳的记事本。
本地下载
安装软件后用Peid测NOTEPAD.EXE的壳为PE Pack 1.0 -> ANAKiN。
手动脱壳建议大家用Ollydbg,工作平台Win2000,WinXp,Win9x不推荐。
手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。不要用Peid查入口,单步跟踪,提高手动找入口能力。
用OD载入程序后。
确定一个入口警告,然后Od提示程序加壳,选不继续分析。
停在这里
00403235 > /74 00 JE SHORT NOTEPAD.00403237
开始地点,和我们平时看到的Pushad等不同。怎样找Oep呢,只能在程序跨段跳跃时,地址变化很大时寻找Oep,一般通过Jmp,Ret等语句跨段,和Ezip有点像。
00403237 -\E9 C49D0000 JMP NOTEPAD.0040D000 跳走。
0040D000 60 PUSHAD 呵,还是用Popad
0040D001 E8 00000000 CALL NOTEPAD.0040D006 很近的Call用F7过,养成习惯,以后猛壳中用F8程序立即运行,如果你跟踪半天就又要重新开始。
0040D006 5D POP EBP
0040D007 83ED 06 SUB EBP,6
0040D00A 80BD 3E050000 0>CMP BYTE PTR SS:[EBP+53E],1
0040D011 0F84 48020000 JE NOTEPAD.0040D25F这里是个很大的跳转点,暂时没跳,因为程序没解压,程序在内存中解压时就是一些循环,没解压完就往会跳转,解压完毕后就跳出循环圈,到下一个循环段或入口处,我们随着手动脱壳的增多慢慢体会。这样的大循环我们要留意,往前面遇到回跳的语句,下一句也不能F4跳出,这里就是循环出口。
0040D017 C685 3E050000 0>MOV BYTE PTR SS:[EBP+53E],1
0040D01E 8BC5 MOV EAX,EBP
0040D020 2B85 4B050000 SUB EAX,DWORD PTR SS:[EBP+54B]
0040D026 89AD 14050000 MOV DWORD PTR SS:[EBP+514],EBP
0040D02C 8985 8B050000 MOV DWORD PTR SS:[EBP+58B],EAX
0040D032 8B85 8B050000 MOV EAX,DWORD PTR SS:[EBP+58B]
0040D038 0385 6F050000 ADD EAX,DWORD PTR SS:[EBP+56F]
0040D03E 8985 43050000 MOV DWORD PTR SS:[EBP+543],EAX
0040D044 80BD 3C050000 0>CMP BYTE PTR SS:[EBP+53C],1
0040D04B 75 1C JNZ SHORT NOTEPAD.0040D069 跳。
0040D069 6A 04 PUSH 4
0040D06B 68 00100000 PUSH 1000
0040D070 FFB5 5F050000 PUSH DWORD PTR SS:[EBP+55F]
0040D076 6A 00 PUSH 0
0040D078 E8 9F040000 CALL NOTEPAD.0040D51C
0040D07D 0BC0 OR EAX,EAX
0040D07F 0F84 45020000 JE NOTEPAD.0040D2CA 这里也是个很大的跳转点,暂时没跳,也留意。
0040D085 8985 63050000 MOV DWORD PTR SS:[EBP+563],EAX
0040D08B 8BB5 5B050000 MOV ESI,DWORD PTR SS:[EBP+55B]
0040D091 03F5 ADD ESI,EBP
0040D093 AD LODS DWORD PTR DS:[ESI]
0040D094 0BC0 OR EAX,EAX
0040D096 0F84 81000000 JE NOTEPAD.0040D11D 这里又是个很大的跳转点,暂时没跳,也留意。
0040D09C 8BF8 MOV EDI,EAX
0040D09E 03BD 8B050000 ADD EDI,DWORD PTR SS:[EBP+58B]
0040D0A4 AD LODS DWORD PTR DS:[ESI]
0040D0A5 8BC8 MOV ECX,EAX
0040D0A7 AD LODS DWORD PTR DS:[ESI]
0040D0A8 0BC0 OR EAX,EAX
0040D0AA ^ 74 E7 JE SHORT NOTEPAD.0040D093 没跳。
.............................................................
0040D0C1 E8 89020000 CALL NOTEPAD.0040D34F F8步过远程Call,一般遇到较远距离的Call用F8过。
0040D0C6 83C4 08 ADD ESP,8
0040D0C9 5F POP EDI
0040D0CA 83E8 05 SUB EAX,5
0040D0CD 33C9 XOR ECX,ECX
0040D0CF 52 PUSH EDX
0040D0D0 53 PUSH EBX
0040D0D1 33D2 XOR EDX,EDX
0040D0D3 F9 STC
0040D0D4 73 38 JNB SHORT NOTEPAD.0040D10E
0040D0D6 48 DEC EAX
0040D0D7 74 35 JE SHORT NOTEPAD.0040D10E
0040D0D9 78 33 JS SHORT NOTEPAD.0040D10E
0040D0DB 66:8B1C39 MOV BX,WORD PTR DS:[ECX+EDI]
0040D0DF 80FB E8 CMP BL,0E8
0040D0E2 74 0F JE SHORT NOTEPAD.0040D0F3
0040D0E4 80FB E9 CMP BL,0E9
0040D0E7 74 0A JE SHORT NOTEPAD.0040D0F3
0040D0E9 66:81FB FF25 CMP BX,25FF
0040D0EE 74 0F JE SHORT NOTEPAD.0040D0FF
0040D0F0 41 INC ECX
0040D0F1 ^ EB E3 JMP SHORT NOTEPAD.0040D0D6 这里往回跳。
0040D0F3 294C39 01 SUB DWORD PTR DS:[ECX+EDI+1],ECX F4到这里。
0040D0F7 83C1 05 ADD ECX,5
0040D0FA 83E8 04 SUB EAX,4
0040D0FD ^ EB D7 JMP SHORT NOTEPAD.0040D0D6 又往回跳。
0040D0FF 295439 02 SUB DWORD PTR DS:[ECX+EDI+2],EDX F4顺利到达这里。
0040D103 83C1 06 ADD ECX,6
0040D106 83EA 04 SUB EDX,4
0040D109 83E8 05 SUB EAX,5
0040D10C ^ EB C8 JMP SHORT NOTEPAD.0040D0D6 又往回跳。
0040D10E C685 D3000000 F>MOV BYTE PTR SS:[EBP+D3],0F8 F4到这里。
0040D115 5B POP EBX 
0040D116 5A POP EDX
0040D117 5E POP ESI
0040D118 ^ E9 76FFFFFF JMP NOTEPAD.0040D093 往回跳。
0040D11D 6A 04 PUSH 4 F4顺利到达这里。
0040D11F FFB5 5F050000 PUSH DWORD PTR SS:[EBP+55F]
0040D125 FFB5 63050000 PUSH DWORD PTR SS:[EBP+563]
0040D12B E8 F2030000 CALL NOTEPAD.0040D522 F8步过远程Call
0040D130 80BD 3C050000 0>CMP BYTE PTR SS:[EBP+53C],1
0040D137 75 0E JNZ SHORT NOTEPAD.0040D147 跳。
0040D147 8B85 43050000 MOV EAX,DWORD PTR SS:[EBP+543] 到这里。 
0040D14D 8985 3F050000 MOV DWORD PTR SS:[EBP+53F],EAX
0040D153 8B95 43050000 MOV EDX,DWORD PTR SS:[EBP+543]
0040D159 2B95 3F050000 SUB EDX,DWORD PTR SS:[EBP+53F]
0040D15F 0395 8B050000 ADD EDX,DWORD PTR SS:[EBP+58B]
0040D165 8995 47050000 MOV DWORD PTR SS:[EBP+547],EDX
0040D16B 8BB5 6B050000 MOV ESI,DWORD PTR SS:[EBP+56B]
0040D171 0BF6 OR ESI,ESI
0040D173 74 33 JE SHORT NOTEPAD.0040D1A8
.............................................................
0040D1B9 /0F84 A0000000 JE NOTEPAD.0040D25F 又是一个大跳转,前面的就不用留意了,留意这里。
0040D1BF |894A 0C MOV DWORD PTR DS:[EDX+C],ECX
0040D1C2 |0385 47050000 ADD EAX,DWORD PTR SS:[EBP+547]
0040D1C8 |52 PUSH EDX
0040D1C9 |51 PUSH ECX
0040D1CA |50 PUSH EAX
0040D1CB |50 PUSH EAX
0040D1CC |8985 53050000 MOV DWORD PTR SS:[EBP+553],EAX
0040D1D2 |8BD8 MOV EBX,EAX
.............................................................
0040D1D4 E8 4F030000 CALL NOTEPAD.0040D528 F8步过远程Call
0040D1D9 5B POP EBX
0040D1DA 59 POP ECX
0040D1DB 5A POP EDX
0040D1DC 0BC0 OR EAX,EAX
0040D1DE 75 12 JNZ SHORT NOTEPAD.0040D1F2
0040D1E0 52 PUSH EDX
0040D1E1 51 PUSH ECX
0040D1E2 53 PUSH EBX
0040D1E3 E8 46030000 CALL NOTEPAD.0040D52E F8步过远程Call
0040D1E8 0BC0 OR EAX,EAX
0040D1EA 0F84 82000000 JE NOTEPAD.0040D272 又是一个大跳转,真多。
.............................................................
0040D218 /74 3D JE SHORT NOTEPAD.0040D257 看这个跳转的位置,我们看到了Popad标志,快到了,不能让他往回走,继续向下。
0040D21A |890E MOV DWORD PTR DS:[ESI],ECX
0040D21C |79 05 JNS SHORT NOTEPAD.0040D223
0040D21E |0FB7C0 MOVZX EAX,AX
0040D221 |EB 0D JMP SHORT NOTEPAD.0040D230
0040D223 |0385 47050000 ADD EAX,DWORD PTR SS:[EBP+547]
0040D229 |66:C700 0000 MOV WORD PTR DS:[EAX],0
.............................................................
0040D23D E8 F2020000 CALL NOTEPAD.0040D534
0040D242 5B POP EBX
0040D243 0BC0 OR EAX,EAX
0040D245 74 4D JE SHORT NOTEPAD.0040D294 没跳,也不能跳,它会跳过Popad语句,那样的话我们还要跟踪。
0040D247 5B POP EBX
0040D248 59 POP ECX
0040D249 5F POP EDI
0040D24A 8907 MOV DWORD PTR DS:[EDI],EAX
0040D24C 5E POP ESI
0040D24D 5A POP EDX
0040D24E 5B POP EBX
0040D24F 83C6 04 ADD ESI,4
0040D252 83C7 04 ADD EDI,4
0040D255 ^ EB BD JMP SHORT NOTEPAD.0040D214 往回跳
0040D257 83C2 14 ADD EDX,14
0040D25A ^ E9 55FFFFFF JMP NOTEPAD.0040D1B4 往回跳
0040D25F 8B85 57050000 MOV EAX,DWORD PTR SS:[EBP+557] 太顺利,F4直接到这里。
0040D265 0385 8B050000 ADD EAX,DWORD PTR SS:[EBP+58B] Eax寄存器里面10CC+400000=4010CC
0040D26B 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
0040D26F 61 POPAD 出口标志
0040D270 FFE0 JMP EAX 跨段跳跃到我们熟悉的记事本Oep=4010CC
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:[4063E4] ; 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 NOTEPAD.004010FC
004010E1 56 PUSH ESI
重建输入表时,插件有两个选项。Method2重建输入表很快,脱壳后运行率高。Method1重建输入表慢,脱壳后运行率较低。本程序用Method1,2重建输入表后程序都可直接运行。
简单方法:
0040D000 60 PUSHAD
0040D001 E8 00000000 CALL NOTEPAD.0040D006
0040D006 5D POP EBP
0040D007 83ED 06 SUB EBP,6
0040D00A 80BD 3E050000 0>CMP BYTE PTR SS:[EBP+53E],1
0040D011 0F84 48020000 JE NOTEPAD.0040D25F
0040D017 C685 3E050000 0>MOV BYTE PTR SS:[EBP+53E],1
运行到这里时Ctrl+F向下找Popad
0040D26F 61 POPAD F2下断点F9运行到这里后取消断点。
0040D270 FFE0 JMP EAX
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:[4063E4] ; 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 NOTEPAD.004010FC
004010E1 56 PUSH ESI
脱壳后软件运行正常。
"手动脱壳入门第九篇"脱壳动画!