常用手段
- 阶段一
- 防守:检测JMP(E9)、检测跳转范围。
- 攻击:想方设法绕开。
- 阶段二
- 防守:线程全代码校验/CRC校验。
- 攻击:修改检测代码、挂起检测线程。
- 阶段三
- A->B->C->D->被 HOOK 函数
- 防守:相关API进行全代码校验,多个线程互相检测,并检测线程是否活动。
- 攻击:使用瞬时(临时)钩子/硬件钩子。
解决方案
- 对 VirtualProtect 进行 HOOK,只有当调用地址为 A 时,对 ExitProcess 进行挂钩,并修正返回结果,改变执行流程。
- 在 ExitProcess 的 HOOK 处理函数中判断,只有当调用地址为 B 的时候,才将 ExitProcess 函数进行失效,然后卸载 HOOK。