注入游戏后保证稳定性的总结

2 篇文章 0 订阅
1 篇文章 0 订阅
最近对一个游戏进行了注入并HookD3D的操作,期间程序一度出现一些游戏不稳定的问题,现在总结一下。
 
 
注入方式
1.注入方式内存方式适用于win7x64非sp1外的版本 (打开进程>申请内存>写入DLL数据>开启远程线程指向内存地址)。
2.线程注入部分系统存在不兼容(未确定) 。


一.初始化流程
由两个DLL组成,可理解为中转。
1.中转DLL
2.功能DLL

注入采用vs2010编写win32的动态链接库(只导入kernel32),然后由此DLL从共享内存中获取目录位置,并进行第二个DLL(功能DLL)的载入后并调用初始化函数。

中转的原因如下:
注入后使用LoadLibrary载入时功能DLL,会先将此DLL有的导入函数的相关DLL进行检查并加载,如果系统缺少功能DLL所需的一些DLL,则会造成功能DLL载入失败,返回0,但是如果我们直接将功能DLL注入并调用,如果此时缺少部分系统DLL,则会100%造成被注入程序崩溃。


二.初始化注意事项
1.初始化函数开启一个线程来执行初始化,因为某些函数可能会因为注入方式造成程序主线程卡死。
2.初始化线程不要自行结束,应在返回前使用SuspendThread对自身进行挂起或使用Sleep进行长期的休眠,以免释放线程栈造成的一系列异常。
3.一定要对初始化的每一步做好判断,有一步失败就应停止后续操作参考第2步终止,不建议再次尝试。
4.因为初始化是单独线程,而Hook的执行函数是属于主线程的,所以可能出现Hook完成并已经开始工作,但是初始化缺还未完成导致的错误,这个不要疏忽,应在Hook的函数中增加初始化成功的判断。


三.其他注意事项
1.一定不要注入后在进程中搜索自身,会在xp下产生随机的崩溃问题(即使限制在0x00400000-0x00FFFFFF范围)(win7下完全不存在此崩溃问题)。
2.最好使用标准win32dll。
3.不应使用需要每次Hook函数后需要恢复的Hook方式,如在操作函数入口时有其他线程正在读写此函数,将会发生不可预知的错误。
4.发布前一定要检查DLL导入函数,是否使用到了其他DLL。


四.计时
1.不要使用线程死循环Sleep进行计时,会导致不稳定的问题,以及主程序退出时可能发生错误。
2.应使用CreateTimerQueueTimer等函数进行计时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值