标题:手动脱壳入门第十五篇 FSG 1.33

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

时间:2006/8/28 17:23:27

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

内容:

<title> cotine </title>
<style>pre,p,td{background-color:#f2f2f2;FONT:9pt/12pt Verdana;WORD-BREAK:break-word;WORD-WRAP:break-word;}#1{color:#0000D0};#2{color:#FF0000};#3{color:#008000};#4{color:#808080};#5{color:#b000b0};#6{color:#000080;font-weight:bolder}};</style>
<div align="center"><table><tr> <td><b> cotine </b></td></tr><tr> <td width=750> <pre> <a id=3>手动脱壳入门第十五篇 FSG 1.33  </a>

<a id=3>手动脱壳入门第十五篇 FSG 1.33</a>

<a id=3>【脱文标题】 手动脱壳入门第十五篇 FSG 1.33</a>

<a id=3>【脱文作者】 weiyi75[Dfcg] </a>

<a id=3>【作者邮箱】 weiyi75@sohu.com </a>

<a id=3>【作者主页】 Dfcg官方大本营 </a>

<a id=3>【使用工具】 Peid,Ollydbg,ImportREC,Loadpe</a>

<a id=3>【脱壳平台】 Win2K/XP</a>

<a id=3>【软件名称】 Unpackme</a>

<a id=3>【软件简介】 Loveboom用VB写的一个FSG压缩的脱壳练习程序</a>

<a id=3>【软件大小】 2.65 KB</a>

<a id=3>【下载地址】 点击下载</a>

<a id=3>【加壳方式】 FSG 1.33 -&gt; dulek/xt</a>

<a id=3>【保护方式】 FSG压缩壳</a>

<a id=3>【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)</a>


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

<a id=3>【脱壳内容】 </a>

<a id=3>首先Peid查壳,为FSG 1.33 -&gt; dulek/xt,OD载入运行,无任何异常,判断其为压缩壳。</a>

00404B58 &gt; BE A4014000 <a id=1>mov</a> <a id=2>esi</a>, fsg1_33.004001A4 //<a id=3>外壳入口。</a>
00404B5D AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B5E 93 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebx</a>
00404B5F AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B60 97 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>edi</a>
00404B61 AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B62 56 <a id=1>push</a> <a id=2>esi</a>
00404B63 96 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>esi</a>
00404B64 B2 80 <a id=1>mov</a> <a id=2>dl</a>, 80
00404B66 A4 <a id=1>movs</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>es</a>:[<a id=2>edi</a>], <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>&gt;
00404B67 B6 80 <a id=1>mov</a> <a id=2>dh</a>, 80
00404B69 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B6B ^ 73 F9 <a id=1>jnb</a> short fsg1_33.00404B66
00404B6D 33C9 <a id=1>xor</a> <a id=2>ecx</a>, <a id=2>ecx</a>
00404B6F FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B71 73 16 <a id=1>jnb</a> short fsg1_33.00404B89
00404B73 33C0 <a id=1>xor</a> <a id=2>eax</a>, <a id=2>eax</a>
00404B75 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B77 73 1F <a id=1>jnb</a> short fsg1_33.00404B98

<a id=3>打开内存镜像,它工作区段就是404000 resources段里面,内存镜像断点没有作用。它也没有用PUSHAD等语句,ESP定律也不能用。据说FSG 1.33还有变形版本,单步慢慢跟踪太费时间,下API断点,也慢。</a>

<a id=3>对付它最好的方法就是模拟跟踪,因为它没有SEH,模拟跟踪最好不过了。</a>

<a id=3>内存镜像,项目 13</a>
<a id=3>地址=00404000</a>
<a id=3>大小=00001000 (4096.)</a>
Owner=fsg1_33 00400000
<a id=3>区段=</a>
<a id=3>包含=SFX,imports,resources // 当前段是在404000里面。</a>
<a id=3>类型=Imag 01001002</a>
<a id=3>访问=R</a>
<a id=3>初始访问=RWE</a>


<a id=3>内存镜像,项目 12</a>
<a id=3>地址=00401000</a>
<a id=3>大小=00003000 (12288.)</a>
Owner=fsg1_33 00400000
<a id=3>区段=</a>
<a id=3>包含=code //Oep肯定是在Code段里面。不管FSG在SFX,imports,resources区段里面解压,循环搞什么飞机。最后肯定要跨段访问401000 </a>

Code<a id=3>段。</a>
<a id=3>类型=Imag 01001002</a>
<a id=3>访问=R</a>
<a id=3>初始访问=RWE</a>

<a id=3>于是,命令行下</a>

