Instrumentation callbacks 是 Windows 中一个相当有趣且未文档化的部分。 本仓库中的所有代码均基于 MIT 许可证发布。 本仓库使用 Google 风格的 C++ 间距。
欢迎提交 PR,如果你发现任何问题、错误,或认为某个特定功能应该被添加。
Instrumentation callbacks 允许你处理由设置了回调的进程分发的所有系统调用(以及异常!)。
当然,每个系统调用都会被捕获,因此在回调执行期间,通常不应再发出任何系统调用,除非你希望无限递归。 这会极大地限制你在回调内能做的事情,或者至少带来一些设计上的挑战,但在下一段中,你会看到一个相当优雅的解决方案。 这个方案并非完美,因为攻击者可能有意设置变量来禁用回调,但对于分析目的来说,它近乎完美。
解决此问题的一种方法是设置一个开启/关闭回调分析能力的标志(true/false),本质上是在已有系统调用被处理时,允许所有系统调用通过。 然而,这会让大多数系统调用渗透过去。 而本仓库通过设置一个 TLS 相关的变量来解决回调内无法发出系统调用的问题,确保我们能处理来自所有线程的所有系统调用,同时自身也能调用它们。我们唯一会遗漏的系统调用是我们在回调内部发出的那些,这在大多数分析软件的场景中,我们可以忽略。
Instrumentation callbacks 有许多可能的用途,其中之一可用于反作弊目的:你可以分析来自进程的系统调用,并判断它们是否来自非法的地址空间,或被用于恶意目的,而无需用字节补丁和钩子填充系统 DLL。 你还可以利用它们在内进程中获得代码执行权:如果你能分配并写入内存,然后设置进程信息,就能通过让执行系统调用的线程调用你自己的回调来劫持它。 当然,我不认可使用本仓库或我其他仓库中的任何代码来开发作弊/恶意软件。 你用它做什么是你自己的责任。