| 
 | 
	
 
目前的3D游戏都离不开D3D的渲染.  也可以说我们玩的3D游戏的画面都是依靠D3D来呈现的.  具体什么是D3D你可以去百度一下.   
很多人觉得TC的API能力不足 ,  其实不然. 很多功能无法实现只是你对API的了解不够深.  不多说了 进入正题 
 
以某游戏举例.  
 
用OD附加游戏后直接转到D3D模块的领空 :::::::如下图 
 
 
到了D3D的领空之后按ctrl+A 分析一下代码... 这个很重要, 有时候在其他模块的领空会出现一些乱码.这样就无法分析到是哪里调用了这个函数. 
 
接下来在内存窗口看看OD分析出来的已知函数 .我们主要看D3D的函数. 如下图 
 
 
如果跟我的不一样可以在这个图片中的区域右键 设置成长整形的地址形式显示. 
下面我们就来百度一下D3D的主要绘图与渲染函数 
下面我使用D3DXPlaneFromPoints 函数来继续本篇文章. 
 
 
 
在函数地址上右键  如上图     随后我们就来到了这个函数的跳转地址了.  我们在这个地方下断点.  看看是谁调用了这个函数.  
游戏断下后按ALT+K查看堆栈窗口内的调用地方 也可以看OD的右下角的堆栈窗口  如下图 
 
 
然后我们双击这些调用的地址挨个看看特征  当然你有点汇编基础就可以分析了.  我们主要看的是主模块的领空调用 也就是游戏的进程名字的  Client模块.  
 
 
很高兴, 第一层的调用就是容易分析的, 基本么有汇编基础的人也能看明白吧. 如上图 
 
我们找到了这个要做什么呢?  当然是干掉它了. 如何干掉呢?  ----------------修改它的汇编代码! . 
 
看见了这个函数地址后面的机器码了吗. 就是修改它为你想要的 . 你使用nop肯定是不行的, 因为这样的函数有很多参数的, 要有个堆栈的平衡.所以我们要跟踪这个函数的返回    
 
下断点 一路F8跟着代码走. 来到了这个函数的返回处. 如下图 
 
 
 
这个蓝色的   RUTN 10  就是这个函数释放被压入堆栈参数的地方.  如上图 
我们知道了返回值之后就开始在主模块领空的进口处修改一下吧 按键盘的减号回到原来的地方,或者使用原来的办法自己找回去也可以 .  
 
 
将这里直接返回 字节长度不够使用nop来填充. 这样不会造成后面代码处的地址错误. 
 
好了, 来到游戏看看什么效果, 我来发一个图对比一下一目了然. 下面左边的图是正常的游戏画面, 右面的嘛,你懂的 ~~~~ 
 
  
这画面不重要 最重要的是你打开任务管理器对比一下CPU与内存的使用率就明白了. 
 
下面用TC写代码  顺便说明一下这个字节写入其实就是这个函数地址的内存地址的 值  如果你看不明白代码的原理就仔细看看上面图中的地址与数值吧. 你自然会找到代码为何这样写的原理了.   
不会动脑的程序员不是好医生    代码如下以上代码我又新加入了一个D3DAPI的修改.  
 
以上文章只是抛砖引玉, 希望新人们可以对TC的能力有所新的认知 .  
 
 
 
 |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册  
 
x
 
 
评分
- 
查看全部评分
 
 
 
 
 
 |