tc <a id=2>eip</a>&lt;404000 //<a id=3>模拟跟踪指令。</a>

1<a id=3>分钟不到,Oep就到了。</a>

00401160 68 <a id=5>db</a> 68 //Oep,<a id=3>点清除分析看得习惯一点。</a>
00401161 F8 <a id=5>db</a> F8
00401162 13 <a id=5>db</a> 13
00401163 40 <a id=5>db</a> 40 <a id=3>; CHAR '@'</a>
00401164 00 <a id=5>db</a> 00
00401165 E8 <a id=5>db</a> E8
00401166 F0 <a id=5>db</a> F0
00401167 FF <a id=5>db</a> FF
00401168 FF <a id=5>db</a> FF
00401169 FF <a id=5>db</a> FF
0040116A 00 <a id=5>db</a> 00
0040116B 00 <a id=5>db</a> 00
0040116C 00 <a id=5>db</a> 00
0040116D 00 <a id=5>db</a> 00
0040116E 00 <a id=5>db</a> 00
0040116F 00 <a id=5>db</a> 00
00401170 30 <a id=5>db</a> 30 <a id=3>; CHAR '0'</a>
.........................................................................................

00401160 68 F8134000 <a id=1>push</a> fsg1_33.004013F8 //<a id=3>熟悉的VB程序入口特征码,Loadpe直接脱壳。</a>
00401165 E8 F0FFFFFF <a id=1>call</a> fsg1_33.0040115A <a id=3>; jmp to MSVBVM60.ThunRTMain</a>
0040116A 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040116C 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040116E 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401170 3000 <a id=1>xor</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401172 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401174 3800 <a id=1>cmp</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401176 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401178 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040117A 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040117C 95 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebp</a>
0040117D ^ 75 A7 <a id=1>jnz</a> short fsg1_33.00401126
.........................................................................................

<a id=3>脱壳后发现程序不能运行,这时需要用Imprec修复引入函数表(Import Table)</a>

<a id=3>在Oep处填1160,点IT自动搜索,然后点获输入信息,看到输入表全部有效,点修复抓取文件按钮,选择Dump的文件,修复它,正常运行。</a>

<a id=3>再看看API断点找Oep,单步跟踪FSG 1.33后,大家可以走捷径,当然是下API断点。</a>

Btw: <a id=3>前提是你有过单步跟踪Fsg的经验,不然你看不懂下面是什么意思。也就是第一次学某个壳要按正常方法单步跟踪找入口体会壳,不要取巧走捷径,精通了就可以走捷径脱壳。</a>

00404B58 &gt; BE A4014000 <a id=1>mov</a> <a id=2>esi</a>, fsg1_33.004001A4 //<a id=3>外壳入口。</a>
00404B5D AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B5E 93 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebx</a>
00404B5F AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B60 97 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>edi</a>
00404B61 AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B62 56 <a id=1>push</a> <a id=2>esi</a>
00404B63 96 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>esi</a>
00404B64 B2 80 <a id=1>mov</a> <a id=2>dl</a>, 80
00404B66 A4 <a id=1>movs</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>es</a>:[<a id=2>edi</a>], <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>&gt;
00404B67 B6 80 <a id=1>mov</a> <a id=2>dh</a>, 80
00404B69 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B6B ^ 73 F9 <a id=1>jnb</a> short fsg1_33.00404B66
00404B6D 33C9 <a id=1>xor</a> <a id=2>ecx</a>, <a id=2>ecx</a>
00404B6F FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B71 73 16 <a id=1>jnb</a> short fsg1_33.00404B89
00404B73 33C0 <a id=1>xor</a> <a id=2>eax</a>, <a id=2>eax</a>
00404B75 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B77 73 1F <a id=1>jnb</a> short fsg1_33.00404B98
00404B79 B6 80 <a id=1>mov</a> <a id=2>dh</a>, 80
00404B7B 41 <a id=1>inc</a> <a id=2>ecx</a>
00404B7C B0 10 <a id=1>mov</a> <a id=2>al</a>, 10
.........................................................................................

<a id=3>命令行</a>

<a id=2>bp</a> GetModuleHandleA

