TC官方合作论坛

标题: 游戏不支持后台?自己写插件!游戏进程注入与DX后台 [打印本页]

作者: 冷月无痕    时间: 2012-2-26 22:45
标题: 游戏不支持后台?自己写插件!游戏进程注入与DX后台
这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在内存中映射来映射去,很容易出问题,这种情况尤其在游戏多开的时候

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



作者: ltsi001    时间: 2012-2-26 23:01
感谢分享,学习学习
作者: stxuhong    时间: 2012-2-26 23:36
好东西呀,前辈
作者: cylhb    时间: 2012-2-27 00:07
好是好,看不懂,太深了。。。支持技术文章
作者: 313442275    时间: 2012-3-21 00:22
哈默跳井................................................................................
作者: whoyeyang    时间: 2012-3-28 11:57
支持奉献
作者: appleboos    时间: 2012-3-31 07:48
NP才是关键!
作者: appleboos    时间: 2012-4-2 16:05
原理是没问题,但是Hook被90%的游戏和谐了!
作者: tcvip2012    时间: 2012-4-13 14:06
:|-)完全看不懂
作者: 龙归_莫言    时间: 2012-4-28 06:37
表示看不懂
作者: moguangwu    时间: 2012-5-1 23:12
表示看不懂
作者: qwe527x    时间: 2012-5-2 11:10
前段时间 写过几次这种后台插件 但是被和谐了 来支持下你吧 希望你能做出更好的教程~
作者: 1176018799    时间: 2012-5-19 18:39
好是好,看不懂,太深了。。。支持技术文章
作者: c724211922    时间: 2012-6-21 17:38
着个 现在 不懂
作者: feng123144    时间: 2012-8-26 18:34
看到鸟文就蛋疼.
作者: a344902687    时间: 2012-8-26 20:40
谢谢分享,你这个我学习到了很多
作者: myismaln    时间: 2012-9-16 20:00
理论懂了,不知如何实现
作者: jxwwdt    时间: 2012-11-19 02:55
技术贴应该全面
作者: 307443877    时间: 2012-11-29 15:49

比较高深 但是还是不太了解,希望学习能看懂
作者: 1357501545    时间: 2012-12-26 11:25
眼下看起来还是象天书,不过多少增加了一点印象。
作者: 雨碎江南    时间: 2012-12-30 04:58
迷糊中,内存离我太遥远了
作者: sovisi    时间: 2013-3-3 22:18
收藏待用
作者: 高高    时间: 2013-6-23 15:53
学习学习
作者: nicotineearl    时间: 2013-12-20 00:37
找了 好久,高人啊




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1