Dav*_*ita 2 reverse-engineering ida disassembly
我尝试用我糟糕的装配技巧来分析一个dll文件,所以请原谅我,如果我无法实现非常微不足道的事情.我的问题是,在调试应用程序时,我发现我只在调试会话中寻找的代码,在我停止调试器后,地址消失了.dll看起来不会被混淆,因为许多代码都是可读的.看一下截图.我正在寻找的代码位于debug376部分的地址07D1EBBF.BTW,我在哪里获得这个debug376部分?
所以我的问题是,如何在不调试的情况下找到此功能?谢谢
UPDATE
好吧,正如我所说,一旦我停止调试器,代码就会消失.我甚至无法通过字节序列找到它(但我可以在调试模式下).当我启动调试器时,代码不会立即被反汇编,我应该在那个地方添加一个硬件断点,只有当断点被击中时,IDA才会显示反汇编的代码.看一下这个截图 您会看到我感兴趣的代码行,如果程序没有在调试模式下运行,则该代码行不可见.我不确定,但我认为它类似于在运行时解包代码,这在设计时是不可见的.
无论如何,任何帮助将不胜感激.我想知道为什么代码被隐藏,直到断点命中(它显示为"db 8Bh"等)以及如何在没有调试的情况下找到该地址(如果可能).BTW,这可能是来自不同模块(dll)的代码吗?
谢谢
更新2
我发现debug376是在运行时创建的一个段.这么简单的问题:我怎样才能找到这个细分来自哪里:)
因此,一旦程序运行,您就会在调试器窗口中看到代码,并且一旦它不再运行,您似乎无法在原始Hex-Dump中找到相同的操作码?
什么可以帮助你拍摄内存快照.暂停程序在您感兴趣的指令附近的执行,以确保它们在那里,然后从"调试器"菜单中选择" 获取内存快照 ".然后,IDA会要求您只复制在定义为"loder segments"的段(PE加载器从预定义表创建的段)或"所有段"中找到的数据,这些段目前似乎属于调试程序(包括这可能是由解包例程,解密器等创建的.转到" 所有段 ",在不调试应用程序时,您应该很好地查看内存内容,包括IDA中的调试段(在调试时创建或识别的段).
您可以通过按Shift + F7或单击视图 > 打开子视图中的 " 细分 " 随时查看分段列表.
请记住,您尝试分析的程序可能会选择在下次加载时创建其他位置的段,以使您更难理解正在发生的事情.
更新以匹配您的第二个问题
当程序从某个地方解包数据时,它必须在某处复制内容.Windows是一个虚拟机,当你尝试在不允许的位置执行或编写代码时,它现在真的很讨厌.所以任何程序,只要我们在windows下都会以某种方式
所以现在,你应该通过程序步骤,从默认的入口点(OEP)开始,并查找其中一个函数的调用,可能将内存保护设置为PAGE_EXECUTE或后代.之后可能会出现某种循环解密内存内容,将它们复制到新位置.你可能只想跨过它,取决于你对程序的兴趣是justr将光标放在循环之后(通常是IDA中的粗蓝线),然后从右键单击时出现的菜单中单击"Run to Cursor".汇编代码.
如果失败了,只需尝试在kernel32.dll的VirtualAlloc上放置一个硬件断点,看看在进入return语句时是否有任何兴趣,这样你就可以在Alloc或Protect调用之后执行链带到你的任何地方.
| 归档时间: |
|
| 查看次数: |
5192 次 |
| 最近记录: |