|
目前的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
评分
-
查看全部评分
|