调试器总是在 ntdll 中暂停

逆向工程 视窗 ollydbg 调试 x86
2021-06-26 13:36:29

我是逆向工程的初学者,所以任何帮助将不胜感激。如果已经有人问过类似的问题或者这是一个愚蠢的问题,我深表歉意,但我找不到任何东西。

我曾尝试使用 x32dbg 和 ollydbg

我正在尝试解密从游戏中发出的数据包。我首先找到了 Winsock 的 SEND 函数。我在游戏内置的聊天功能中发送消息以发送数据包,然后向后追踪试图找到数据包未加密的点。我发现自己在 ntdll.dll 导入中。

我尝试在 ntdll.dll 中设置断点,但调试器会在我发送数据包之前立即在断点处暂停。我尝试按“运行”,但它会立即再次暂停。我不确定这是否意味着 ntdll.dll 一直被使用,或者它是否有反调试器..或者我只是在做完全错误的事情。

有没有办法让我只中断 SEND 数据包?对于这种情况的任何建议将不胜感激。

1个回答

通过找到 Winsock SEND 函数并在那里中断,您正确地开始了。但是,要追溯到数据包未加密的点,需要比 ntdll.dll 更进一步地进行追溯。

调试器在 RtlEnterCriticalSection 上暂停,因为该函数有很多用途,包括与发送数据包无关的用途,因此它被非常频繁地调用。

如果您检查堆栈帧,而不是从 SEND 单步执行,您可能会获得更多成功 - [EBP+4] 处的值是调用函数的返回地址,而 [EBP] 是 EBP 的前一个值。如果您检查 EBP 的先前值,我们称其为 EBP',那么 [EBP'+4] 是调用函数的返回地址,而 [EBP'] 是 EBP 的先前值。如果您遵循链条,您将最终进入该计划。

进入程序后,您可以考虑在数据包在发送之前存储的内存位置周围放置断点。当您看到它们被访问时,您可以看到加密是如何执行的。