77E6AB06 &gt; 55 <a id=1>push</a> <a id=2>ebp</a> //<a id=3>中断后清除断点。</a>
77E6AB07 8BEC <a id=1>mov</a> <a id=2>ebp</a>, <a id=2>esp</a>
77E6AB09 837D 08 00 <a id=1>cmp</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+8], 0
77E6AB0D 0F84 31F50000 <a id=1>je</a> KERNEL32.77E7A044
77E6AB13 FF75 08 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+8]
77E6AB16 E8 9EC8FFFF <a id=1>call</a> KERNEL32.77E673B9
77E6AB1B 85C0 <a id=1>test</a> <a id=2>eax</a>, <a id=2>eax</a>
77E6AB1D 74 08 <a id=1>je</a> short KERNEL32.77E6AB27
77E6AB1F FF70 04 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>+4]
77E6AB22 E8 5B560000 <a id=1>call</a> KERNEL32.GetModuleHandleW
77E6AB27 5D <a id=1>pop</a> <a id=2>ebp</a>
77E6AB28 C2 0400 <a id=1>retn</a> 4
77E6AB2B &gt; 55 <a id=1>push</a> <a id=2>ebp</a>
77E6AB2C 8BEC <a id=1>mov</a> <a id=2>ebp</a>, <a id=2>esp</a>
77E6AB2E 6A 00 <a id=1>push</a> 0
77E6AB30 FF75 18 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+18]
77E6AB33 FF75 14 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+14]
77E6AB36 FF75 10 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+10]
77E6AB39 FF75 0C <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+C]
77E6AB3C FF75 08 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+8]
77E6AB3F E8 132E0000 <a id=1>call</a> KERNEL32.GetPrivateProfileStringW
.........................................................................................

ALT+F9 <a id=3>执行到用户代码。</a>

00404BE6 95 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebp</a> // <a id=3>到这里。</a>
00404BE7 AC <a id=1>lods</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BE8 84C0 <a id=1>test</a> <a id=2>al</a>, <a id=2>al</a>
00404BEA ^ 75 FB <a id=1>jnz</a> short fsg1_33.00404BE7
00404BEC FE0E <a id=1>dec</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BEE ^ 74 F0 <a id=1>je</a> short fsg1_33.00404BE0
00404BF0 79 05 <a id=1>jns</a> short fsg1_33.00404BF7
00404BF2 46 <a id=1>inc</a> <a id=2>esi</a>
00404BF3 AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BF4 50 <a id=1>push</a> <a id=2>eax</a>
00404BF5 EB 09 <a id=1>jmp</a> short fsg1_33.00404C00
00404BF7 FE0E <a id=1>dec</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BF9 - 0F84 61C5FFFF <a id=1>je</a> fsg1_33.00401160
00404BFF 56 <a id=1>push</a> <a id=2>esi</a>
00404C00 55 <a id=1>push</a> <a id=2>ebp</a>
00404C01 FF53 04 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>+4]
00404C04 AB <a id=1>stos</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>es</a>:[<a id=2>edi</a>]
00404C05 ^ EB E0 <a id=1>jmp</a> short fsg1_33.00404BE7
.........................................................................................

<a id=3>继续下</a>

<a id=2>bp</a> <a id=6>GetProcAddress</a>

77E6E6A9 &gt; 55 <a id=1>push</a> <a id=2>ebp</a> //<a id=3>清除断点,Ctrl+F9返回。</a>
77E6E6AA 8BEC <a id=1>mov</a> <a id=2>ebp</a>, <a id=2>esp</a>
77E6E6AC 51 <a id=1>push</a> <a id=2>ecx</a>
77E6E6AD 51 <a id=1>push</a> <a id=2>ecx</a>
77E6E6AE 53 <a id=1>push</a> <a id=2>ebx</a>
77E6E6AF 57 <a id=1>push</a> <a id=2>edi</a>
77E6E6B0 8B7D 0C <a id=1>mov</a> <a id=2>edi</a>, <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+C]
77E6E6B3 BB FFFF0000 <a id=1>mov</a> <a id=2>ebx</a>, 0FFFF
77E6E6B8 3BFB <a id=1>cmp</a> <a id=2>edi</a>, <a id=2>ebx</a>
77E6E6BA 0F86 D3EB0000 <a id=1>jbe</a> KERNEL32.77E7D293
77E6E6C0 8D45 F8 <a id=1>lea</a> <a id=2>eax</a>, <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>-8]
77E6E6C3 57 <a id=1>push</a> <a id=2>edi</a>
77E6E6C4 50 <a id=1>push</a> <a id=2>eax</a>
77E6E6C5 FF15 2413E677 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[&lt;&NTDLL.RtlInitString&gt;<a id=3>; ntdll.RtlInitString</a>
77E6E6CB 8D45 0C <a id=1>lea</a> <a id=2>eax</a>, <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+C]
77E6E6CE 50 <a id=1>push</a> <a id=2>eax</a>
77E6E6CF 8D45 F8 <a id=1>lea</a> <a id=2>eax</a>, <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>-8]
77E6E6D2 6A 00 <a id=1>push</a> 0
77E6E6D4 50 <a id=1>push</a> <a id=2>eax</a>
77E6E6D5 6A 00 <a id=1>push</a> 0
77E6E6D7 FF75 08 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+8]
77E6E6DA E8 15B10000 <a id=1>call</a> KERNEL32.77E797F4
.........................................................................................

