TC官方合作论坛

 找回密码
 立即注册
查看: 12367|回复: 23

[其他] 游戏不支持后台?自己写插件!游戏进程注入与DX后台

[复制链接]
发表于 2012-2-26 22:45:37 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这2个要一起讲,因为真正的dx后台(dx转gdi除外),是需要注入游戏进程的
注入游戏进程有多种方式,输入法注入,网络注入,注册表注入都先不说了,先说一下常用的
首先,Hook,所使用的API setwindowshookex,百度或者MSDN,最好查MSDN,比较详细
随便用个消息注入进程,你就可以在游戏当中做任何事情了,其中有个参数作为回调函数传入,也就是当收到消息的时候首先做我们回调函数中的事情,函数原型如下:
LRESULT CALLBACK HookProc   
(   
int nCode,   
WPARAM wParam,   
LPARAM lParam   
);   
HookProc是回调函数名。   
nCode参数是Hook代码,Hook子程使用这个参数来确定任务。这个参数的值依赖于Hook类型,每一种Hook都有自己的Hook代码特征字符集。   
wParam和lParam参数的值依赖于Hook代码,但是它们的典型值是包含了关于发送或者***消息的信息

另外一种常用方法就是远程线程了,使用API createremotethread
该函数的原型如下:
HANDLE CreateRemoteThread(
     HANDLE hProcess,
     LPSECURITY_ATTRIBUTES lpThreadAttributes,
     SIZE_T dwStackSize,
     LPTHREAD_START_ROUTINE lpStartAddress,
     LPVOID lpParameter,
     DWORD dwCreationFlags,
     LPDWORD lpThreadId
);

参数说明:
hProcess:目标进程的句柄
lpThreadAttributes:指向线程的安全描述结构体的指针,一般设置为NULL,表示使用默认的安全级别
dwStackSize:线程堆栈大小,一般设置为0,表示使用默认的大小,一般为1M
lpStartAddress:线程函数的地址
lpParameter:线程参数
dwCreationFlags:线程的创建方式
                  CREATE_SUSPENDED 线程以挂起方式创建
lpThreadId:输出参数,记录创建的远程线程的ID


好了,注入先介绍这二种,现在我们已经进入游戏进程当中了,然后我们看下真正感兴趣的DX的后台
其实原理很简单,拦截dx接口函数,就是让dx的函数在执行之前或之后,首先执行我们的代码,比如你要读写屏,肯定要在其之前Hook,比如你要发送键盘鼠标消息,那就要在DInput的获取数据接口执行之后,替换其数据,让其传出我们的数据,就可以达到后台DX键盘或者鼠标了
只是现在DX相关文档有点少,我下面罗列出几个关键的接口,只要Hook了下面的几个接口,那么后台鼠标键盘,后台抓图,写屏,降cpu等等,都不是问题了
首先我们来看DDraw,你要知道D3d是对DDraw的继承,因此我们先来看DDraw,对于2D游戏来说,我们Hook哪里才能得到图像呢?当然是blt,和fastblt,通常fastblt得到的往往是构成屏幕的一部分图片,比如角色,背景等等单一图片,因此从blt中可以得到内存画面表面,也就能完全抓到后台图像了,顺便说一下,主表面就是显示器表面,有人曾经说dx直接写屏,因此不可能后台,这有一定的道理,因为如果你Hook了主表面,那么游戏被什么挡住,也就会抓到什么图,因此要Hook到内存表面才行,在其显示之前,就将其读出!
然后我们再来看D3d,这个可以通过Hook present来读取,当然还可以降CPU,写屏等等,和DDraw同理
最后是对DInput的hook,鼠标和键盘以及手柄都是通过这个来获取数据的,hook目标:GetDeviceData,GetDeviceState,一个缓冲模式,一个立即模式,键盘,鼠标,手柄数值统统按照常量,定义在DX SDK头文件中!

所有这些必须在目标进程当中进行,否则,就不能截获到正确的数据

这种做法是有一些弊端的,首先修改游戏内存是侵犯著作法的,呵呵,我也是听别人说的,您可能心里想,这谁管那么多?呵呵,那么我们说点更实际的,NP有的是不能Hook的,过NP也有很多手段,比如恢复API,暴力破解等等!
看过《编程高手箴言》的,可能些印象,dll在内存中映射来映射去,很容易出问题,这种情况尤其在游戏多开的时候

可能还有一部分人不太明白,而高手一看就知道该怎么做了,希望能够抛砖引玉,大家多多讨论


回复

使用道具 举报

发表于 2012-2-26 23:01:07 | 显示全部楼层
感谢分享,学习学习
回复 支持 反对

使用道具 举报

发表于 2012-2-26 23:36:43 | 显示全部楼层
好东西呀,前辈
回复 支持 反对

使用道具 举报

发表于 2012-2-27 00:07:49 | 显示全部楼层
好是好,看不懂,太深了。。。支持技术文章
回复 支持 反对

使用道具 举报

发表于 2012-3-21 00:22:27 | 显示全部楼层
哈默跳井................................................................................
回复 支持 反对

使用道具 举报

发表于 2012-3-28 11:57:48 | 显示全部楼层
支持奉献
回复 支持 反对

使用道具 举报

发表于 2012-3-31 07:48:18 | 显示全部楼层
NP才是关键!
回复 支持 反对

使用道具 举报

发表于 2012-4-2 16:05:46 | 显示全部楼层
原理是没问题,但是Hook被90%的游戏和谐了!
回复 支持 反对

使用道具 举报

发表于 2012-4-13 14:06:42 | 显示全部楼层
:|-)完全看不懂
回复 支持 反对

使用道具 举报

发表于 2012-4-28 06:37:44 | 显示全部楼层
表示看不懂
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-5 22:00 , Processed in 0.046943 second(s), 22 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表