安全中国首页 > 文章中心 > 脱壳技术
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

Armadillo for Dummies: Getright 5 手动脱壳和重建 IAT (第二部分)(图)

更新时间:2008-5-14 0:48:37
责任编辑:果果龙
热 点:

回到Getright.exe (第一个ollydbg)看一下堆栈那儿的APIDf4cB2处的called调用并将会返回到DF4cB8. 

在主窗口中选择GOTO EXPRESSION 0Df4cb8.

下图是我的机器中这个callAPIcall的地址API返回处BPX(这个call的下一行).

点击RUN

现在在错误entry 5E9c98上下HARDWARE BPX ON WRITE然后点击RUN.当在那儿写入时将被断下.

你可以看到在前面一行保存着错误值.后面指出这个错值从[ebp-394]处来.所以在转储窗口中选择GOTO EXPRESSION EBP-394. 那儿你将会看到这个值.BREKPOINT HARDWARE ON ACCESS.

如果我按下运行键,我将看到无论值是好是坏都在这一行被保存.看附近有一个call BPX.

你可以看到这是关键call.因为当它结束时eax带着稍后将写入的值我测试了这个call里的每一个跳转(只有56,通常都是这样):

00DF4B68 /75 03 JNZ SHORT 00DF4B6D

00DF4B79 /75 07 JNZ SHORT 00DF4B82

00DF4B8D /74 0C JE SHORT 00DF4B9B

00DF4B92 /74 1B JE SHORT 00DF4BAF

00DF4B99 ^\75 F4 JNZ SHORT 00DF4B8F

胜利者是DF4B8D处的跳转正如我先前所说的在所有的armadillos里都是一样的,所以当我们在脱其它armadillo,通过跟踪这些代码我们可以很容易发现这个好跳转

00DF4B8D /74 0C JE SHORT 00DF4B9B

它必须永远跳转,所以我们做如图修改:

清除BPX点击run. (记住清除hardware bpx). 当程序走到我们修改为死循环的指令那儿时输入表已经修复了,再也没有坏值了然后它在子进程的OEP处停下.在纸上写下magic jump的值(EB 0C),记住.

我们将要重复那些步骤.当我们走到上次我们unhook 子进程那一步时,我们将要在magic jump处设置一个 infinite loop代替在API上设置.

在那儿从父进程处unhook子进程,然后它将在magic jump处死循环.

附加子进程, RUN, 然后停止(F12). 它将停在magic jump.

现在还没有任何改变,因为magic jump还没起作用.把它改回先前的值(EB 0C).

如果我们运行程序,它将停在OEP,而且输入表也很完美和完整.现在我们可以利用这个进程用Import Reconstructor去修复在第一部分中转储的程序了.

所有的值都是好的.最后那几个是指向dll.

那些值指向Exxxxx,如果我们看看VIEW-MEMORY我们可以得知那是dll.

现在我们要用一下Import Reconstructor.

上一页 1 2 3 4 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画