00404BE4 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404BE6 95 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebp</a>
00404BE7 AC <a id=1>lods</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BE8 84C0 <a id=1>test</a> <a id=2>al</a>, <a id=2>al</a>
00404BEA ^ 75 FB <a id=1>jnz</a> short fsg1_33.00404BE7
00404BEC FE0E <a id=1>dec</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BEE ^ 74 F0 <a id=1>je</a> short fsg1_33.00404BE0
00404BF0 79 05 <a id=1>jns</a> short fsg1_33.00404BF7
00404BF2 46 <a id=1>inc</a> <a id=2>esi</a>
00404BF3 AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BF4 50 <a id=1>push</a> <a id=2>eax</a>
00404BF5 EB 09 <a id=1>jmp</a> short fsg1_33.00404C00
00404BF7 FE0E <a id=1>dec</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BF9 - 0F84 61C5FFFF <a id=1>je</a> fsg1_33.00401160 //<a id=3>这里跨段跳跃到4010000 段了,肯定是Oep入口跳转。</a>
00404BFF 56 <a id=1>push</a> <a id=2>esi</a>
00404C00 55 <a id=1>push</a> <a id=2>ebp</a>
00404C01 FF53 04 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>+4]
00404C04 AB <a id=1>stos</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>es</a>:[<a id=2>edi</a>] //<a id=3>返回到这里,滚动条往上看。</a>
00404C05 ^ EB E0 <a id=1>jmp</a> short fsg1_33.00404BE7
.........................................................................................

<a id=3>于是命令行。</a>

g 401160

00401160 68 <a id=5>db</a> 68 //Oep,<a id=3>点清除分析看得习惯一点。</a>
00401161 F8 <a id=5>db</a> F8
00401162 13 <a id=5>db</a> 13
00401163 40 <a id=5>db</a> 40 <a id=3>; CHAR '@'</a>
00401164 00 <a id=5>db</a> 00
00401165 E8 <a id=5>db</a> E8
00401166 F0 <a id=5>db</a> F0
00401167 FF <a id=5>db</a> FF
00401168 FF <a id=5>db</a> FF
00401169 FF <a id=5>db</a> FF
0040116A 00 <a id=5>db</a> 00
0040116B 00 <a id=5>db</a> 00
0040116C 00 <a id=5>db</a> 00
0040116D 00 <a id=5>db</a> 00
0040116E 00 <a id=5>db</a> 00
0040116F 00 <a id=5>db</a> 00
00401170 30 <a id=5>db</a> 30 <a id=3>; CHAR '0'</a>
.........................................................................................

00401160 68 F8134000 <a id=1>push</a> fsg1_33.004013F8 //<a id=3>熟悉的VB程序入口特征码,Loadpe直接脱壳。</a>
00401165 E8 F0FFFFFF <a id=1>call</a> fsg1_33.0040115A <a id=3>; jmp to MSVBVM60.ThunRTMain</a>
0040116A 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040116C 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040116E 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401170 3000 <a id=1>xor</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401172 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401174 3800 <a id=1>cmp</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401176 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401178 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040117A 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040117C 95 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebp</a>
0040117D ^ 75 A7 <a id=1>jnz</a> short fsg1_33.00401126
.........................................................................................

<a id=3>脱壳后发现程序不能运行,这时需要用Imprec修复引入函数表(Import Table)</a>

<a id=3>在Oep处填1160,点IT自动搜索,然后点获输入信息,看到输入表全部有效,点修复抓取文件按钮,选择Dump的文件,修复它,正常运行。</a>
<a id=4>"手动脱壳入门第十五篇"</a><a id=3>脱壳动画!</a>
<a id=3>另:如果我没有记错的话,CCG的hoto前辈写的CRACKME就用了这个壳,但是变形的,有难度的。偶把它一起打包了,能脱了它并破了它,就可以去加入CCG了。 </a>


 

 

&lt;&lt;&lt;<a id=3>上一篇   下一篇&gt;&gt;&gt; </a>

  </pre><br>

 

