在没有windbg的情况下调试Windows服务条目

逆向工程 内核模式 x64dbg 视窗 10
2021-07-02 07:44:47

此处对类似问题回答提到可以修补 Windows 服务的条目以允许附加调试器(在我的情况下为 x64dbg)。谷歌对该主题的搜索都与在源中设置断点有关。

我想知道当只有二进制文件时这是如何完成的。

我正在尝试将 Windows 服务移植到 Linux。我对 windows 操作系统不是很熟悉。虽然我可以逐步执行常规例程,但该服务会探测硬件并设置一些全局值。出于这个原因,我需要确切地知道在初始化期间发送/接收的内容。

我确实尝试过,windbg但发现在没有源代码的情况下很难使用。

1个回答

我会在这里发布我自己的答案,以便将来可以再次找到它。

  1. 使用CFF Explorer打开服务二进制文件。
  2. 找到AddressOfEntryPointOptional Header
  3. 在 中找到.text条目Section Headers
  4. 计算raw_offset = raw_address - virtual_address + AddressOfEntryPoint
  5. 在内置的十六进制编辑器中,导航到raw_address.
  6. 将那里的两个字节更改为EB FE.
  7. 保存并退出。
  8. 修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServicesPipeTimeout0xFFFFFFFF(需要重启)。
  9. 用补丁版本替换服务并启动(其状态应变为“正在启动”)。
  10. x64dbg检查Enable Debug Privilege后,重新启动x64dbg
  11. 附加到服务。
  12. EB FE用它们的原始值替换字节。
  13. 现在可以调试入口点。

其他注意事项 -x64dbg不会停在正在运行的服务的入口点。使用该命令:EntryPoint显示其地址并滚动到视图中。