我有一个64位应用程序,运行时将加载一个dll(插件),我只想调试此插件,我尝试将x64dbg设置为在dll加载时中断,但是有两个问题,该应用程序加载了数百个其他dll,当我确实进入我的dll并尝试逐步解决,但似乎卡在ntdll.dll中,而不是我的兴趣之一。或其他更适合此工作的调试器?我也有IDA专业人士,但我更熟悉olly / x64程序。

#1 楼

我要添加我的发现作为答案,因为事实证明在新的调试器中它实际上非常简单(我不相信ollyDBG具有此功能)。

X32DBG和X64DBG可以与相同的过程

1)在调试器中打开可执行文件(exe)(取决于exe是32位还是64位,选择正确的调试器)

2)选择“断点”选项卡

3)找到标题为“ dll断点”的部分

4)右键单击此部分,然后在dll文件的名称中选择“添加”类型。例如“ module.dll”

5)现在运行您的进程,加载该dll时调试器将中断

评论


这是x64dbg exodia的不错功能,该团队不断改进x64dbg

– blabb
17年7月10日在2:50

#2 楼

有几个简单的步骤可以做到这一点:


如果您有源代码,则可以在代码的开头创建一个非常基本的无穷循环,一旦该dll加载完毕,休息最终将带您进入该循环。此时,您可以手动退出它,然后继续进行调试。
如果没有源代码,则可以在入口点对dll进行修补,其中0xcc为断点或0xEB 0xFEjmp 0x0)为无穷无尽循环。对于断点操作码,您将在执行时触发调试器。在第二种情况下,您可以执行我之前描述的操作。


要进行修补,可以使用任何十六进制编辑器。 CFF Explorer可能非常方便,因为它可以将您指向入口点,并且可以使用内部十六进制编辑器添加补丁。不要忘记在调试器中断后预留原始字节以进行恢复。




评论


感谢您的答复,我是否正确理解我应该在入口点行上添加“ 0xcc”(用该命令替换EP?),这将触发断点?我还应该指出,此文件中包含upx,并且尝试解压缩它没有麻烦(没有PUSHAD和很多不同的PUSH命令)

–拉兹·拉兹曼(Raz Razman)
17年6月18日在23:26

是的,如果您将原始字节替换为0xcc。使用调试器加载您的应用程序,并且一旦dll被加载,bp就会触发。如果确实是UPX,请尝试查找诸如“ jmp reg”之类的间接控制传输并在其上设置BP(在开始调试目标dll之后)。

– PhoeniX
17年6月19日在13:23

#3 楼

调试dll比调试独立的可执行文件要困难得多。因为导出的tbe函数中的任何一个都不会在找到参数之前对其进行调用,然后返回调用约定的tbe参数类型都比引用函数更难。

独立调试它们的一些方法
isto编写一个带有加载库调用的包装exe文件,并在此进行静态分析。

如果您有windbg,也可以以独立方式加载dll。用。 windbg -z foo.dll。这会将dll作为转储文件加载,并将在AddressOfEntryPoint中停止。

如果是32岁,我本可以说将ollydbg与loaddll一起使用并调用导出功能,但由于您说的是64位,所以我不知道x64dbg是否具有类似的功能