当前位置: 代码网 > 服务器>网络安全>加密解密 > Getright 5 手动脱壳和重建IAT--第一部分(图)

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

2008年10月08日 加密解密 我要评论
Getright 5 手动脱壳和重建IAT--第一部分(图) 这是一篇Armadillo加壳软件Getright 5.01的脱壳译文,我是参照Ricardo Narvaja的“Getright 5 脱壳和重建IAT”的文章以及Bighead[DFCG][YCG]的译文,一边实践一边再次翻译的。感谢Rica... 08-10-08
这些信息被保存在父进程的一个缓冲区从3b8fb0开始,然后它会复制给子进程一个从538000开始的 1000 bytes (bytes to write)的块(block),所以如果我们到了这一步,我们可以很容易理解child的第一个section是完全空的,所以当它试图执行到oep时,它报告一个error因为那儿没有任何东西,所以 father得到了通知正如我们可以在father的report中看到的,所以它停止了运行,复制必要的数据块,然后继续运行直到下一个error.被复制的数据块的大小是1000 bytes,所以当程序试图执行任何超过这个大小的block外的指令时, 另一个error将会发生,然后这个error会被通知给father, father会复制另外1000 bytes的块block然后继续.
顺便说一下,我们可以假设第一个error发生是因为son (坏小子)call了它的入口点oep,它的值应该就在 report上.显然oep的值必定在第一个block,father复制过去来解决son报告的error.
这个块从538000开始知道538fff.oep值必定在这些值中. 让我们看一下report.看转储窗口(dump window) 我们先前已经知道了指向report的指针12eff8.

太好了!在那儿我们至少看到了三次这个值: 538540.数学课告诉我538540比538000大,比538fff小 (那些是father试图拷贝给son的那个块的起止值)所以我可以确信538540就是child的oep.
让我们从api writeprocessmemory来改变断点的性质.知道哪个块被拷贝不是很好吗.可以通过下面的方法做到.首先选择bpx所在的行,按f2移除bpx.
右击选择"断点/条件记录".现在在对话框中准确地填入如图所示的值.这样做的目的是使我们在记录窗口中看到所有被father decrypts并拷贝给son的blocks.

第四步: nop the cripter call
在先前的参考教程s中我们知道,这儿我们是在decripter call.father为son decrypts了一个block.但是还有一个cripter call用来encrypts或者destroys已使用的blocks来避免被转储dump.现在的任务是如何找到这个call并把它nop掉.
我现在在writeprocessmemory api,所以我打开"呼叫堆栈窗口"(alt k)在那儿我可以看到:

在这个"呼叫堆栈窗口"越靠上面的是越最新被执行的.从called from 我们可以看到5f949e是father calls api的地方. 如果我们向下看,我们可以看到另一个call.所以我们获得了decripter call的offset.
decripter call= 5f88d1
通过"前往 表达" 5f88d1跳到那儿 ,或者左键双击它.

这是好的call,它用来decrypts.现在去找坏的那个,稍稍向下翻屏或者右击选择"查找参考/呼叫目标" 选择出现的两个参考中的另一个.

它在这儿呢!
重新加密的call--encripter call = 5f8a24

现在我们把它nop掉.我们选择这个call按空格写入nop.


(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com