«1 2 » Pages: ( 2/2 total )
本页主题: 脱壳基础知识入门及FAQ 打印 | 加为IE收藏 | 复制链接 | 收藏主题 | 上一主题 | 下一主题

黎明前夕
级别: 侠客

 

第九课 手动确定IAT的地址与大小  

    在第八课中讲到,点击ImportREC的“IAT AutoSearch”按钮,一般情况下ImportREC可以自动识别出IAT地址与大小。但如果不能自动识别,就必须手动确定IAT地址与大小,然后将IAT的RVA与Size填进ImportREC,点击“Get Import”按钮就可得到输入表。
    还是用上一节实例演示,用OD打开notepad.upx.exe,来到OEP处:



    随便找一个API函数调用语句,如:
004010D3    FF15 E4634000   call    [4063E4]          ; kernel32.GetCommandLineA

   其中地址4063E4就是IAT中的一部分,在数据窗口下命令:D 4063E4,显示如下:



  上图每一组数据都是指向一个API函数,如 8D 2C 81 7C 就是地址:7C812C8D,在OD里按Ctrl+G,输入7C812C8D跳到这个地址就会发现是kernel32.GetCommandLineA函数:





   IAT是一块连续排列的数据,因此在数据窗口向上翻屏,直到出现00数据,寻找IAT起始地址:


然后向下翻屏,寻找IAT结束地址:



为了直观些,你也可以这样让数据窗口直接显示这些API函数,以确定IAT是否正确,在数据窗口点击鼠标右键:



调整显示格式后的数据窗口:



这样就直观了,IAT中每组数据指向一个API函数,各DLL之间是以000000分开的。

因此IAT范围:0x4062E4~0x406524 ,大小为0x406524-0x4062E4=0x240 

如果IAT加密了,此时IAT中的地址不是指向系统DLL中的API函数了,可能指向外壳。这就十分有必要找到外壳处理IAT的代码了,前面己说过,外壳加载时,会模拟Windows加载器,向IAT里填充当前操作系统API函数的实际地址。所以,在IAT里设个内存写断点,就可中断到这段代码处。
重新加载notepad.upx.exe,在IAT某个地址下内存写断点,这里选择0x4062E4这个地址设内存写断点,先在数据窗口下命令:D 4062E4



然后选择一个地址,点击鼠标右键,下“内存写断点”。



此时只要有数据写入4062E4地址处,OD就会中断,按F9运行OD,会中断这里:

0040E96D    > /8A02          mov     al, [edx]
0040E96F    . |42            inc     edx
0040E970    . |8807          mov     [edi], al
0040E972    . |47            inc     edi
0040E973    . |49            dec     ecx
0040E974    .^\75 F7         jnz     short 0040E96D

这段还不是处理IAT,按F9继续执行程序,会中断这里:


0040E9E9    > /8A07          mov     al, [edi]
0040E9EB    . |47            inc     edi
0040E9EC    . |08C0          or      al, al
0040E9EE    .^|74 DC         je      short 0040E9CC
0040E9F0    . |89F9          mov     ecx, edi
0040E9F2    . |57            push    edi                        // 函数名字符串  
0040E9F3    . |48            dec     eax
0040E9F4    .  F2:AE         repne   scas byte ptr es:[edi]
0040E9F6    . |55            push    ebp                        // DLL模块句柄
0040E9F7    .  FF96 A4EC0000 call    [esi+ECA4]                 ;  kernel32.GetProcAddress
0040E9FD    . |09C0          or      eax, eax
0040E9FF    . |74 07         je      short 0040EA08
0040EA01    . |8903          mov     [ebx], eax                // EBX指向IAT,将取得的API地址填充进IAT
0040EA03    . |83C3 04       add     ebx, 4                    // 指向下一个地址
0040EA06    .^\EB E1         jmp     short 0040E9E9
0040EA08    >  FF96 A8EC0000 call    [esi+ECA8]

上面这段就是UPX外壳填充IAT的全过程,感兴趣的,动态跟踪一下就明白了。这里用GetProcAddress函数获得函数地址:

FARPROC GetProcAddress(
  HMODULE hModule,    // DLL模块句柄
  LPCSTR lpProcName   // 函数名
);
Posted: 2008-06-09 23:54 | 10 楼
黎明前夕
级别: 侠客

 

第十课 DLL文件脱壳  
 DLL文件脱壳 

第十一课 优化与自校验去除  

1.浅谈程序脱壳后的优化   

2.常见自校检分析实例  
Posted: 2008-06-09 23:54 | 11 楼
黎明前夕
级别: 侠客

 

第十一课 Armadillo壳  

