我正在分析的这个程序充满了反调试。如果在我启动应用程序之前加载了大多数调试器,它甚至不会运行。
我尝试使用 IDA 对其进行静态分析,但它是用 OOP 语言编写的,并且有很多对寄存器内部指针的调用;所以我一直被困在挖掘中。
所以,我想知道是否可以用调用上方的代码修补 .exe 以记录寄存器值,也许还有指令行。然后我可以看到正在调用哪些函数/方法。
我在 .exe 的末尾添加了一堆零字节,它运行了,所以它似乎没有任何校验和验证。
这可能吗?
我正在分析的这个程序充满了反调试。如果在我启动应用程序之前加载了大多数调试器,它甚至不会运行。
我尝试使用 IDA 对其进行静态分析,但它是用 OOP 语言编写的,并且有很多对寄存器内部指针的调用;所以我一直被困在挖掘中。
所以,我想知道是否可以用调用上方的代码修补 .exe 以记录寄存器值,也许还有指令行。然后我可以看到正在调用哪些函数/方法。
我在 .exe 的末尾添加了一堆零字节,它运行了,所以它似乎没有任何校验和验证。
这可能吗?
我认为 CRC 例程在代码内部,对于代码的不同部分可能不止一个。在整个文件的末尾不需要校验和。例如,其可能的字节数总和并将其与寄存器内的值进行比较。您是在调试 win32/64 还是 android 文件?
例如,我使用此命令显示写入文件的所有文本的时间旅行位置,然后我可以单击生成的超链接以在该文本写入文件时转到精确的寄存器/线程/内存状态
bp kernel32!WriteFile "!position;.printf \"%mu\",@rdx;g"
前进使用g
命令,后退g-
,向前单t
步指令和向后单步指令t-
这取决于您要实现的目标:
对于第一种情况,我通常会尝试在挂起进程后使用附加的非侵入式调试器。如果这不起作用,我会在暂停进程时SysInternals
Process Explorer
或WinDbg
之后转储整个进程。我使用的Ghidra
确实分析了整个转储。我注意到IDA
在分析这些转储时存在问题(有时未检测到特殊部分),但您可以将它们组合起来。这将使您能够分析代码。如果代码是自我修改的,你应该使用第二种方法。
对于第二种情况(也是最后的手段),我使用经过特殊修改的 VM 以非侵入式模式远程调试应用程序。VM 是用自定义的 rootkit 制作的,可以隐藏您想要的进程(特别是调试器),这样您就可以在内核模式下调试整个系统而不会被检测到。