标题:手动脱壳入门第十四篇32Lite 0.03a
-------------------------------------------------------------------------------------------------------------------------------
时间:2006/8/28 17:22:15
-------------------------------------------------------------------------------------------------------------------------------
内容:
cotine |
手动脱壳入门第十四篇32Lite 0.03a 手动脱壳入门第十四篇32Lite 0.03a 【脱文标题】 手动脱壳入门第十四篇32Lite 0.03a 【脱文作者】 weiyi75[Dfcg] 【作者邮箱】 weiyi75@sohu.com 【作者主页】 Dfcg官方大本营 【使用工具】 Peid,Ollydbg,ImportREC,Loadpe 【脱壳平台】 Win2K/XP 【软件名称】 QEDITOR 【软件简介】 masm 8.0 的编辑器 【软件大小】 33.1 KB 【下载地址】 点击下载 【加壳方式】 32Lite 0.03a -> Oleg Prokhorov 【保护方式】 32Lite 压缩壳 【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:) -------------------------------------------------------------------------------- 【脱壳内容】 首先Peid查壳,为32Lite 0.03a -> Oleg Prokhorov,没见过,OD载入运行,无任何异常,判断其为压缩壳。 还记得我发的修正练习脱壳软件帖子,为了方便大家练习脱壳,我找了五种语言的程序供大家用各种加密软件加壳练手,平时也可以用Od载入熟悉各种语言的特征码。 稍微说明一下: 每一种编译工具例如 : VC++ , Delphi , Borland , etc.. 在OEP有一个唯一的/相同的PE头 其中的一些是这样的: Push EBP MOV Ebp,Esp //观察入口点ESP值的变化规律,一般到这句后 ESP=12ffc0 Add ESP , -010 //F8执行到这句时,ESP=EBP=12ffc0 //利用这个特性我们很容易找到OEP+1的地址,或加密壳的stolen bytes 的位置。 Mov EAX, SOME_VALUE (共11bytes) 看参考截图。 开始脱壳吧,首先找OEP入口。 00401000 60 pushad//进入OD后停在这 00401001 06 push es 00401002 FC cld 00401003 1E push ds 00401004 07 pop es 00401005 BE 00104000 mov esi,QEDITOR.<ModuleEntryPoint> 0040100A 6A 04 push 4 0040100C 68 00100000 push 1000 00401011 68 A3820000 push 82A3 00401016 6A 00 push 0 00401018 FF96 80B50100 call dword ptr ds:[esi+1B580] ..................................................... 命令行 d 12ffc0 在0012FFc0内存处的4个字节上下硬件写入->DWord 断点 直接F9运行 00410D50 55 push ebp 00410D51 8BEC mov ebp, esp //直接断在OEP+1处,说明一下,脱壳并不一定要在入口点脱壳,假如我们断点在00410D89处, 我们一样可以脱壳,不过修复IAT是修正入口值为正确值就可以了,这个程序是10D50,这里用Loadpe脱壳。 00410D53 53 push ebx 00410D54 56 push esi 00410D55 57 push edi 00410D56 BB 00604100 mov ebx, QEDITOR.00416000 00410D5B 66:2E:F705 D213>test word ptr cs:[4113D2], 4 00410D65 0F85 DB000000 jnz QEDITOR.00410E46 00410D6B 6A 00 push 0 00410D6D FF15 54844100 call dword ptr ds:[418454] ; OLE32.CoInitialize 00410D73 E8 92020000 call QEDITOR.0041100A 00410D78 C783 08010000 0>mov dword ptr ds:[ebx+108], 1 00410D82 8D83 90020000 lea eax, dword ptr ds:[ebx+290] 00410D88 50 push eax 00410D89 FF15 DC834100 call dword ptr ds:[4183DC] ; KERNEL32.GetVersionExA //看入口特征和下面两个API知道是C++程序。 00410D8F 83EC 44 sub esp, 44 00410D92 C70424 44000000 mov dword ptr ss:[esp], 44 00410D99 C74424 2C 00000>mov dword ptr ss:[esp+2C], 0 00410DA1 54 push esp 00410DA2 FF15 D4834100 call dword ptr ds:[4183D4] ; KERNEL32.GetStartupInfoA ............................................................................ IAT压缩壳没有破坏它 运行ImportREC,选择这个进程。把OEP改为00010D50,点IT AutoSearch,点“Get Import”,FixDump,2K平台脱壳可以跨平台运行! 流行的ESP定律 00401000 60 pushad//进入OD后停在这 00401001 06 push es //堆栈平衡原理 00401002 FC cld 00401003 1E push ds 00401004 07 pop es 00401005 BE 00104000 mov esi,QEDITOR.<ModuleEntryPoint> 0040100A 6A 04 push 4 0040100C 68 00100000 push 1000 00401011 68 A3820000 push 82A3 00401016 6A 00 push 0 00401018 FF96 80B50100 call dword ptr ds:[esi+1B580] F8过了00401001后ESP=0012FFA0。压缩壳使用ESP定律很有效,在0012FFA0内存处的4个字节上下硬件访问->Word 断点。 F9运行,程序中断在003780E3处! 003780E3 68 00800000 push 8000 //堆栈平衡原理 003780E8 6A 00 push 0 003780EA 68 00003700 push 370000 003780EF 05 3C050000 add eax,53C 003780F4 50 push eax ; QEDITOR.0041C53C 003780F5 C3 retn//返回 0041C53C 0041C53C FF96 84B50100 call dword ptr ds:[esi+1B584] ; kernel32.VirtualFree 0041C542 61 popad //关键字 0041C543 E9 0848FFFF jmp QEDITOR.00410D50 //跳向入口 00410D50 55 push ebp //在这儿用LordPE脱壳 00410D51 8BEC mov ebp,esp 00410D53 53 push ebx 00410D54 56 push esi 00410D55 57 push edi 00410D56 BB 00604100 mov ebx,QEDITOR.00416000 00410D5B 66:2E:F705 D2134100>test word ptr cs:[4113D2],4 00410D65 0F85 DB000000 jnz QEDITOR.00410E46 00410D6B 6A 00 push 0 00410D6D FF15 54844100 call dword ptr ds:[418454] ; OLE32.CoInitialize IAT压缩壳没有破坏它 运行ImportREC,选择这个进程。把OEP改为00010D50,点IT AutoSearch,点“Get Import”,FixDump,2K平台脱壳可以跨平台运行! "手动脱壳入门第十四篇"脱壳动画! <<<上一篇 下一篇>>> |