首页
社区
课程
招聘
[原创]cs 透视初步尝试
发表于: 2011-1-23 15:44 15244

[原创]cs 透视初步尝试

2011-1-23 15:44
15244

cs 透视初步尝试

受hellotong兄的Direct3D透视教程的启发,
http://bbs.pediy.com/showthread.php?t=126933
自己也想弄弄,平常偶尔打打CS,于是拿它开刀了
先看了下网上资料,发现D3D游戏和普通windows程序结构没什么两样
包括创建窗口和消息处理循环,只不过处理WM_PAINT消息时用到d3d的渲染函数
先用OD载入cstrike.exe ,为了方便调试,设置为窗口化运行,视频模式选择为D3D
一开始查找DrawIndexedPrimitive,SetRenderState,发现并没有直接调用的地方,于是想它们要用到lpdevice参数,那就从Direct3DCreate,Direct3DCreateDvice着手吧,可是加载cstrike.exe后直接bp Direct3DCreate不行,程序一开始并没有加载D3D的DLL文件, 是在进入游戏时才加载的,于是在进入游戏前,在OD选项里--“调试设置”--“事件”--中断于新模块,呵呵,中断了两次,按F9,第三次终于发现了我们的d3dim.dll文件,bp Direct3DCreate可以用了,不过跟了一下没什么收获,查看d3dim.dll模块,结果也让人失望,
在d3dim.dll里搜索所有参考字串,结果发现了不少好东西,真是柳暗花明又一村啊
6DCA9D32   PUSH D3DIM.6DCA1B88                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\vertbuf.cpp(722):"
6DCA9D3B   PUSH D3DIM.6DCA1B5C                       ASCII "Direct3DVertexBuffer::ProcessVertices"
6DCA9EE7   PUSH D3DIM.6DCA1BF8                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\vertbuf.cpp(813):"
6DCA9EEC   PUSH D3DIM.6DCA1BCC                       ASCII "IDirect3DDevice3::DrawIndexedPrimitiveVB"
6DCAA0B9   PUSH D3DIM.6DCA1C60                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\vertbuf.cpp(988):"
6DCAA0BE   PUSH D3DIM.6DCA1C3C                       ASCII "Direct3DDevice3::DrawPrimitiveVB"
................
6DCAD137   PUSH D3DIM.6DCA2138                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\texman.cpp(255):"
6DCAD13C   PUSH D3DIM.6DCA2114                       ASCII "TextureCacheManager::allocNode"
6DCB1741   PUSH D3DIM.6DCA23E0                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\devstate.cpp(159):"
6DCB1746   MOV EBX,D3DIM.6DCA23BC             ASCII "Direct3DDevice::SetRenderState"
6DCB1773   PUSH D3DIM.6DCA2378                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\devstate.cpp(202):"
6DCB18F4   PUSH D3DIM.6DCA2448                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\devstate.cpp(317):"
6DCB18F9   PUSH D3DIM.6DCA2424                       ASCII "Direct3DDevice::GetRenderState"
6DCB199E   PUSH D3DIM.6DCA24B8                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\devstate.cpp(356):"
6DCB19A3   PUSH D3DIM.6DCA249C                       ASCII "Direct3DDevice::GetTexture"
6DCB1A3F   PUSH D3DIM.6DCA2528                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\devstate.cpp(398):"
6DCB1A44   PUSH D3DIM.6DCA250C                       ASCII "Direct3DDevice::SetTexture"
6DCB1B11   PUSH D3DIM.6DCA2598                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\devstate.cpp(502):"
6DCB1B16   PUSH D3DIM.6DCA256C                       ASCII "Direct3DDevice::GetTextureStageState"
6DCB1C9B   PUSH D3DIM.6DCA2620                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\devstate.cpp(664):"
6DCB1CA0   PUSH D3DIM.6DCA25FC                       ASCII "Direct3DDevice::SetLightState"
6DCB1D03   PUSH D3DIM.6DCA2688                       ASCII "d:\xpclient\multimedia\directx\dxg\d3d\dx6\d3dim\devstate.cpp(686):"
6DCB1D08   PUSH D3DIM.6DCA2664                       ASCII "Direct3DDevice::GetLightState"
.......

经过分别在上面函数名称下断,发现在游戏里不停调用的只有如下几个函数
IDirect3DDevice3::DrawIndexedPrimitiveVB、SetRenderState、SetTexture、SetTransform、GetTransform、MultiplyTransform、CDirect3DDeviceIDP2::FlushStates
经过反复观察这几个函数中断的顺序和名称含义,个人猜测DrawIndexedPrimitiveVB是最终实施绘画的函数,而SetRenderState、SetTexture用来在绘画前设置物件的渲染状态和纹理贴图,只在SetRenderState下断(6DCB1746),通过堆栈回溯,发现返回地址为cstrike.xxxxxxxx,中断几次观察返回地址的代码均为如下结构

01D57B62  56                PUSH ESI   (或push edi)
01D57B63  6A 1B             PUSH 1B                                    ;这里是D3DRENDERSTATETYPE,
01D57B65  50                PUSH EAX
01D57B66  8B10              MOV EDX,DWORD PTR DS:[EAX]
01D57B68  8935 BCA42F02     MOV DWORD PTR DS:[22FA4BC],ESI
01D57B6E  FF52 58           CALL DWORD PTR DS:[EDX+58]            ;这里就是SetRenderState函数
01D57B71  5F                POP EDI
01D57B72  5E                POP ESI
01D57B73  83C4 2C           ADD ESP,2C
01D57B76  C2 0400           RETN 4
01D57A10  56                PUSH ESI
01D57A11  6A 07             PUSH 7
01D57A13  50                PUSH EAX
01D57A14  8B10              MOV EDX,DWORD PTR DS:[EAX]
01D57A16  8935 6CA42F02     MOV DWORD PTR DS:[22FA46C],ESI
01D57A1C  FF52 58           CALL DWORD PTR DS:[EDX+58]
01D57A1F  5F                POP EDI
01D57A20  5E                POP ESI
01D57A21  83C4 2C           ADD ESP,2C
01D57A24  C2 0400           RETN 4

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 324
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
自己偶尔也玩的,没想到这样可以实现透视,谢谢楼主分享!
2011-1-23 15:53
0
雪    币: 333
活跃值: (46)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
很好  支持一下
2011-1-23 16:14
0
雪    币: 348
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
作弊器就是这么来的
2011-1-23 19:50
0
雪    币: 347
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢楼主分享,学习
CS一直玩得不好
2011-1-23 20:31
0
雪    币: 249
活跃值: (196)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哈哈 这么巧 最近也想研究哈。
2011-1-23 20:39
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
貌似很不错,可惜以我的水平还看不懂。先标记下。
2011-1-30 21:27
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
address  dword 01d57e2dh     ;更改的地址

是基质。现在版本太多了,要找到这个 就要理解 楼主的 分析
过程,及含义,很有参考价值,值得学习。
2011-2-8 13:18
0
雪    币: 81
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
谢谢楼主,真厉害!
2011-2-8 14:23
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
期待下文
2011-3-8 10:03
0
雪    币: 547
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
貌似不支持win7,我在win7下灭有效果
2012-7-24 08:21
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
mark一下
2012-7-24 08:36
0
雪    币: 1041
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
强烈支持下......
2012-8-18 17:01
0
雪    币: 545
活跃值: (257)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
mark
2017-12-23 10:19
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
牛逼大神
2017-12-23 16:06
0
雪    币: 29
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
支持,技术贴啊,cs永远的fps王者
2017-12-23 20:09
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
18
厉害
2017-12-23 20:17
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码