单步执行程序以找出正在调用哪些子程序?

逆向工程 艾达 ollydbg dll
2021-06-12 19:43:06

我已经将一个程序加载到 IDA + Hex-Rays 中,并将其反编译为一些类似 C 的伪代码。现在,我试图弄清楚,对于我在程序中执行的单个操作,正在运行哪些代码。我感兴趣的代码来自程序使用的 DLL。

如何跟踪诸如“我单击此按钮,这是与其对应的代码”之类的内容?

2个回答

您真正需要的是调试器。适用于 Linux 的 GDB 或适用于 Windows PE 的 OllyDbg。到达您要单击程序上的按钮的位置,然后从那里进行跟踪。您应该能够看到“单击按钮”后立即执行的所有指令。然后,您可以识别正在执行的代码并返回 IDA 在那里查看它。

您可以使用 OllyDbg 或 Immunity Debugger 加载加载 DLL 的可执行文件。

然后,您可以通过View->Executable Modules或使用键盘快捷键Alt+E(至少在 Immunity Debugger 上)检查导入的模块

然后,选择您导入的 DLL 并右键单击它。选择“查看名称”按 Ctrl+N

系统将提示您一个子菜单,您可以在其中选择您感兴趣的 DLL 的导出。选择导出并按F2在其上设置软件断点或右键单击并选择Toggle Breakpoint

当您运行您的程序时,希望您的 DLL 导入将被调用并且您的断点将被命中,从而暂停执行。然后,您可以使用View->Call Stack查看您的调用堆栈,或者您可以使用快捷键Alt+K您可能会对返回感兴趣,因为它表示您的 DLL 导入将返回到的地址。请注意,最近调用的函数将位于堆栈顶部。

然后,您可以使用 IDA 在反汇编中搜索该地址。在图形视图中,按g并粘贴您从调试器调用堆栈返回列复制的地址

狩猎快乐!:)