标题:手动脱壳入门第十四篇32Lite 0.03a

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

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

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

内容:

cotine

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平台脱壳可以跨平台运行!
"手动脱壳入门第十四篇"脱壳动画!

  
 
<<<上一篇   下一篇>>> 
  

cotine
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平台脱壳可以跨平台运行!
"手动脱壳入门第十四篇"脱壳动画!

  
 
<<<上一篇   下一篇>>>