您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 指针到文本 >

MFC怎么获取GalGame(美少女游戏)的窗口文本

发布时间:2019-07-29 23:31 来源:未知 编辑:admin

  已经通过FinWindow获得游戏窗口的句柄,调用GetWindowText根本获取不到文本游戏绝对是DX实现的,游戏自带DX安装程序。但是DX编程我一点不懂啊?spy++能查看到类名和句柄等属性。游戏肯...

  已经通过FinWindow获得游戏窗口的句柄,调用GetWindowText根本获取不到文本

  游戏绝对是DX实现的,游戏自带DX安装程序。但是DX编程我一点不懂啊?spy++能查看到类名和句柄等属性。游戏肯定不是MFC写的我当然知道,但是文本总要从内存出来吧。能用钩子从内存取吗?展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部这个方法出自我大概两年前的一个项目,现在经整理后贴出来和大家分享一下,利用该方法可以在一般的directx游戏里面绘制文本甚至图形对象.

  其实思路上非常简单,大致是这样的:要在directx中绘制文字和各种图形对象,只要获得一个类型为LPDIRECT3DDEVICE9的设备对象指针.怎样获得这个指针呢?我的方法是首先hook掉Direct3DCreate9以获得类型为LPDIRECT3D9的Direct3D对象的接口指针,这个Direct3D对象有一个成员函数为 IDirect3D9::CreateDevice,设备对象指针就是在这个函数里面创建的.所以,只要根据Direct3D对象接口指针找到Direct3D对象的虚函数表,再根据虚函数表确定IDirect3D9::CreateDevice的内存地址,就可以hook这个函数,从而获得类型为LPDIRECT3DDEVICE9的设备对象指针,然后就可以随意绘制文字或者图形了.

  还有一个要hook的地方,即IDirect3DDevice9::Present,这个函数用于交换当前后备缓存区,刷新窗口.要使得我们自己绘制的东西一直显示在屏幕上,比较好的处理方法是hook掉IDirect3DDevice9::Present,在程序真正调用这个函数前插入我们自己的绘制代码.只要根据设备对象指针找到设备对象的虚函数表,根据虚函数表找到IDirect3DDevice9::Present在内存中的地址就可以hook了.下面是对hook directx的详细说明.

  首先是找到Direct3DCreate9的内存地址,然后把入口的5个字节修改为跳转指令.

  这样,在程序运行到Direct3DCreate9时就会跳转到hookedDirect3DCreate9,在这个函数中,首先是还原Direct3DCreate9入口的5个字节,然后调用线,如果函数调用成功,就会返回类型为LPDIRECT3D9的Direct3D对象指针,这正是我们所需要的,得到这个指针后,就可以根据Direct3D对象的虚函数表确定IDirect3D9::CreateDevice的内存地址,然后就可以把这个函数入口的5个字节修改成为跳转指令,跳到我们自己的函数中去. 有个地方值得注意的是,在directx的虚函数中把this指针作为第一个形参入栈了.例如说sdk中IDirect3D9::CreateDevice的函数说明是这样:

  而为了程序跳转到我们的代码执行完后保持栈的平衡,hookedDirect3DCreat9函数声明应该是这样:

  在hookedCreateDevice中,首先还原原来的CreateDevice函数入口的5个字节,然后调用原来的函数, IDirect3D9::CreateDevice的最后一个参数是一个二重指针,如果函数调用成功,这个二重指针所指向的指针就是我们所需要的设备对象指针,由此找到设备对象的虚函数表,然后确定IDirect3DDevice9::Present的内存地址,然后又可以改掉入口的5个字节为跳转指令. hookedCreateDevice的关键代码如下:

  展开全部据我所知游戏文本显示方式和普通窗口不同的.而且另一方面游戏也没有用MFC的...

  一般游戏的话文本都是用DX画到贴图或者屏幕上去的,和一般窗口完全不同.至于GALGAME,我很少玩,没研究过...如果这游戏是用DX实现的话,用GetWindowText肯定获取不到文本...游戏绝对是DX实现的,游戏自带DX安装程序,用Hook能钩到吧。DX编程我一点不懂啊?ITH(aglgame文本提取器)能实时提取。而且也是用c++写的

  2 .是CD3DFONT方法,该方法完全使用了D3D的内建方法来渲染文本,效率比1要高很多具体函数还是DRAWTEXT(XXX)

  基本上就是这几种,你说的GETWINDOWS TEXT的话,只能是通过句柄来获取当前窗口的标题栏啊等跟窗口有关并且由窗口衍生控件的相关文本,窗口里面的游戏文本是由DX创造出来的环境,那你要获取文本就要从内存中找,比如找明文:DrawText这个方法,然后向后查找相关的字符串变量,然后获取该变量的地址,把该变量存的字符串读出来,就像FPE啊游戏修改大师这样的软件所实现的功能,,或者你用什么其他的方法,找到这个实现的位置,具体的我也说不出来是怎么个过程,但是你要获取DX渲染出来的文字实体,只得到窗口句柄我觉得是无用的..

  游戏可能没有通过windows的api函数来显示文字,可以hook住dx的相关文本函数看看,如果不是那可能也没用dx的文字函数,可能是自己实现的文本显示函数,需要跟踪调试找到这个函数。

  2011-09-16展开全部你利用vc自带的spy++工具查找一下,如果能够显示文字的话,那就是你的方法不对了

http://lemadras.com/zhizhendaowenben/353.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有