使用一种比较偏僻的方法来实现应用层反调试。这个方法是windows的 访问控制列表(ACL)。应用这个方法可以阻止其他进程打开被保护进程。
调试器在附加一个进程时需要OpenProcess,如果在程序中加入访问控制列表,拒绝某些程序访问,就可以阻止其他进程包括调试器打开游戏进程。
使用访问控制列表保护的基本方法如下:
1. 初始化一个Secrity Identifier安全身份牌,用来后续添加访问列表项。
2. 获取当前进程的安全身份牌
3. 初始化一个访问控制列表。
4. 添加访问列表项,包括阻止的和允许的。
5. 将设置好的访问控制列表添加到本进程。
这样,当前进程就具有访问控制列表了。
效果图:
难点在于windows这套访问控制的API的使用方法。Windows访问控制模型很复杂很头疼一个API会牵出一大把初始化要用的API。相关API和结构体复杂,可是参考文献奇少,MSDN上关于一些访问控制相关API的使用和结构体的描述都含糊不清也没有什么代码实例。只能慢慢摸索和测试。