吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 21077|回复: 38
收起左侧

[游戏安全] 十万个为什么小子 HOOK D3D9 实现透视思路

  [复制链接]
一身白 发表于 2019-4-15 19:52
看了挺多资料的 感谢各个网友回答我之前 “十万个为什么”的问题才悟懂了一些皮毛

补图了  整理了一下  我没想到有外链这个东西!!   帖子可能有点混乱 不懂的话 私信我吧

准备HOOK之前需要知道HOOK什么,比如 HOOK D3D9.dll 下的DrawIndexedPrimitive

第一步
我的环境vs2017  创建DLL 在源文件dllmain.cpp下面写代码

获取模块地址


//获取模块地址 原函数地址
ULONG_PTR onHookInit()
{

    HMODULE hModule = LoadLibraryA("D3D9.dll");  //加载模块 获得模块指针
    ULONG_PTR addr = (ULONG_PTR)hModule;
        //addr = (ULONG_PTR) GetProcAddress(hModule, "Direct3DCreate9");
    return addr+0x2B6B1;

}
用到API LoadLibraryA   //获取D3D.dll模块句柄   (在下文代码中)我注释哪行其实就已经得到了D3D的地址了不知道为什么不生效 所以换了一个方法,需要自己找到地址

怎么找地址? 自己创建一个D3D环境 因为我不会D3D编程 我就在Directx给的实例上面下载的
786209_GHYX269QR9CTH3D.jpg

打开工程之后我在这里添加了一句 g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP, 0, 0, 4, 0, 4) 并下了个断点
786209_A9JWQEHBPBW35HX.jpg

右键 查看返汇编
地址出来了 是   6647b6b1
23-03-19-786209_2J3B3P2K2MG7RGD.jpg

在OD里面就很清楚了
786209_V3VV2DPNW6TE263.jpg

现在找D3D9D的真实地址 找一个使用了D3D的程序  我用了PCHunter64工具查看到了d3d9.dll 的基地址 66450000
786209_F77BYXFAABX8MBW.jpg

66450000 - 6647B6B1=2B6B1   (这里是十六进制计算的)

下面的代码的0x2B6B1 就是这样子得来的
我注释哪行其实就已经得到了D3D的地址了不知道为什么不生效
(windows7 地址都一样)
第二步
//开始HOOK

bool hookDrawIndexedPrimitive()
{
    ULONG_PTR addr = onHookInit();//把找到的地址传进来
    jmp = addr + 5;//其实我自己也不是很清楚网上的友仔都这样子说
    if (addr == 0)
    {
        MessageBoxA(NULL, "error", NULL, 0);
    }
    if (VirtualProtect((LPVOID)addr, 5, PAGE_EXECUTE_READWRITE, &oldProtect))
    {      
        DWORD value = (DWORD)My_DrawIndexedPrimitive - addr - 5;
        _asm {

            mov eax, addr//addr 模块地址
            mov byte ptr[eax], 0xE9
            add  eax, 1
            mov ebx,value
            mov dword ptr[eax], ebx
                }
        VirtualProtect((LPVOID)addr, 5, oldProtect, &oldProtect);
    }

}

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

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

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

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

_declspec(naked)HRESULT WINAPI or_DrawIndexedPrimitive(
    LPDIRECT3DDEVICE9 m_Device,
    D3DPRIMITIVETYPE type ,
    INT BaseVertexIndex,
    UINT MinIndex,
    UINT NumVertices,
    UINT StartIndex,
    UINT PrimitiveCount
) {
    _asm {
                mov edi,edi
                push ebp
                mov ebp,esp
                mov eax,jmp
                jmp eax


            }
}


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

HRESULT WINAPI My_DrawIndexedPrimitive(
    LPDIRECT3DDEVICE9 m_Device,
    D3DPRIMITIVETYPE type,
    INT BaseVertexIndex,
    UINT MinIndex,
    UINT NumVertices,
    UINT StartIndex,
    UINT PrimitiveCount
)
{
    HRESULT result = S_OK;
    IDirect3DVertexBuffer9*PStremData = NULL;
    UINT iOffsetInBytes, Istride;
    m_Device->SetRenderState(D3DRS_ZENABLE, FALSE);
    result = or_DrawIndexedPrimitive(m_Device, type, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimitiveCount);


    return result;

效果
786209_5Z8ST3GQA87ERSF.jpg

新建 文本文档.txt

2.39 KB, 下载次数: 52, 下载积分: 吾爱币 -1 CB

源码

免费评分

参与人数 12吾爱币 +18 热心值 +11 收起 理由
jpm822phgr2 + 1 谢谢@Thanks!
nmgcflxd721526 + 1 我很赞同!
拉鲁哥受 + 1 + 1 属实大佬
Hmily + 7 + 1 用心讨论,共获提升!
xulichen + 1 + 1 热心回复!
CrazyNut + 3 + 1 膜拜大佬
wuxinwudi + 1 + 1 用心讨论,共获提升!
qaz003 + 1 + 1 谢谢分享, 过程很耐心祥细
MYLQG2ZHX + 1 + 1 我很赞同!
朱朱你堕落了 + 1 + 1 楼主进步神速,刚学hook就能写透视了,这么牛逼
zhuke + 1 用心讨论,共获提升!
kilkilo502 + 1 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 一身白 发表于 2019-4-17 14:42
另类飞翔 发表于 2019-4-17 14:19
DX9可以自己创建一个IDirect3DDevice9,获取虚函数地址然后根据偏移直接获取你要的函数地址再Hook,DrawInde ...

好吧 其实我这个东西也是临时去做的(做这份东西的前天本来是做hook Messagebox 然后实现了 就回头想hook dx9 是不是也这样子)网上找了一下资料然后就开始动手了~ 透视效果很差 现在想做矩阵透视真难!!
 楼主| 一身白 发表于 2019-4-19 19:47
枭欤 发表于 2019-4-19 19:42
进步很快啊之前消息框还不会,现在都能透视了。最近打算研究D3D的,让你说的外挂好简单啊

大佬别说笑  都问大家的还是大家乐于分享
E_eYYF 发表于 2019-4-15 20:18
gunxsword 发表于 2019-4-15 20:18
图片全都挂掉了!
ncjwapj 发表于 2019-4-15 20:21
谢谢分享,,,,,,
MYLQG2ZHX 发表于 2019-4-15 20:38
别用外链了8
ablack无名 发表于 2019-4-15 21:27
很不错的帖子,感谢楼主分享,每天学习知识挺好的
kilkilo502 发表于 2019-4-15 22:22
好文章就是外链恶心了。。。
下次别用外链了。。。
内核编程太难学了。。。
 楼主| 一身白 发表于 2019-4-15 22:26
kilkilo502 发表于 2019-4-15 22:22
好文章就是外链恶心了。。。
下次别用外链了。。。
内核编程太难学了。。。

誒  我在看雪发布的~~贪图方便
 楼主| 一身白 发表于 2019-4-15 22:59
kilkilo502 发表于 2019-4-15 22:22
好文章就是外链恶心了。。。
下次别用外链了。。。
内核编程太难学了。。。

已经好了
 楼主| 一身白 发表于 2019-4-15 23:01

👌
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-24 00:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表