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

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

2019年05月29日  | 移动技术网网络运营  | 我要评论

第七步:如何打入补丁
当做这一步时请注意.很多人不知道究竟该如何打补丁,所以努力试着理解我这里所作的, 然后学会在其它情况下运用.
第一步是改变跳转,

我们将要改变这个跳转为jmp 401000那是我们将要打补丁的地方, 父进程offset 401000 .

跳转设好了,现在去401000 (ctrl g)我们要开始写补丁了. 在report中我们可以看到三次entry point value.也许oep在其它情况下会出现更多次.但是我们只需改变这三个.

father unpacks了在report中显示的block.所以我们将要欺骗father则他会相信从第一个section开始的所有blocks都存在错误, 一个接一个所有的blocks都会被unpacked.因为这一点我们需要知道第一个 section的起止点.点击"查看/内存"

这儿我们可以看到getright的sections.忽略header section看text section,它从401000开始,结束在589000-1=588fff.
401000-588fff (第一个section的范围)
我们将要在report中用400000代替oep的值.

正如你在图中看到的我写入了40000,然后patch会在每一个loop前加1000,所以第一个被unpack的block将在401000.
现在我们将要在401000处写下如下补丁.

00401000 8105 10f01200 0>picture1/add dword ptr ds:[12f010],1000
0040100a 8105 1cf01200 0>picture1/add dword ptr ds:[12f01c],1000
00401014 8105 20f01200 0>picture1/add dword ptr ds:[12f020],1000
这些行将我们先前在转储窗口(dump window)写的值增加1000.那些蓝色的值在不同的机器上可能会不同,所以修改为你在转储窗口(dump window)看到的实际值. 再次提醒,证实在转储窗口(dump window)写入了00 00 40 .最容易犯的错误就是在补丁(蓝色的)中的offset和转储窗口(dump window)的offset不匹配.
下一行该这样写:
0040101e 813d 20f01200 0>cmp dword ptr ds:[12f020],getright.00589000
比较是为了让我们知道何时所有的块都被unpacked了.
然后我们必须写下:
00401028 - 0f85 f6341f00 jnz getright.005f7524
如果比较为假,则返回called loop的地方.然后我们需要在最后写下nop,在那儿我们将要设下一个bp. 当它完成转储时,它将会停在那儿.

这儿我们可以看到完整的补丁代码
我们可以跟踪第一个循环,来检测report中的each entry是否每次都增加1000.
第八步: unpack
按f9运行程序然后等待它停在我们先前在补丁中设下nop的bpx处.如果没有错误发生,当我们停止时,看view-log我们将要看到所有的unpacked blocks.
这是假设的所有unpacked blocks的log.我没有完整的给出因为地方不够但是你可以在你的日志窗口中查看.
所以现在从401000到589000(包括588fff)的所有blocks都被unpacked了,然后dump已经就绪.
第九步:把child从father那儿脱钩
一旦我们停在nop,让我们写下下面几行.
push (child的handle )
call debugactiveprocessstop
如果handle由字母开始,你需要在它前面键入一个0,因为不这样做的话olly不会认出. 想知道son的handle只需看一下pupe, 记住child的handle是在两个进程中的上面的那个.你一样可以通过opening file attach来获得son的handle.那儿你可以看到两个名称相同的进程. 红的是father,黑的是son.在此情况下我得到的是b78 所以我将要写下0b78.记住handle在每次运行程序时都会改变.

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网