c++ - "Hiding"WinAPI调用

标签 c++ c winapi

我想找到一种方法来“隐藏”我在代码中使用的 WinAPI 调用,以使逆向变得更加困难。我意识到这对于熟练的逆向者来说不是什么挑战,但是我的应用程序的安全性严重依赖于线程,因此,例如,干扰 IAT 来摆脱 CreateThread 将是相当灾难性的,考虑到这并不很难做到。因此,我正在寻找一种以不太明显的方式调用这些函数的方法(或者一般来说,通过我的调用重现它们的功能);我能想到的就是GetProcAddress(GetModuleHandle("ntdll.dll"), "NtCreateThreadEx");这几乎没有帮助。是否有其他更高级的方法可以做到这一点,或者可能有一些资源可以为我指明正确的方向?

最佳答案

我建议您在 Win32 调用周围编写薄包装器。包装器不应该是静态的,它们应该在程序启动时生成。

您编写了一组 stub ,例如仅包含 ret 指令的 NtCreateThreadEx。之后,将您的应用程序与这些 stub 链接起来。

在启动时,您生成的代码应该与您在问题中提供的代码非常相似。您分配一个堆页,将生成的代码放在那里,设置执行位并启动它。此代码应该使用真实地址修补您的 stub 。

这里没有单一的固定配方。您可以将 stub 绕道直接到 NT,或者到将跳转到 NT 或类似内容的包装器。

重点是,一旦涉及到动态生成的代码,就很难理解眼前的代码并不是真正会用到的代码,这个代码是谁、什么时候生成的,如何生成的代码最终看起来像这样,等等。您还可以使代码生成本身变得棘手。

关于c++ - "Hiding"WinAPI调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27636639/

相关文章:

c++ - PThread - 尽管调用了 pthread_join,但线程提前退出

C++ 为什么在处理类时应该使用 get 和 set 函数

将结构数组复制到共享内存中

c - EFM32 Giant Gecko,中断程序不工作

c++ - 是否应处置 CreateEvent 返回的 HANDLE?

c++ - 全局变量c/c++之间的冲突

c++ - 在 g++ 4.8.1 中使用枚举启用_if

c - 如何在不同的 .c 文件之间共享变量?

winapi - 检测在 ListView 内单击并显示上下文菜单

c++ - 如何在 C++ 中调试 WM_PAINT 中的代码?