<title> cotine </title>
<style>pre,p,td{background-color:#f2f2f2;FONT:9pt/12pt Verdana;WORD-BREAK:break-word;WORD-WRAP:break-word;}#1{color:#0000D0};#2{color:#FF0000};#3{color:#008000};#4{color:#808080};#5{color:#b000b0};#6{color:#000080;font-weight:bolder}};</style>
<div align="center"><table><tr> <td><b> cotine </b></td></tr><tr> <td width=750> <pre> <a id=3>手动脱壳入门第十五篇 FSG 1.33  </a>

<a id=3>手动脱壳入门第十五篇 FSG 1.33</a>

<a id=3>【脱文标题】 手动脱壳入门第十五篇 FSG 1.33</a>

<a id=3>【脱文作者】 weiyi75[Dfcg] </a>

<a id=3>【作者邮箱】 weiyi75@sohu.com </a>

<a id=3>【作者主页】 Dfcg官方大本营 </a>

<a id=3>【使用工具】 Peid,Ollydbg,ImportREC,Loadpe</a>

<a id=3>【脱壳平台】 Win2K/XP</a>

<a id=3>【软件名称】 Unpackme</a>

<a id=3>【软件简介】 Loveboom用VB写的一个FSG压缩的脱壳练习程序</a>

<a id=3>【软件大小】 2.65 KB</a>

<a id=3>【下载地址】 点击下载</a>

<a id=3>【加壳方式】 FSG 1.33 -&gt; dulek/xt</a>

<a id=3>【保护方式】 FSG压缩壳</a>

<a id=3>【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)</a>


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

<a id=3>【脱壳内容】 </a>

<a id=3>首先Peid查壳,为FSG 1.33 -&gt; dulek/xt,OD载入运行,无任何异常,判断其为压缩壳。</a>

00404B58 &gt; BE A4014000 <a id=1>mov</a> <a id=2>esi</a>, fsg1_33.004001A4 //<a id=3>外壳入口。</a>
00404B5D AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B5E 93 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebx</a>
00404B5F AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B60 97 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>edi</a>
00404B61 AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B62 56 <a id=1>push</a> <a id=2>esi</a>
00404B63 96 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>esi</a>
00404B64 B2 80 <a id=1>mov</a> <a id=2>dl</a>, 80
00404B66 A4 <a id=1>movs</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>es</a>:[<a id=2>edi</a>], <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>&gt;
00404B67 B6 80 <a id=1>mov</a> <a id=2>dh</a>, 80
00404B69 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B6B ^ 73 F9 <a id=1>jnb</a> short fsg1_33.00404B66
00404B6D 33C9 <a id=1>xor</a> <a id=2>ecx</a>, <a id=2>ecx</a>
00404B6F FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B71 73 16 <a id=1>jnb</a> short fsg1_33.00404B89
00404B73 33C0 <a id=1>xor</a> <a id=2>eax</a>, <a id=2>eax</a>
00404B75 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B77 73 1F <a id=1>jnb</a> short fsg1_33.00404B98

<a id=3>打开内存镜像,它工作区段就是404000 resources段里面,内存镜像断点没有作用。它也没有用PUSHAD等语句,ESP定律也不能用。据说FSG 1.33还有变形版本,单步慢慢跟踪太费时间,下API断点,也慢。</a>

<a id=3>对付它最好的方法就是模拟跟踪,因为它没有SEH,模拟跟踪最好不过了。</a>

<a id=3>内存镜像,项目 13</a>
<a id=3>地址=00404000</a>
<a id=3>大小=00001000 (4096.)</a>
Owner=fsg1_33 00400000
<a id=3>区段=</a>
<a id=3>包含=SFX,imports,resources // 当前段是在404000里面。</a>
<a id=3>类型=Imag 01001002</a>
<a id=3>访问=R</a>
<a id=3>初始访问=RWE</a>


<a id=3>内存镜像,项目 12</a>
<a id=3>地址=00401000</a>
<a id=3>大小=00003000 (12288.)</a>
Owner=fsg1_33 00400000
<a id=3>区段=</a>
<a id=3>包含=code //Oep肯定是在Code段里面。不管FSG在SFX,imports,resources区段里面解压,循环搞什么飞机。最后肯定要跨段访问401000 </a>

Code<a id=3>段。</a>
<a id=3>类型=Imag 01001002</a>
<a id=3>访问=R</a>
<a id=3>初始访问=RWE</a>

<a id=3>于是,命令行下</a>

tc <a id=2>eip</a>&lt;404000 //<a id=3>模拟跟踪指令。</a>

1<a id=3>分钟不到,Oep就到了。</a>

