windycandy 发表于 2005-11-12 09:10:35

K.O.--→tElock 0.99

【脱壳作者】 windycandy

【使用工具】 PEiD、ODbyDYK v1.10、ImportREC1.6 Final

【脱壳平台】 Win XP

【软件名称】 MC++的crackme

【软件大小】 25.5K

【加壳方式】 tElock 0.99 -> tE!

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

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

【脱壳内容】



signature = E9 5E DF FF FF 00 00 00
ep_only = true

脱壳过程

1.找OEP

OD载入程序,设置除了忽略kernel32异常之外,其他异常全部不忽略

(注:有些程序可以用2次内存断点来快速到达OEP,但是这种方法好象并不通用,
个人认为用二哥进阶教程脱tElock 0.98 -> tE!方法比较稳当)

入口代码:

0040A09D m>^\E9 5EDFFFFF   jmp mc++.00408000
0040A0A2   0000            add byte ptr ds:,al
0040A0A4   0055 E6         add byte ptr ss:,dl
0040A0A7   9D            popfd
0040A0A8   EC            in al,dx
0040A0A9   E5 A0         in eax,0A0
0040A0AB   0000            add byte ptr ds:,al
0040A0AD   0000            add byte ptr ds:,al

shift+f9运行,经过16次左右异常后到最后一次异常处

00409C74   FE03            inc byte ptr ds:----------这里
00409C76   ^ EB E8         jmp short mc++.00409C60
00409C78   B8 9B14501B   mov eax,1B50149B
00409C7D   E8 0C000000   call mc++.00409C8E
00409C82   15 9D15501B   adc eax,1B50159D
00409C87   E9 09000000   jmp mc++.00409C95
00409C8C   33C1            xor eax,ecx
00409C8E   C1E8 C9         shr eax,0C9
00409C91   C3            retn
00409C92   48            dec eax
00409C93   33C1            xor eax,ecx
00409C95   1BC7            sbb eax,edi
00409C97   2BD2            sub edx,edx
00409C99   64:8F02         pop dword ptr fs:

看堆栈的值:

0012FF78   0012FFE0指针到下一个 SEH 记录
0012FF7C   00409C66SE 句柄-------------------注意这里
0012FF80   00000000
0012FF84   00000000
0012FF88   00006A24
0012FF8C   0012FFA0

在CPU窗口ctrl+G到:409C66

00409C66   8B6424 08       mov esp,dword ptr ss:-----到这里,F2下断
00409C6A   EB 0C         jmp short mc++.00409C78
00409C6C   33DB            xor ebx,ebx
00409C6E   64:FF33         push dword ptr fs:

shift+F9断在409C66处,取消断点

将鼠标向上拖到代码的最顶上处

00408000   000400          add byte ptr ds:,al----------看这行的地址值
00408003   00DB            add bl,bl
00408005   CC            int3
00408006   B3 B7         mov bl,0B7
00408008   4D            dec ebp
00408009   5A            pop edx
0040800A   90            nop
0040800B   0003            add byte ptr ds:,al
0040800D   0000            add byte ptr ds:,al

于是在命令行下:tc eip<408000,中断在OEP处

004013FB   /.55            push ebp---------------断在这里
004013FC   |.8BEC          mov ebp,esp
004013FE   |.6A FF         push -1
00401400   |.68 B8404000   push mc++.004040B8
00401405   |.68 301F4000   push mc++.00401F30                  ;SE 句柄安装
0040140A   |.64:A1 0000000>mov eax,dword ptr fs:
00401410   |.50            push eax
00401411   |.64:8925 00000>mov dword ptr fs:,esp
00401418   |.83EC 58       sub esp,58
0040141B   |.53            push ebx
0040141C   |.56            push esi
0040141D   |.57            push edi

2.获得IAT起始地址及修复

用OD插件将其dump出来,不关OD,打开ImportREC,OEP:13FB,自动搜索,得到无效指针(有些程序获得
到部分有效指针),这时无论是用ImportREC的level 1还是level 2、level 3及tElock插件都无法搜索到
有效的函数,IAT已经被加密了,注意RAV的值:00004000先记下(IAT起始地址)。下面开始我们的解密
IAT之旅:

ctrl+f2重新载入加壳程序,OD设置忽略所有异常,再添加以下几个异常C0000005(ACCESS VIOLATION)、
C000001D(ILLEGALINSTRUCTION)、C000001E(INVALID LOCK SEQUENCE)、C0000096(PRIVILEGED INSTRUCTION)

ctrl+g到:404000(IAT起始地址+基址)

00404000   96            xchg eax,esi-------------到这里
00404001   DE64F4 07       fisub word ptr ss:
00404005   CB            retf
00404006   92            xchg eax,edx
00404007   8910            mov dword ptr ds:,edx
00404009   36:0962 47      or dword ptr ss:,esp
0040400D   9C            pushfd

在404000下内存写入断点,shift+f9中断

0040914A   AA            stos byte ptr es:---------断在这里
0040914B   69D2 A5B0CD4B   imul edx,edx,4BCDB0A5
00409151   F9            stc
00409152   72 02         jb short mc++.00409156
00409154   CD20 D1C269DB   vxdjump DB69C2D1
0040915A   70 1F         jo short mc++.0040917B
0040915C   EE            out dx,al
0040915D   6A 03         push 3
0040915F   DA49 0F         fimul dword ptr ds:
00409162   8F            ???                                 ; 未知命令
00409163   5B            pop ebx
00409164   FFFF            ???                                 ; 未知命令

再ctl+s找

pushad
sub eax, eax
inc eax
cmp dword ptr ds:, 0
lea edi,dword ptr ds:

找到这里

004097E8   48            dec eax
004097E9   75 36         jnz short mc++.00409821
004097EB   60            pushad-------------------------这里
004097EC   2BC0            sub eax,eax
004097EE   40            inc eax
004097EF   833F 00         cmp dword ptr ds:,0
004097F2   8D7F 04         lea edi,dword ptr ds:
004097F5   ^ 75 F7         jnz short mc++.004097EE
004097F7   48            dec eax
004097F8   74 1F         je short mc++.00409819
004097FA   8BD8            mov ebx,eax


向上找到如下代码处

004096EF   C3            retn
004096F0   8985 4B374000   mov dword ptr ss:,eax
004096F6   8D85 942E4000   lea eax,dword ptr ss:
004096FC   60            pushad
004096FD   33C9            xor ecx,ecx
004096FF   2AF6            sub dh,dh
00409701   8A13            mov dl,byte ptr ds:
00409703   F6C2 40         test dl,40
00409706   74 03         je short mc++.0040970B
00409708   80E2 5F         and dl,5F
0040970B   0AD2            or dl,dl
0040970D   74 1E         je short mc++.0040972D-----★magic jump/修改为:jmp 0040972D
0040970F   43            inc ebx
00409710   FEC6            inc dh
00409712   41            inc ecx
00409713   3A5408 FF       cmp dl,byte ptr ds:
00409717   ^ 74 E8         je short mc++.00409701
00409719   3A5408 08       cmp dl,byte ptr ds:
0040971D   ^ 74 E2         je short mc++.00409701
0040971F   3A5408 12       cmp dl,byte ptr ds:
00409723   ^ 74 DC         je short mc++.00409701
00409725   3A5408 1D       cmp dl,byte ptr ds:
00409729   ^ 74 D6         je short mc++.00409701
0040972B   ^ EB D0         jmp short mc++.004096FD
0040972D   0AF6            or dh,dh
0040972F   895424 1C       mov dword ptr ss:,edx
00409733   61            popad

将magic jump修改后,alt+m在code段下内存访问断点


00400000    00001000 (4096.)   00400000          PE header   Imag01001002   R   RWE

00401000    00003000 (12288.)00400000   text   code      Imag 01001002    R   RWE----下内存访问断点


