IDA Pro中的调试部分是什么?

Dav*_*ita 2 reverse-engineering ida disassembly

我尝试用我糟糕的装配技巧来分析一个dll文件,所以请原谅我,如果我无法实现非常微不足道的事情.我的问题是,在调试应用程序时,我发现我只在调试会话中寻找的代码,在我停止调试器后,地址消失了.dll看起来不会被混淆,因为许多代码都是可读的.看一下截图.我正在寻找的代码位于debug376部分的地址07D1EBBF.BTW,我在哪里获得这个debug376部分?

所以我的问题是,如何在不调试的情况下找到此功能?谢谢

UPDATE

好吧,正如我所说,一旦我停止调试器,代码就会消失.我甚至无法通过字节序列找到它(但我可以在调试模式下).当我启动调试器时,代码不会立即被反汇编,我应该在那个地方添加一个硬件断点,只有当断点被击中时,IDA才会显示反汇编的代码.看一下这个截图 您会看到我感兴趣的代码行,如果程序没有在调试模式下运行,则该代码行不可见.我不确定,但我认为它类似于在运行时解包代码,这在设计时是不可见的.

无论如何,任何帮助将不胜感激.我想知道为什么代码被隐藏,直到断点命中(它显示为"db 8Bh"等)以及如何在没有调试的情况下找到该地址(如果可能).BTW,这可能是来自不同模块(dll)的代码吗?

谢谢

更新2

我发现debug376是在运行时创建的一个段.这么简单的问题:我怎样才能找到这个细分来自哪里:)

e01*_*01f 6

因此,一旦程序运行,您就会在调试器窗口中看到代码,并且一旦它不再运行,您似乎无法在原始Hex-Dump中找到相同的操作码?

什么可以帮助你拍摄内存快照.暂停程序在您感兴趣的指令附近的执行,以确保它们在那里,然后从"调试器"菜单中选择" 获取内存快照 ".然后,IDA会要求您只复制在定义为"loder segments"的段(PE加载器从预定义表创建的段)或"所有段"中找到的数据,这些段目前似乎属于调试程序(包括这可能是由解包例程,解密器等创建的.转到" 所有段 ",在不调试应用程序时,您应该很好地查看内存内容,包括IDA中的调试段(在调试时创建或识别的段).

您可以通过按Shift + F7或单击视图 > 打开子视图中的 " 细分 " 随时查看分段列表.

请记住,您尝试分析的程序可能会选择在下次加载时创建其他位置的段,以使您更难理解正在发生的事情.

更新以匹配您的第二个问题

当程序从某个地方解包数据时,它必须在某处复制内容.Windows是一个虚拟机,当你尝试在不允许的位置执行或编写代码时,它现在真的很讨厌.所以任何程序,只要我们在windows下都会以某种方式

  1. 注册一堆新内存或覆盖它已拥有的内存.这通常是通过调用类似malloc的东西来完成的[你的代码看起来好像它可能是一个非常严格的指针密集型语言...... VB可能或者面向对象]它主要归结为从Windows 调用VirtualAllocVirtualAllocEx kernel32.dll,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887(v=vs.85).aspx,了解有关它的调用约定的更多详细信息.
  2. 也许就此设置Windows Exception处理并标记内存范围als executable(如果在调用VirtualAlloc时尚未执行).这可以通过再次从kernel32.dll 调用VirtualProtect来完成.请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa366898(v=vs.85).aspxhttp://msdn.microsoft.com/en-us/library/windows/ desktop/aa366786(v = vs.85).aspx了解更多信息.

所以现在,你应该通过程序步骤,从默认的入口点(OEP)开始,并查找其中一个函数的调用,可能将内存保护设置为PAGE_EXECUTE或后代.之后可能会出现某种循环解密内存内容,将它们复制到新位置.你可能只想跨过它,取决于你对程序的兴趣是justr将光标放在循环之后(通常是IDA中的粗蓝线),然后从右键单击时出现的菜单中单击"Run to Cursor".汇编代码.

如果失败了,只需尝试在kernel32.dll的VirtualAlloc上放置一个硬件断点,看看在进入return语句时是否有任何兴趣,这样你就可以在Alloc或Protect调用之后执行链带到你的任何地方.