#1 楼
我要添加我的发现作为答案,因为事实证明在新的调试器中它实际上非常简单(我不相信ollyDBG具有此功能)。X32DBG和X64DBG可以与相同的过程
1)在调试器中打开可执行文件(exe)(取决于exe是32位还是64位,选择正确的调试器)
2)选择“断点”选项卡
3)找到标题为“ dll断点”的部分
4)右键单击此部分,然后在dll文件的名称中选择“添加”类型。例如“ module.dll”
5)现在运行您的进程,加载该dll时调试器将中断
#2 楼
有几个简单的步骤可以做到这一点:如果您有源代码,则可以在代码的开头创建一个非常基本的无穷循环,一旦该dll加载完毕,休息最终将带您进入该循环。此时,您可以手动退出它,然后继续进行调试。
如果没有源代码,则可以在入口点对dll进行修补,其中
0xcc
为断点或0xEB 0xFE
(jmp 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是否具有类似的功能
评论
这是x64dbg exodia的不错功能,该团队不断改进x64dbg
– blabb
17年7月10日在2:50