00401160 68 <a id=5>db</a> 68 //Oep,<a id=3>点清除分析看得习惯一点。</a>
00401161 F8 <a id=5>db</a> F8
00401162 13 <a id=5>db</a> 13
00401163 40 <a id=5>db</a> 40 <a id=3>; CHAR '@'</a>
00401164 00 <a id=5>db</a> 00
00401165 E8 <a id=5>db</a> E8
00401166 F0 <a id=5>db</a> F0
00401167 FF <a id=5>db</a> FF
00401168 FF <a id=5>db</a> FF
00401169 FF <a id=5>db</a> FF
0040116A 00 <a id=5>db</a> 00
0040116B 00 <a id=5>db</a> 00
0040116C 00 <a id=5>db</a> 00
0040116D 00 <a id=5>db</a> 00
0040116E 00 <a id=5>db</a> 00
0040116F 00 <a id=5>db</a> 00
00401170 30 <a id=5>db</a> 30 <a id=3>; CHAR '0'</a>
.........................................................................................

00401160 68 F8134000 <a id=1>push</a> fsg1_33.004013F8 //<a id=3>熟悉的VB程序入口特征码,Loadpe直接脱壳。</a>
00401165 E8 F0FFFFFF <a id=1>call</a> fsg1_33.0040115A <a id=3>; jmp to MSVBVM60.ThunRTMain</a>
0040116A 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040116C 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040116E 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401170 3000 <a id=1>xor</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401172 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401174 3800 <a id=1>cmp</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401176 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401178 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040117A 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040117C 95 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebp</a>
0040117D ^ 75 A7 <a id=1>jnz</a> short fsg1_33.00401126
.........................................................................................

<a id=3>脱壳后发现程序不能运行,这时需要用Imprec修复引入函数表(Import Table)</a>

<a id=3>在Oep处填1160,点IT自动搜索,然后点获输入信息,看到输入表全部有效,点修复抓取文件按钮,选择Dump的文件,修复它,正常运行。</a>

<a id=3>再看看API断点找Oep,单步跟踪FSG 1.33后,大家可以走捷径,当然是下API断点。</a>

Btw: <a id=3>前提是你有过单步跟踪Fsg的经验,不然你看不懂下面是什么意思。也就是第一次学某个壳要按正常方法单步跟踪找入口体会壳,不要取巧走捷径,精通了就可以走捷径脱壳。</a>

00404B58 &gt; BE A4014000 <a id=1>mov</a> <a id=2>esi</a>, fsg1_33.004001A4 //<a id=3>外壳入口。</a>
00404B5D AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B5E 93 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebx</a>
00404B5F AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B60 97 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>edi</a>
00404B61 AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404B62 56 <a id=1>push</a> <a id=2>esi</a>
00404B63 96 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>esi</a>
00404B64 B2 80 <a id=1>mov</a> <a id=2>dl</a>, 80
00404B66 A4 <a id=1>movs</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>es</a>:[<a id=2>edi</a>], <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>&gt;
00404B67 B6 80 <a id=1>mov</a> <a id=2>dh</a>, 80
00404B69 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B6B ^ 73 F9 <a id=1>jnb</a> short fsg1_33.00404B66
00404B6D 33C9 <a id=1>xor</a> <a id=2>ecx</a>, <a id=2>ecx</a>
00404B6F FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B71 73 16 <a id=1>jnb</a> short fsg1_33.00404B89
00404B73 33C0 <a id=1>xor</a> <a id=2>eax</a>, <a id=2>eax</a>
00404B75 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404B77 73 1F <a id=1>jnb</a> short fsg1_33.00404B98
00404B79 B6 80 <a id=1>mov</a> <a id=2>dh</a>, 80
00404B7B 41 <a id=1>inc</a> <a id=2>ecx</a>
00404B7C B0 10 <a id=1>mov</a> <a id=2>al</a>, 10
.........................................................................................

<a id=3>命令行</a>

<a id=2>bp</a> GetModuleHandleA

