游戏保护模块

来源:互联网 发布:买衣服京东好还是淘宝 编辑:程序博客网 时间:2024/06/08 05:28
第八章:定位游戏保护模块
GameSpider
kernel Detective
1.定位ring0驱动级保护模块可以用KD比较游戏启动前后差异。
2.定位ring3可以hook低层接口再栈回塑。(游戏可以自加载同一模块的另一份来用,此时hook无效)
3.保护模块可能hook系统原生dll接口来保护,此时可以比较原生dll文件与加载到内存的映像来定位哪些被HOOK。
为防止被保护模块检测,在分析时可以把除当前线程所有线程挂起。


GameSpider下 cmf ntdll.dll可查看PE文件与映像文件的差异
ntdll.dll中的DbgBreakPoint,DbgUiRemoteBreakin,ZwProtectVirtualMemory常被ret,转移,Hook.分别阻止软中断,远程软中断,修改页面保护属性


GameSpider下ssl查询自加载模块
有三种方法定位其他模块的自加载情况:
1.比较所有模块的导出函数列表及导出函数名称是否一致。比较精确,但游戏会对对关键内存块(代码与导出表信息)设置不允许读,只许执行。
2.比较所有模块的第一个导出函数名称与导出函数个数是否一致。
3.比较所有模块的加载名字和导出表中的名字是否一致。


保护方案:ring3保护方案和ring0保护方案
ring3保护流程:
1.Inline Hook ntdll.dll中与调试相关的接口DbgBreakPoint,DbgUiRemoteBreakin,如果没有代码还原检测,直接还原。
2.Inline Hook ntdll.dll中与页面保护相关的接口ZwProtectVirtualMemory,如果没有代码还原检测,直接还原。
3.设置VEH.可以不用修改代码来hook, 也可补充第二点,对没的读属性的页面进行读时可以被捕获并可以当作恶意访问。
4.自加载模块
ring0保护流程:用KD内核修改标签查看
1.SSDT hook SSDT(System Services Descriptor Table),系统服务描述符表。这个表就是一个把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。
2.SSDT Shadow hook, 对NtUserSendInput进行hook,防止模拟按键。
3.Inlin hook,差异分析哪些地址被修改,再通过1)SSDT查看可以处于哪个函数,2)用windbg中的ln 地址显示 xxxfunction+0xxx

hook从功能上大致可以分为以下几类:
1.内存访问:NtWriteVirtualMemory,NtReadVirtualMemory
2.进程操作:KiAttachProcess,NtOpenPreocess 防止打开或挂接
3.线程操作:PsSuspendThread 防止挂起
4.硬件断点:NtGetContextThread,NtSetContextThread,检测和下硬件断点
5.驱动通信:NtDeviceIoControlFile,IopXxxControlFile,保护ring3与ring0的通信
5.时钟加速:NtQueryPerformanceCounter,防止加速
6.页面属性:NtProtectVirtualMemory
7.对象关闭:NtClose,保护关键对象不被恶意关闭
绕过这些保护:
1.恢复所有函数;2.在游戏加载之前Hook保护点;3.自加载一份内核。


检测方法:
外挂行为有:
1.修改游戏代码,用GameSpider下的cmf比较来定位
2.call游戏函数:非授权访问,栈回塑
3.修改游戏关键数据  Call函数可能最终也是修改某些成员。
0 0
原创粉丝点击