• 标 题:Armadillo2.0
  • 作 者:hying
  • 时 间:2001-6-16 17:35:31
  • 链 接:http://bbs.pediy.com

Armadillo2.0脱壳实战
前言:Armadillo2.0是最新的加密软件,对于不了解的人可能强度很高,但是一旦掌握方法解决起来是非常方便的。
研究对象:windows自带的notepad.exe(52K)
一:先找一个Armadillo2.0,阿伦主页就有。下载下来安装好用它对notepad.exe加密,产生一个新的notepad.exe大小为200K。运行它,在同一目录下会产生一个notepad.tmp0,大小也为52K,把它复制一份,命名为note.exe。
二:用十六进制编辑器打开note.exe观察,发现所有部分基本均正常,只有代码段变成了一串"xxxxxxx",那接下来就修补它。观察它的段表知道它的代码段在文件中的偏移从400开始,在内存中地址为401000到405000。先运行notepad.exe,再运行winhex,选编辑内存,选其中的notepad.tmp0的主内存,将里面从401000到405000的内容复制下来(在代码段最后一般会有很多的"000000",不要复制它们),打开note.exe,从400处开始替换掉空白的代码段。好了脱壳基本完成,还差最后一步,现在note.exe的入口地址是403EA3(不同机器可能不同),这是个错误的地址,需要修正。
三:寻找正确的入口地址。运行trw2000,下faults off。用trw2000随便载入一个程序,载入后马上观察它的ESP值为64FE3C,而[64FE3C]=BFF8B86C,而且不管载入什么程序,这个值是不变的。那么BFF8B86C处是什么呢?如下:
0167:BFF8B852 PUSH EAX
0167:BFF8B853 PUSH DWORD 0500
0167:BFF8B858 CALL BFF8181C
0167:BFF8B85D MOV DWORD [EBP-04],00
0167:BFF8B864 MOV EAX,[EBP-2C]
0167:BFF8B867 CALL BFF74399 <-注意
0167:BFF8B86C MOV [EBP-28],EAX
0167:BFF8B86F JMP SHORT BFF8B88B
0167:BFF8B871 PUSH DWORD [EBP-14]
0167:BFF8B874 CALL `KERNEL32!UnhandledExceptionFilter`
0167:BFF8B879 RET
我们试着下断点bp bff8b867,再运行一个程序,果然断了下来,用F8进入看到如下:
0167:BFF74399 CMP EAX,80000000
0167:BFF7439E JNC BFF743B5
0167:BFF743A0 BTR WORD [FS:1C],01
0167:BFF743AA JNC BFF743B5
0167:BFF743AC PUSHF
0167:BFF743AD OR DWORD [ESP],0100
0167:BFF743B4 POPF
0167:BFF743B5 JMP EAX <-注意
0167:BFF743B7 INT3
F10单步跟踪,我们将由下面的JMP EAX跳到程序的真正入口。这就是系统载入程序的方法?
再次运行notepad.exe,程序第一次停在bff8b867,不管它,G,出现一个未注册提示,按确定后第二次又停下来,我们跟进去,发现由JMP EAX跳到了403EA3,就是错误的程序入口,此时还是有ESP=64FE3C,[64FE3C]=BFF8B86C,我们下断点bpm 64fe38,然后G,我们停在这儿:
0167:BFF94D32 MOV [EDX],ECX
0167:BFF94D34 MOV EAX,[EBP-04] <-停在这儿
0167:BFF94D37 MOV DWORD[EAX+24],BFF76920
0167:BFF94D3E MOV ESP,EBP
0167:BFF94D40 POP PBP
0167:BFF94D41 RET 04
看一下ECX的值,是4010CC。我们用F10走,到如下:
Kernel32!DebugBreak
0167:BFF76920 INT3
0167:BFF76921 RET <-这儿
0167:BFF76922 INT3
程序将从上面的RET跳到4010CC,这就是程序的正确入口,也可以在上面的BFF94D34处直接G,由于上面的RET用到[64FE38]的值,所以我们将直接停在程序入口处。找到入口点后,将note.exe修正一下就可以运行了。而且程序与未加密的notepad.exe几乎分毫不差。是不是很简单?
四:另一种方法。就是在入口点DUMP程序,然后修复输入表。Import REConstructor v1.2完全可以胜任。
注意:上面的BFFxxxxx这种地址在不同的机器上可能不相同,以代码为准!
BTW:放弃Armadillo吧,还是ASProtect最难脱!
由于水平有限,如有错误之处请指正。
hying[CCG]
2001年6月16日