77E6AB06 &gt; 55 <a id=1>push</a> <a id=2>ebp</a> //<a id=3>中断后清除断点。</a>
77E6AB07 8BEC <a id=1>mov</a> <a id=2>ebp</a>, <a id=2>esp</a>
77E6AB09 837D 08 00 <a id=1>cmp</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+8], 0
77E6AB0D 0F84 31F50000 <a id=1>je</a> KERNEL32.77E7A044
77E6AB13 FF75 08 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+8]
77E6AB16 E8 9EC8FFFF <a id=1>call</a> KERNEL32.77E673B9
77E6AB1B 85C0 <a id=1>test</a> <a id=2>eax</a>, <a id=2>eax</a>
77E6AB1D 74 08 <a id=1>je</a> short KERNEL32.77E6AB27
77E6AB1F FF70 04 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>+4]
77E6AB22 E8 5B560000 <a id=1>call</a> KERNEL32.GetModuleHandleW
77E6AB27 5D <a id=1>pop</a> <a id=2>ebp</a>
77E6AB28 C2 0400 <a id=1>retn</a> 4
77E6AB2B &gt; 55 <a id=1>push</a> <a id=2>ebp</a>
77E6AB2C 8BEC <a id=1>mov</a> <a id=2>ebp</a>, <a id=2>esp</a>
77E6AB2E 6A 00 <a id=1>push</a> 0
77E6AB30 FF75 18 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+18]
77E6AB33 FF75 14 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+14]
77E6AB36 FF75 10 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+10]
77E6AB39 FF75 0C <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+C]
77E6AB3C FF75 08 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+8]
77E6AB3F E8 132E0000 <a id=1>call</a> KERNEL32.GetPrivateProfileStringW
.........................................................................................

ALT+F9 <a id=3>执行到用户代码。</a>

00404BE6 95 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebp</a> // <a id=3>到这里。</a>
00404BE7 AC <a id=1>lods</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BE8 84C0 <a id=1>test</a> <a id=2>al</a>, <a id=2>al</a>
00404BEA ^ 75 FB <a id=1>jnz</a> short fsg1_33.00404BE7
00404BEC FE0E <a id=1>dec</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BEE ^ 74 F0 <a id=1>je</a> short fsg1_33.00404BE0
00404BF0 79 05 <a id=1>jns</a> short fsg1_33.00404BF7
00404BF2 46 <a id=1>inc</a> <a id=2>esi</a>
00404BF3 AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BF4 50 <a id=1>push</a> <a id=2>eax</a>
00404BF5 EB 09 <a id=1>jmp</a> short fsg1_33.00404C00
00404BF7 FE0E <a id=1>dec</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BF9 - 0F84 61C5FFFF <a id=1>je</a> fsg1_33.00401160
00404BFF 56 <a id=1>push</a> <a id=2>esi</a>
00404C00 55 <a id=1>push</a> <a id=2>ebp</a>
00404C01 FF53 04 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>+4]
00404C04 AB <a id=1>stos</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>es</a>:[<a id=2>edi</a>]
00404C05 ^ EB E0 <a id=1>jmp</a> short fsg1_33.00404BE7
.........................................................................................

<a id=3>继续下</a>

<a id=2>bp</a> <a id=6>GetProcAddress</a>

77E6E6A9 &gt; 55 <a id=1>push</a> <a id=2>ebp</a> //<a id=3>清除断点,Ctrl+F9返回。</a>
77E6E6AA 8BEC <a id=1>mov</a> <a id=2>ebp</a>, <a id=2>esp</a>
77E6E6AC 51 <a id=1>push</a> <a id=2>ecx</a>
77E6E6AD 51 <a id=1>push</a> <a id=2>ecx</a>
77E6E6AE 53 <a id=1>push</a> <a id=2>ebx</a>
77E6E6AF 57 <a id=1>push</a> <a id=2>edi</a>
77E6E6B0 8B7D 0C <a id=1>mov</a> <a id=2>edi</a>, <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+C]
77E6E6B3 BB FFFF0000 <a id=1>mov</a> <a id=2>ebx</a>, 0FFFF
77E6E6B8 3BFB <a id=1>cmp</a> <a id=2>edi</a>, <a id=2>ebx</a>
77E6E6BA 0F86 D3EB0000 <a id=1>jbe</a> KERNEL32.77E7D293
77E6E6C0 8D45 F8 <a id=1>lea</a> <a id=2>eax</a>, <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>-8]
77E6E6C3 57 <a id=1>push</a> <a id=2>edi</a>
77E6E6C4 50 <a id=1>push</a> <a id=2>eax</a>
77E6E6C5 FF15 2413E677 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[&lt;&NTDLL.RtlInitString&gt;<a id=3>; ntdll.RtlInitString</a>
77E6E6CB 8D45 0C <a id=1>lea</a> <a id=2>eax</a>, <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+C]
77E6E6CE 50 <a id=1>push</a> <a id=2>eax</a>
77E6E6CF 8D45 F8 <a id=1>lea</a> <a id=2>eax</a>, <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>-8]
77E6E6D2 6A 00 <a id=1>push</a> 0
77E6E6D4 50 <a id=1>push</a> <a id=2>eax</a>
77E6E6D5 6A 00 <a id=1>push</a> 0
77E6E6D7 FF75 08 <a id=1>push</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ss</a>:[<a id=2>ebp</a>+8]
77E6E6DA E8 15B10000 <a id=1>call</a> KERNEL32.77E797F4
.........................................................................................