shift+f9到OEP,到这里所有的IAT已经解密完毕,可以进行修复了。不关OD,打开ImportREC,OEP:13FB,自动搜索,
现在看看找到了什么?得到所有的指针都含情脉脉,对你暗送秋天里的菠菜啊(赵本山经典语),所有效指针全部
有效,修复抓取文件,OK,修复后的程序正常运行!!!

附件包含:本文、crackme及unpacked

--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[ 本帖最后由 windycandy 于 2006-3-19 01:35 编辑 ]

kgdurgwu 发表于 2007-6-18 00:16:56

学习修复iat的好文章啊
学习。。。

rsice 发表于 2007-6-18 17:08:44

好文学习中!建议作成动画

enjon 发表于 2007-6-18 20:06:31

/:07 谢谢顶你一顶

kgdurgwu 发表于 2007-6-21 23:52:22

刚刚跟了一下
谢谢老大

enjon 发表于 2007-6-26 03:11:43

动画上传,向高手学习

由于分割文件太多,上传麻烦      完整文件请到

                                        请到www.21disk.com中提取文件 提取码:10001381400978337887371168023






├─ c:\bbsup\telock0.99\telock0.99.part01.rar
├─ c:\bbsup\telock0.99\telock0.99.part02.rar
├─ c:\bbsup\telock0.99\telock0.99.part03.rar
├─ c:\bbsup\telock0.99\telock0.99.part04.rar
├─ c:\bbsup\telock0.99\telock0.99.part05.rar
├─ c:\bbsup\telock0.99\telock0.99.part06.rar
├─ c:\bbsup\telock0.99\telock0.99.part07.rar
├─ c:\bbsup\telock0.99\telock0.99.part08.rar

3:04:55.15 分割完成。

分割的原始文件为:
├→ "C:\Documents and Settings\sicent\桌面\telock0.99.exe"

分割生成了以下文件,每个文件大小为 140k :
├─ c:\bbsup\telock0.99\telock0.99.part01.rar
├─ c:\bbsup\telock0.99\telock0.99.part02.rar
├─ c:\bbsup\telock0.99\telock0.99.part03.rar
├─ c:\bbsup\telock0.99\telock0.99.part04.rar
├─ c:\bbsup\telock0.99\telock0.99.part05.rar
├─ c:\bbsup\telock0.99\telock0.99.part06.rar
├─ c:\bbsup\telock0.99\telock0.99.part07.rar
├─ c:\bbsup\telock0.99\telock0.99.part08.rar
├─ c:\bbsup\telock0.99\telock0.99.part09.rar
├─ c:\bbsup\telock0.99\telock0.99.part10.rar
├─ c:\bbsup\telock0.99\telock0.99.part11.rar
├─ c:\bbsup\telock0.99\telock0.99.part12.rar
├─ c:\bbsup\telock0.99\telock0.99.part13.rar
├─ c:\bbsup\telock0.99\telock0.99.part14.rar
├─ c:\bbsup\telock0.99\telock0.99.part15.rar
├─ c:\bbsup\telock0.99\telock0.99.part16.rar
├─ c:\bbsup\telock0.99\telock0.99.part17.rar
├─ c:\bbsup\telock0.99\telock0.99.part18.rar
├─ c:\bbsup\telock0.99\telock0.99.part19.rar
├─ c:\bbsup\telock0.99\telock0.99.part20.rar
├─ c:\bbsup\telock0.99\telock0.99.part21.rar
├─ c:\bbsup\telock0.99\telock0.99.part22.rar
├─ c:\bbsup\telock0.99\telock0.99.part23.rar
├─ c:\bbsup\telock0.99\telock0.99.part24.rar
├─ c:\bbsup\telock0.99\telock0.99.part25.rar
├─ c:\bbsup\telock0.99\telock0.99.part26.rar
├─ c:\bbsup\telock0.99\telock0.99.part27.rar


[ 本帖最后由 enjon 于 2007-6-26 03:12 编辑 ]

千里之外 发表于 2007-12-22 12:01:27

好文章 支持/:good

听风 发表于 2007-12-27 11:22:18

学到东西了!sustain
页: [1]
查看完整版本: K.O.--→tElock 0.99