首页
社区
课程
招聘
[原创]基于DirectX 9引擎3D游戏逆向分析及汉化修改实例
发表于: 2011-5-21 22:11 33441

[原创]基于DirectX 9引擎3D游戏逆向分析及汉化修改实例

2011-5-21 22:11
33441

先引一段这次要分析的游戏的资料:

0048DD7E  |.  E8 CD604600   call    <jmp.&d3d9.Direct3DCreate9>
0048DD83  |.  3BC3          cmp     eax, ebx
0048DD85  |.  A3 187FE500   mov     dword ptr [E57F18], eax          ;  保存创建的接口指针
0048DD8A  |.  75 05         jnz     short 0048DD91
0048DD8C  |.  5F            pop     edi
0048DD8D  |.  32C0          xor     al, al
0048DD8F  |.  5B            pop     ebx
0048DD90  |.  C3            retn
0048DD91  |>  8B08          mov     ecx, dword ptr [eax]
0048DD93  |.  8B51 38       mov     edx, dword ptr [ecx+38]
0048DD96  |.  56            push    esi
0048DD97  |.  68 F877E500   push    00E577F8
0048DD9C  |.  57            push    edi
0048DD9D  |.  53            push    ebx
0048DD9E  |.  50            push    eax
0048DD9F  |.  FFD2          call    edx
0048DDA1  |.  0FB615 207FE5>movzx   edx, byte ptr [E57F20]
0048DDA8  |.  8B4424 10     mov     eax, dword ptr [esp+10]
0048DDAC  |.  8B4C24 14     mov     ecx, dword ptr [esp+14]
0048DDB0  |.  57            push    edi
0048DDB1  |.  52            push    edx
0048DDB2  |.  893D 28BFDE00 mov     dword ptr [DEBF28], edi
0048DDB8  |.  893D 34BFDE00 mov     dword ptr [DEBF34], edi
0048DDBE  |.  893D 50BFDE00 mov     dword ptr [DEBF50], edi
0048DDC4  |.  A3 1CBFDE00   mov     dword ptr [DEBF1C], eax
0048DDC9  |.  890D 20BFDE00 mov     dword ptr [DEBF20], ecx
0048DDCF  |.  E8 EC38FFFF   call    004816C0
0048DDD4  |.  8B7424 28     mov     esi, dword ptr [esp+28]
0048DDD8  |.  83C4 08       add     esp, 8
0048DDDB  |.  33C0          xor     eax, eax
0048DDDD  |.  385C24 24     cmp     byte ptr [esp+24], bl
0048DDE1  |.  68 1C7FE500   push    00E57F1C                         ;  注意第一个参数
0048DDE6  |.  0F95C0        setne   al
0048DDE9  |.  33C9          xor     ecx, ecx
0048DDEB  |.  385C24 20     cmp     byte ptr [esp+20], bl
0048DDEF  |.  68 1CBFDE00   push    00DEBF1C
0048DDF4  |.  0F94C1        sete    cl
0048DDF7  |.  C705 24BFDE00>mov     dword ptr [DEBF24], 16
0048DE01  |.  8935 38BFDE00 mov     dword ptr [DEBF38], esi
0048DE07  |.  8D0485 470000>lea     eax, dword ptr [eax*4+47]
0048DE0E  |.  A3 44BFDE00   mov     dword ptr [DEBF44], eax
0048DE13  |.  A1 187FE500   mov     eax, dword ptr [E57F18]          ;  取出上面保存的IDirect3D9接口指针
0048DE18  |.  890D 3CBFDE00 mov     dword ptr [DEBF3C], ecx
0048DE1E  |.  8B0D 0475E500 mov     ecx, dword ptr [E57504]
0048DE24  |.  8B10          mov     edx, dword ptr [eax]             ;  edx为IDirect3D9对象地址
0048DE26  |.  8B52 40       mov     edx, dword ptr [edx+40]          ;  edx为CreateDevice函数地址
0048DE29  |.  51            push    ecx
0048DE2A  |.  56            push    esi
0048DE2B  |.  57            push    edi
0048DE2C  |.  53            push    ebx
0048DE2D  |.  50            push    eax
0048DE2E  |.  FFD2          call    edx                              ;  调用CreateDevice
HRESULT CreateDevice( 
UINT Adapter, 
D3DDEVTYPE DeviceType, 
HWND hFocusWindow, 
DWORD BehaviorFlags, 
D3DPRESENT_PARAMETERS *pPresentationParameters, 
IDirect3DDevice9** ppReturnedDeviceInterface 
);

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (35)
雪    币: 23
活跃值: (31)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
受教了,非常感谢
2011-5-21 23:10
0
雪    币: 384
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
通俗易懂,感谢分享
2011-5-21 23:20
0
雪    币: 72
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错学习了,正在找这方面的资料,谢谢
2011-5-21 23:29
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
请教楼主,在取得了IDirect3DDevice9指针之后,如何定义自己的drawtext的类函数类型,才能直接做例如lpDirtect3DDevice9->mydrawtext(....)这样的调用?
2011-5-22 15:57
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
6
上面有一部分专门讲分析游戏显示函数接口,指的就是这个
知道了游戏的显示函数接口就可以按照该接口定义自己的函数
2011-5-22 19:41
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
多谢。

