"隐藏" WinAPI调用

时间:2014-12-24 12:02:44

标签: c++ c winapi

我想找到一种方法以某种方式“隐藏”我在代码中使用的WinAPI调用,以使反转更加困难。我意识到这对于熟练的反向器来说并不是一个挑战,但是我的应用程序的安全性在很大程度上依赖于线程,所以,例如,搞乱IAT以摆脱CreateThread会非常不安,考虑到它并不是很难。因此,我正在寻找一种以不太明显的方式调用这些函数的方法(或者通常,通过我的调用重现它们的功能);我能想到的只是GetProcAddress(GetModuleHandle("ntdll.dll"), "NtCreateThreadEx");几乎没有帮助。是否有其他一些更先进的方法可以做到这一点,或者某些资源可以指出我正确的方向?

1 个答案:

答案 0 :(得分:5)

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

你编写了一组像NtCreateThreadEx这样只包含一条ret指令的存根。之后,将应用程序与这些存根链接起来。

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

这里没有单一的固定食谱。您可以将存根直接绕到NT,也可以绕到将跳转到NT或类似的包装器。

重点是,一旦涉及动态生成的代码,就会更难理解普通视野中的代码不是真正使用的代码,生成此代码的人和时间,这是如何产生的代码最终看起来像等等。您也可以使代码生成本身变得棘手。