名字长一点容易被记住 發表於 2008-10-8 19:04:21

手动脱壳入门第十九篇ASProtect 1.1

【脱文标题】 手动脱壳入门第十九篇ASProtect 1.1<br />

【脱文作者】 weiyi75 <br />

<br />

【作者邮箱】 weiyi75@sohu.com<br />

【作者主页】 Dfcg官方大本营 <br />

【使用工具】 Peid,Ollydbg,Loadpe,ImportREC1.42<br />

【脱壳平台】 Win2000/XP <br />

【软件名称】 chap709.exe<br />

【下载地址】 本地下载<br />

chap709.rar<br />

【软件简介】 ASProtect 1.1b Registered 加密Win98的记事本。<br />

【软件大小】 58.2K<br />

【加壳方式】 ASProtect 1.1b Registered -&gt; Alexey Solodovnikov<br />

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

-------------------------------------------------------------------------------- <br />

【脱壳内容】 <br />

首先Peid查壳,为ASProtect 1.1b Registered -&gt; Alexey Solodovnikov,ASProtect 1.1b Registered 很少弄过,与现在的Asprotect1.2X SEH不同,不过也很容易。SEH异常全部是由13个精心设计的非法指令SEH组成的,这样就无法用模拟跟踪找Oep了。二哥脱壳没有什么耐心,喜欢快。先大概了解了一下程序开始脱壳。<br />

OD载入程序,除了错误或有特权的指令外异常全部忽略,1.1b不检测OD,根本无需隐藏。<br />

0040D001 &gt;60            pushad   //外壳入口,F9运行。<br />

0040D002    E9 95050000   jmp chap709.0040D59C<br />

0040D007    F710            not dword ptr ds:<br />

0040D009    0F0F            ???                                    ; 未知命令<br />

0040D00B    0F9F6C90 FC   setg byte ptr ds:<br />

0040D010    57            push edi<br />

0040D011    C5540F CA       lds edx, fword ptr ds:<br />

0040D015    4B            dec ebx<br />

0040D016    C5540F 12       lds edx, fword ptr ds:<br />

0040D01A    EC            in al, dx<br />

0040D01B    3AAC90 CD540F92 cmp ch, byte ptr ds:<br />

0040D022    CC            int3<br />

.............................................................<br />

第一次异常<br />

0092FF94    8DC0            lea eax, eax                           ; 非法使用寄存器<br />

0092FF96    EB 01         jmp short 0092FF99<br />

0092FF98    68 648F0500   push 58F64<br />

0092FF9D    0000            add byte ptr ds:, al<br />

0092FF9F    00EB            add bl, ch<br />

0092FFA1    02E8            add ch, al<br />

0092FFA3    0158 68         add dword ptr ds:, ebx<br />

0092FFA6    98            cwde<br />

0092FFA7    E5 92         in eax, 92<br />

0092FFA9    0068 D0         add byte ptr ds:, ch<br />

0092FFAC    FF92 00687CF5   call dword ptr ds:<br />

0092FFB2    92            xchg eax, edx<br />

0092FFB3    0068 14         add byte ptr ds:, ch<br />

...................................................................<br />

继续Shift F9 12次达第十三次也是最后一次异常。<br />

0093053D    8DC0            lea eax, eax                           ; 非法使用寄存器<br />

0093053F    EB 01         jmp short 00930542<br />

00930541    68 648F0500   push 58F64<br />

00930546    0000            add byte ptr ds:, al<br />

00930548    00EB            add bl, ch<br />

0093054A    02E8            add ch, al<br />

0093054C    0158 33         add dword ptr ds:, ebx<br />

0093054F    C05A 59 59      rcr byte ptr ds:, 59<br />

00930553    64:8910         mov dword ptr fs:, edx<br />

00930556    68 78059300   push 930578<br />

0093055B    8D45 F0         lea eax, dword ptr ss:<br />

0093055E    E8 2D2CFFFF   call 00923190<br />

00930563    8D45 F8         lea eax, dword ptr ss:<br />

.............................................................<br />

ALT M 打开内存镜像。<br />

内存镜像,项目 21<br />

地址=00401000<br />

大小=00004000 (16384.)<br />

Owner=chap70900400000<br />

区段=<br />

包含=code   //对这里下内存访问断点,Shift F9运行。<br />

类型=Imag 01001002<br />

访问=R<br />

初始访问=RWE<br />

004010CC    55            push ebp//到达Oep,用Loadpe脱壳吧。<br />

004010CD    8BEC            mov ebp, esp<br />

004010CF    83EC 44         sub esp, 44<br />

004010D2    56            push esi<br />

004010D3    FF15 E4634000   call dword ptr ds:<br />

004010D9    8BF0            mov esi, eax<br />

004010DB    8A00            mov al, byte ptr ds:<br />

004010DD    3C 22         cmp al, 22<br />

004010DF    75 1B         jnz short chap709.004010FC   //往下看看IAT被加密了不少。<br />

004010E1    56            push esi<br />

004010E2    FF15 F4644000   call dword ptr ds:<br />

004010E8    8BF0            mov esi, eax<br />

004010EA    8A00            mov al, byte ptr ds:<br />

004010EC    84C0            test al, al<br />

004010EE    74 04         je short chap709.004010F4<br />

004010F0    3C 22         cmp al, 22<br />

004010F2^ 75 ED         jnz short chap709.004010E1<br />

004010F4    803E 22         cmp byte ptr ds:, 22<br />

004010F7    75 15         jnz short chap709.0040110E<br />

004010F9    46            inc esi<br />

004010FA    EB 12         jmp short chap709.0040110E<br />

...........................................................<br />

IAT修复 <br />

运行ImportREC,OEP填入10CC,自动搜索,获得输入信息,有111个指针没有修复,先用跟踪等级1修复98个,剩下的13个用等级3全部修复,正常运行。<br />

火眼金精区段减肥,去除垃圾区段,重建PE。<br />

这个需要一点PE知识,没有也不要紧,跟着一起学,积累经验。<br />

备份好脱壳程序,区段减肥有时过量会导致程序无法运行。<br />

这次区段减肥只是例子,大家要学会举一反三。<br />

我们用OD同时载入未加密的Win98计事本,和脱壳程序。<br />

Win98 记事本<br />

本地下载<br />

Notepad.rar<br />

Alt M打开内存镜像同步分析。<br />

原程序内存镜像<br />

地址       大小       Owner      Section    Contains      类型   访问      初始访问映射为<br />

003E0000   00002000                                       Map    R         R<br />

00400000   00001000   NOTEPAD               PE header   Imag   R         RWE<br />

00401000   00004000   NOTEPAD    .text      code          Imag   R         RWE<br />

00405000   00001000   NOTEPAD    .data      data          Imag   R         RWE<br />

00406000   00001000   NOTEPAD    .idata   imports       Imag   R         RWE<br />

00407000   00005000   NOTEPAD    .rsrc      resources   Imag   R         RWE<br />

0040C000   00001000   NOTEPAD    .reloc   relocations   Imag   R         RWE<br />

Contains <br />

.text         //代码段,我们反编译程序经常看到。<br />

.data       //数据快,程序初始化用。<br />

.idata    //输入表,现在加密壳搞破坏的对象,坏的输入表

<br />
頁: [1]
查看完整版本: 手动脱壳入门第十九篇ASProtect 1.1