一、关键的线程检查
在对抗外挂和木马的方案中,不可能将所有的检查操作放在主线程中,因此,在方案中总有一个扫描线程或者环境检查线程必须保持工作,而它们也就成了外挂和木马的重要攻击目标,外挂和木马只要搞定了它们,就能很方便地在客户端肆虐。
在客户端反木马方案SafeLogin和TEdit中,就经历过很长一段时间线程保护的对抗,通过了解客户端反外挂系统以及壳和Sanlix中的线程保护,现在在对抗线程保护方面,木马的对抗手段相对外挂跑在了前面,这和木马本身的特性关系很大,如果不搞定扫描线程和环境检查线程,那么它们在特征扫描、键盘钩子和窗口行为等检查过程下将无法遁形。
二、外挂和木马常用的攻击手段
外挂和木马对线程的攻击不外乎这样的几种手段:
1)最简单的,篡改线程函数代码,很容易被通过特征检查扫描到;
2)简单阻止线程创建,通过hook线程创建相关函数,也很容易被发现;
3)这种办法相对隐蔽,通过hook ntdll!CsrNewThread函数,替换线程函数地址,这样绕过了壳中通过GetExitCodeThread和ResumeThread的检查方法;
4)更为隐蔽,通过hook kernel32!Sleep, 当线程内调用Sleep的时候,通过篡改参数,让这个Sleep永远进行下去,不过在SafeLogin的根据数据的线程检查方法可以发现它;
5)非常隐蔽,通过hook ntdll!ZwDelayExecution, 并不是让线程永远Sleep下去(Sleep函