【随笔】HOOK D3D9 实现透视思路

释放双眼,带上耳机,听听看~!
看了挺多资料的 感谢各个网友回答我之前 “十万个为什么”的问题才悟懂了一些皮毛
准备HOOK之前需要知道HOOK什么,比如 HOOK D3D9.dll 下的DrawIndexedPrimitive
第一步
我的环境vs2017  创建DLL 在源文件dllmain.cpp下面写代码
获取模块地址
用到API LoadLibraryA   //获取D3D.dll模块句柄   (在下文代码中)我注释哪行其实就已经得到了D3D的地址了不知道为什么不生效 所以换了一个方法,需要自己找到地址
怎么找地址? 自己创建一个D3D环境 因为我不会D3D编程 我就在Directx给的实例上面下载的
打开工程之后我在这里添加了一句 g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP, 0, 0, 4, 0, 4) 并下了个断点
右键 查看返汇编
地址出来了 是   6647b6b1
在OD里面就很清楚了
现在找D3D9D的真实地址 找一个使用了D3D的程序  我用了PCHunter64工具查看到了d3d9.dll 的基地址 66450000
66450000 - 6647B6B1=2B6B1   (这里是十六进制计算的)
下面的代码的0x2B6B1 就是这样子得来的
我注释哪行其实就已经得到了D3D的地址了不知道为什么不生效
(windows7 地址都一样)
第二步

jmp=addr+5  我到od里面看了一下应该是HOOK之后跳转到后面的push ecx吧

VirtualProtect((LPVOID)addr, 5, PAGE_EXECUTE_READWRITE, &oldProtect)
一个API VirtualProtect  让代码段可读可写 不懂的话网上找找资料吧 因为我也不懂!!!

内联汇编 直接做 “粘贴工程师” 吧  都一样的

第三步

//定制函数原型  这个内联汇编我也是抄的(虽然说是抄但内联汇编OD跟进去就知道怎么回事了)

第四步

//定制自己的函数

要hook DrawIndexeDprimitve   就要弄一个假的  DrawIndexeDprimitve  函数原型网上很多的 大括号{}里面的内容就是我们要实现的功能 这里面的知识点需要会一些D3D 因为我不会所以还是做 “粘贴工程师”

效果

人已赞赏
随笔

奥斯维辛没有新闻,互联网也没有什么996。

2019-4-4 11:26:04

随笔

【随笔】火狐浏览器插件无法安装提示损坏解决方案

2019-5-5 14:29:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索