【问题标题】:Does hooking GetProcAddress lead to stack corruption?挂钩 GetProcAddress 会导致堆栈损坏吗?
【发布时间】:2014-08-13 12:09:53
【问题描述】:

我正在对这个程序进行逆向工程。在开始之前,我想明确说明我合法拥有该程序,并且不打算为了重新分发而“破解”它。

所述程序使用了很多“书上”的反调试技术。我决定挂钩 GetProcAddress 并记录所有 API,然后确定那些可能用于反调试的 API。使用本教程http://www.codeproject.com/Articles/30140/API-Hooking-with-MS-Detours 中的代码后,程序最终会因堆栈损坏而崩溃。我用谷歌搜索,发现其他人在挂钩 GetProcAddress https://easyhook.codeplex.com/discussions/55039时也会出现堆栈损坏@

我的问题是挂钩 GetProcAddress 是否会导致堆栈损坏或程序的反调试技术检测到干预并自行导致堆栈损坏?

【问题讨论】:

  • 您正在调查哪个程序?许多其他人已经成功上钩GetProcAddress。

标签: c windows winapi hook getprocaddress


【解决方案1】:

通常,挂钩 GetProcAddress 不会导致堆栈损坏。我已经编写了几个工具,这些工具一直都在做这件事,而且这些工具已经在从 Windows 95 到 Windows 8.1 的所有 Windows 版本上工作了多年。

所以这可能是他们明确地做了一些惹恼你的事情;)

【讨论】:

  • 除了反钩子/反调试之外,原因可能只是一个不正确的钩子——错误的调用约定、错误的参数类型、错误的参数数量等。
  • 安德鲁是正确的。我对自定义 GetProcAddress 函数的声明有一个错误的声明。我已经将它声明为 FARPROC MyFunction,我必须使用的是 FARPROC WINAPI MyFunction。这里奇怪的是 WINAPI 确实意味着 __stdcall,而 FARPROC 是一个函数指针的 typedef,它也有 WINAPI * 所以本质上它是双 __stdcall。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2011-11-26
  • 2016-03-11
相关资源
最近更新 更多