不过,我问的是在没有定义一个类的情况下,如何定义一个包含this指针的类成员函数的调用,就是说比正常的函数定义多一项把 lpDirect3Device9付给ecx这个过程,这个应该怎么在C里面定义?
2011-5-22 20:46
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
8
不行就内联汇编 多自由
2011-5-22 21:28
0
雪    币: 54
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
一直听说UBISoft的东西比较难汉化,楼主这篇文章可谓深入浅出,很有启发意义
2011-5-22 22:49
0
雪    币: 239
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
支持~~~学习了
2011-5-23 20:19
0
雪    币: 1685
活跃值: (699)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
跟着楼主继续学汉化~
2011-5-23 21:52
0
雪    币: 219
活跃值: (208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
通俗易懂,感谢分享
2011-5-23 22:13
0
雪    币: 7063
活跃值: (2958)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
LZ大哥再来个解密资源篇吧。。
2011-5-23 23:10
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
14
mark :)
2011-5-23 23:57
0
雪    币: 2291
活跃值: (2185)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
15
我是来学习汉化的~
2011-5-24 09:30
0
雪    币: 340
活跃值: (922)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
16
强制类型转换成 Direct3Device9
2011-5-24 10:37
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
厉害啊学习!!
2011-5-24 18:43
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
18
汉化界的前辈啊
我就是看您的文章启蒙的
2011-5-24 19:02
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
学习一下思路
2011-5-25 15:20
0
雪    币: 76
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我是来学习汉化的~
2011-5-25 23:06
0
雪    币: 203
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
有水平的游戏汉化方面的文章在网上非常少啊,感谢楼主无私分享的精神!

Added: 读完,请教楼主之所以采用这种hook 游戏原本的drawtext函数的方法,是由于找不到游戏的字库文件(其实就是图片吧?),那么你最终是绕过(不再使用)原本游戏要使用的字库直接调用Direct3D的某些文字输出函数(在下不懂这方面的API)实现的吗?
2011-5-26 09:42
0
雪    币: 280
活跃值: (58)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
谢谢了,正好拿个游戏练练手
2011-5-26 11:22
0
雪    币: 289
活跃值: (77)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
很好,学习中!!!!!!!!!!!!!!!!!!!!
2011-5-26 14:07
0
雪    币: 209
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
很强大 膜拜学习了 谢谢共享心得
2011-5-26 17:17
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
25
是的 绕过去
2011-5-26 18:47
0
游客
登录 | 注册 方可回帖
返回
//