00404BE4 FF13 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>]
00404BE6 95 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebp</a>
00404BE7 AC <a id=1>lods</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BE8 84C0 <a id=1>test</a> <a id=2>al</a>, <a id=2>al</a>
00404BEA ^ 75 FB <a id=1>jnz</a> short fsg1_33.00404BE7
00404BEC FE0E <a id=1>dec</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BEE ^ 74 F0 <a id=1>je</a> short fsg1_33.00404BE0
00404BF0 79 05 <a id=1>jns</a> short fsg1_33.00404BF7
00404BF2 46 <a id=1>inc</a> <a id=2>esi</a>
00404BF3 AD <a id=1>lods</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BF4 50 <a id=1>push</a> <a id=2>eax</a>
00404BF5 EB 09 <a id=1>jmp</a> short fsg1_33.00404C00
00404BF7 FE0E <a id=1>dec</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>esi</a>]
00404BF9 - 0F84 61C5FFFF <a id=1>je</a> fsg1_33.00401160 //<a id=3>这里跨段跳跃到4010000 段了,肯定是Oep入口跳转。</a>
00404BFF 56 <a id=1>push</a> <a id=2>esi</a>
00404C00 55 <a id=1>push</a> <a id=2>ebp</a>
00404C01 FF53 04 <a id=1>call</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>ebx</a>+4]
00404C04 AB <a id=1>stos</a> <a id=5>dword</a> <a id=5>ptr</a> <a id=2>es</a>:[<a id=2>edi</a>] //<a id=3>返回到这里,滚动条往上看。</a>
00404C05 ^ EB E0 <a id=1>jmp</a> short fsg1_33.00404BE7
.........................................................................................

<a id=3>于是命令行。</a>

g 401160

00401160 68 <a id=5>db</a> 68 //Oep,<a id=3>点清除分析看得习惯一点。</a>
00401161 F8 <a id=5>db</a> F8
00401162 13 <a id=5>db</a> 13
00401163 40 <a id=5>db</a> 40 <a id=3>; CHAR '@'</a>
00401164 00 <a id=5>db</a> 00
00401165 E8 <a id=5>db</a> E8
00401166 F0 <a id=5>db</a> F0
00401167 FF <a id=5>db</a> FF
00401168 FF <a id=5>db</a> FF
00401169 FF <a id=5>db</a> FF
0040116A 00 <a id=5>db</a> 00
0040116B 00 <a id=5>db</a> 00
0040116C 00 <a id=5>db</a> 00
0040116D 00 <a id=5>db</a> 00
0040116E 00 <a id=5>db</a> 00
0040116F 00 <a id=5>db</a> 00
00401170 30 <a id=5>db</a> 30 <a id=3>; CHAR '0'</a>
.........................................................................................

00401160 68 F8134000 <a id=1>push</a> fsg1_33.004013F8 //<a id=3>熟悉的VB程序入口特征码,Loadpe直接脱壳。</a>
00401165 E8 F0FFFFFF <a id=1>call</a> fsg1_33.0040115A <a id=3>; jmp to MSVBVM60.ThunRTMain</a>
0040116A 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040116C 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040116E 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401170 3000 <a id=1>xor</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401172 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401174 3800 <a id=1>cmp</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401176 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
00401178 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040117A 0000 <a id=1>add</a> <a id=5>byte</a> <a id=5>ptr</a> <a id=2>ds</a>:[<a id=2>eax</a>], <a id=2>al</a>
0040117C 95 <a id=1>xchg</a> <a id=2>eax</a>, <a id=2>ebp</a>
0040117D ^ 75 A7 <a id=1>jnz</a> short fsg1_33.00401126
.........................................................................................

<a id=3>脱壳后发现程序不能运行,这时需要用Imprec修复引入函数表(Import Table)</a>

<a id=3>在Oep处填1160,点IT自动搜索,然后点获输入信息,看到输入表全部有效,点修复抓取文件按钮,选择Dump的文件,修复它,正常运行。</a>
<a id=4>"手动脱壳入门第十五篇"</a><a id=3>脱壳动画!</a>
<a id=3>另:如果我没有记错的话,CCG的hoto前辈写的CRACKME就用了这个壳,但是变形的,有难度的。偶把它一起打包了,能脱了它并破了它,就可以去加入CCG了。 </a>


 

 

&lt;&lt;&lt;<a id=3>上一篇   下一篇&gt;&gt;&gt; </a>

  </pre><br>