辅助工具
相应工具下载页面:http://www.pediy.com/tools/unpacker.htm

Armadillo find protected:检测 Armadillo版本号及其保护类型
dilloDIE:一款脱 Armadillo 4.xx 的脱壳机
ArmaGUI:Armadillo 3.xx/4.xx 脱壳机
ArmInline:辅助处理Armadillo壳,其中Code Splicing修复的很完美。输入表混淆修复感觉有些问题,建议手工修复。

手动脱壳教学
试玩armadillo3.50a一点心得  (基础知识)

Armadillo COPYMEMEII之DUMP的一个LOADPE小插件  (利用插件Dump取COPYMEMEII保护的程序)
Armadillo 3.6主程序脱壳   (Dump取COPYMEMEII保护的程序另一方法)

Patch 修复 Armadillo 的IAT乱序 (处理IAT乱序)

Armadillo中code splicing的几种处理方法 (手工修复Code Splicing)
Armadillo客户版Code Splicing+Import (利用ArmInline工具修复Code Splicing)

浅谈Armadillo V.3.75 与 V.3.78的保护  (Nanomites原理概念,即CC保护)
Blaze Media Pro5.05脱壳+基本修复CC(int3)+破解  (修复CC)
Armadillo V4.40主程序脱壳  (目前处理CC很好的一个方法)

带key脱壳:
http://bbs.pediy.com/showthread.php?threadid=23174
Posted: 2008-06-09 23:55 | 12 楼
黎明前夕
级别: 侠客

 

第十二课 ASProtect 2.x壳  

下载:VolX的Aspr2.XX_unpacker_v1.0 

VolX这个脚本其实是一个ASProtect脱壳机了,支持Asprotect 1.32, 1.33, ,1.35, 1.4, 2.0, 2.1, 2.11, 2.2beta, 2.2, 2.3

1.Ollydbg 1.1
2.Odbgscript 1.47 或以上的版本(OD插件,一般集成OD都有)
3.Import Reconstructor

运行Ollydbg打开目标程序,单击OD菜单“插件/Odbgscript/运行脚本”,打开VolX这个脚本:Aspr2.XX_unpacker_v1.0SC.osc

然后按着脚本提示操作就可。
脚本跑完,会在目标软件的目录生成一个de_文件名.exe,OD的记录窗口(按Alt+L)打开显示了OEP,IAT等信息,如:
代码:           IAT 的地址 = 00405000           IAT 的相对地址 = 00005000           IAT 的大小 = 000000BC00A70042   断点位于 00A70042           OEP 的地址 = 00401D2B           OEP 的相对地址 = 00001D2B[/pre] 

接下来,你再用Import Reconstructor修复输入表即可,最后Fix Dump时选中de_文件名.exe.



一般情况下,用VolX的脚本就能脱Asprotect了。如果你要手工脱壳,如下文章可参考:
引用:nspack3.5主程序脱壳分析(Aspr SKE 2.X)   (输入表)
Asprotect SKE 2.2 的Advanced Import protection保护技术  (输入表)


莱鸟脱Aspr2.11 SKE+修复stolen   (Dump法对付stolen OEP)

ASProtect.SKE.2.11 stolen code解密  (ASProtect 2.11的stolen与SDK修复技术 )
ASProtect_SKE_2.3Beta_Build0319 stolen code分析 (ASProtect 2.22/2.23的stolen与SDK修复技术 )

ASProtect SKE 2.2 SDK中的API修复    

附ASProtect脱壳机:
ASProtect1.2以前版本,可以用CASPR v1.10 
ASProtect1.2x,可以用Stripper 2.07ht 
ASProtect 1.3~ASProtect 2.0 ,可以用Stripper 2.11 
ASProtect SKE 2.11以前版本,可以用stripper v2.13 (last beta)  
ASProtect SKE 2.2/2.3  观注...
Posted: 2008-06-09 23:55 | 13 楼
861086
级别: 新手上路

 

LZ你辛苦了

好好学习
Posted: 2008-08-12 17:01 | 14 楼
cc1221
级别: 新手上路

 

虽然有点老了,但是还是支持你一
Posted: 2008-09-05 17:42 | 15 楼
77765758
级别: 禁止发言

 

用户被禁言,该主题自动屏蔽!
Posted: 2008-09-17 00:55 | 16 楼
«1 2 » Pages: ( 2/2 total )
帖子浏览记录 版块浏览记录
三九安全网 » 菜鸟入门

Total 0.156725(s) query 6, Time now is:12-02 02:26, Gzip disabled 鄂ICP备07005312号
Powered by PHPWind v6.0 Certificate Code © 2003-07 PHPWind.com Corporation