当前位置: 移动技术网 > 网络运营>安全>加解密 > Getright 5 手动脱壳和重建IAT--第二部分(图)

Getright 5 手动脱壳和重建IAT--第二部分(图)

2019年05月29日  | 移动技术网网络运营  | 我要评论
在本参考教程的第一部分我们学习了如何正确地转储(dump)Getright 5. 现在我们将要去找神奇跳转,这样IAT会被正确地转储下来,而不用手工修复了. 要完成这一点,我们需要打败程序中的一些... 08-10-08
第一次变化可能会很久才发生, 但是记住不断的在ollydbg运行、在pupe中点击buscar,并检查字节窗口中的值,直到字节窗口中的值从零开始变化.

如图所示,那个值变化了. 现在再重复几次,你将会看到:


子进程已经完全解出并赋值iat. 我们必须在那个值第一次变化之后子进程赋值之前进入子进程. 这是个问题,但我耍了一个把戏解决了.
我们将要重复上述过程.关闭parcheando--pupe的窗口,因为当重启后进程的句柄会变.
重复上述过程直到你在pupe的窗口中观察到那个值的第一次变化.你应该看到类似这样的东西:


很难找到一种好方法, 所以我决定在某个api上制造一个死循环.就选getprocaddress吧.所以现在我们要去父进程中找到它.选择view-ejecutable module 查找kernel32.dll 这是getprocaddress所属的dll.

右击view-names查找api getprocaddress


写下这个地址(红箭头).现在在pupe中选择子进程,让它去找search (buscar)这个地址值. 不同的机器这个值会不同. 我的是77e5b332.在字节窗口你会看到前两个字节是55 8b,所以在纸上写下,并在pupe中将其改为eb fe然后按下parchear

在那儿现在子进程将会处于死循环中,我们可以说它已经睡着了. 我们现在必须把它从它的父进程那儿unhook下来.
在父进程窗口任意处点击鼠标右键,选择"新建起源"然后写下下面的代码
push (son’shandle)
call debugactiveprocessstop
nop (在这儿bpx并检查是否eax=1)

在0042f00a 下中断,然后运行一下停在0042f00a 处。看看寄存器窗口的eax值,如果这个值=01就表示子进程和父进程分离了。如果=00那么可能是子进程的句柄填错了, 你可以在下面重新写入代码再次运行,直到eax=01时就可以关闭ollydbg了(杀掉父进程!)然后就可以进入子进程了。
重新运行ollydbg(不要加载程序)附加上子进程.
再次在pupe中恢复原来的代码 55 8b并按 "parchear" 再看看程序中的代码又还原成了77e5b332.

程序将会中断,就像你在下图中看到的.

让我们看一下那个错误的entry,右击转储dump窗口选择goto expression 5e9c34.

bp getprocaddress 然后按run. 你可以看到当中断时错误的entry已经被重写了,但是表并不完整. 重新打开一个ollydbg载入tute.exe.如果在5e9c8c下面还有一个错误的entry就看那儿.

以5e9c98处的错值为例,因为那儿将会被写入df513c.

回到getright.exe (第一个ollydbg)看一下堆栈. 那儿的api被df4cb2处的called调用并将会返回到df4cb8.
在主窗口中选择goto expression 0df4cb8.


如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网