首页
社区
课程
招聘
5
[原创]csgo数据查找实现透视
发表于: 2016-3-17 10:17 32960

[原创]csgo数据查找实现透视

2016-3-17 10:17
32960

比较简单,大牛飘过~~~~

通过耍玩游戏可以发现,当队友或自己 被敌人 打中后,此游戏(csgo)会给敌方人物或队友上个光的渲染(我就拿我已经修改好透视的了。。。),如下图:

那好,我们暂且姑且这是一个全局开关,bool类型,亮的时候为1,暗的时候为0,然后用CE搜索。。。
实际情况比较复杂,先要开个无人的房间,然后加入一个敌方单位,然后不断测试,不断测试,不断测试。。。。

在讲这个问题之前,我们首先要搞清楚一个游戏的类是需要生成对象的(实体),我们把自己的人物 我这里叫做人物基址
图内的其他单位(包括自己)的对象 叫做 实体对象。。。。
0x1 寻找人物基址
如何寻找?写过游戏的都知道,譬如一个关于人物信息的结构体,他一定有人物HP,MP,人物ID之类的。。如下:
struct MyEntity
{
        int id;
        int hp;
        int mp;
        char name[10];
};  
思路是这样的,我们找到人物HP的地址,然后减去人物HP在结构体中的偏移,得到的首地址就是人物对象地址,通过人物对象地址,找到指向 人物对象地址的指针,这个指针就叫做人物基址。。当然也可能是多级指针,为了好理解,我用代码解释一下:
MyEntity *pBase = new MyEntity();
pBase->hp = 0;
上述代码 其中的pBase的值就是人物对象的首地址,通过人物对象首地址+hp的偏移处地址的内容设置为0,这样人物血量就会为0了。。。

那么so easy了,开个单人房,通过控制台命令hurtme+血量,改变自身的血量,然后最终可以找到血量偏移为0xfc,人物基址为client.dll+A6E444,然后我们可以修改我们自身的血量为0,然后就死了,这当然仅限于单机模式了。。。

0x2 寻找实体对象列表基址

通过人物基址找到人物对象地址,那么这个人物对象地址一定包含在图内实体对象列表地址中,你可以认为是数组,也可以是链表,实际上是链表。。用CE搜索谁指向了人物对象地址,找到4个常量指针

当然了,第一个是人物基址,我们看看第二个吧,也许就是实体对象列表基址呢?
(由于这些图不是一气呵成的,所以有写地址可能对不上号)
实际上是的是的。。看下面的图,此时游戏中就我一个对象:

我现在加入2个bot,看看看。。。

嗯,很明显啊,第一个就是我们的人物对象地址,300203D0,这个结构体的大小为16字节。。大概结构体描述下
struct EntityInfo
{
        PVOID entityObj;
        DWORD id;
        EntityInfo *pPre;
        EntityInfo *pNext;
};
下面就是遍历整个实体对象了。。。 一个双向链表是吧,结束的标志就是entity->pPre==entity->pNext(这个是因为根据只有一个对象的时候 观察出来的)

so,实体对象列表的基址为client.dll+4a5c9c4
0x3 寻找发光基址
到这里,又回到开头了,我这里已经搜到1了。。。用CE搜索谁访问了这个地址,可以得到如下代码段:
client.dll+39E8AA - 51                    - push ecx
client.dll+39E8AB - E8 E0E1F5FF           - call client.dll+2FCA90
client.dll+39E8B0 - 8B 87 60A80000        - mov eax,[edi+0000A860]
client.dll+39E8B6 - 8D B7 58A80000        - lea esi,[edi+0000A858]
client.dll+39E8BC - 80 88 B0030000 02     - or byte ptr [eax+000003B0],02
client.dll+39E8C3 - 8B 4E 08              - mov ecx,[esi+08]
client.dll+39E8C6 - 85 C9                 - test ecx,ecx
client.dll+39E8C8 - 74 13                 - je client.dll+39E8DD
client.dll+39E8CA - 56                    - push esi
client.dll+39E8CB - 81 C1 A0030000        - add ecx,000003A0
client.dll+39E8D1 - E8 BA67E1FF           - call client.dll+1B5090
client.dll+39E8D6 - C7 46 08 00000000     - mov [esi+08],00000000
client.dll+39E8DD - 8B B7 00A30000        - mov esi,[edi+0000A300]
client.dll+39E8E3 - E8 C8B1F0FF           - call client.dll+2A9AB0
client.dll+39E8E8 - 8D 14 F5 00000000     - lea edx,[esi*8+00000000]
client.dll+39E8EF - 89 45 D0              - mov [ebp-30],eax
client.dll+39E8F2 - 2B D6                 - sub edx,esi
client.dll+39E8F4 - 8B 08                 - mov ecx,[eax]
client.dll+39E8F6 - 8B 45 F8              - mov eax,[ebp-08]
client.dll+39E8F9 - 88 44 D1 24           - mov [ecx+edx*8+24],al
client.dll+39E8FD - 8B 45 D0              - mov eax,[ebp-30]
client.dll+39E900 - 8B 00                 - mov eax,[eax]
client.dll+39E902 - C6 44 D0 25 00        - mov byte ptr [eax+edx*8+25],00
client.dll+39E907 - 8B B7 00A30000        - mov esi,[edi+0000A300]
client.dll+39E90D - E8 9EB1F0FF           - call client.dll+2A9AB0
client.dll+39E912 - 8D 0C F5 00000000     - lea ecx,[esi*8+00000000]
client.dll+39E919 - 2B CE                 - sub ecx,esi
client.dll+39E91B - 8B 00                 - mov eax,[eax]
client.dll+39E91D - C7 44 C8 2C 00000000  - mov [eax+ecx*8+2C],00000000
client.dll+39E925 - 8B B7 00A30000        - mov esi,[edi+0000A300]
client.dll+39E92B - E8 80B1F0FF           - call client.dll+2A9AB0
client.dll+39E930 - F3 0F10 45 F4         - movss xmm0,[ebp-0C]
client.dll+39E935 - 8D 0C F5 00000000     - lea ecx,[esi*8+00000000]
client.dll+39E93C - 2B CE                 - sub ecx,esi
client.dll+39E93E - 80 7D F8 00           - cmp byte ptr [ebp-08],00
client.dll+39E942 - 8B 00                 - mov eax,[eax]
client.dll+39E944 - F3 0F11 44 C8 04      - movss [eax+ecx*8+04],xmm0
client.dll+39E94A - F3 0F10 45 F0         - movss xmm0,[ebp-10]
client.dll+39E94F - F3 0F11 44 C8 08      - movss [eax+ecx*8+08],xmm0
client.dll+39E955 - F3 0F10 45 EC         - movss xmm0,[ebp-14]
client.dll+39E95A - F3 0F11 44 C8 0C      - movss [eax+ecx*8+0C],xmm0
client.dll+39E960 - 74 0F                 - je client.dll+39E971
client.dll+39E962 - F3 0F10 45 E8         - movss xmm0,[ebp-18]
client.dll+39E967 - F3 0F59 05 2CE4261B   - mulss xmm0,[client.dll+9FE42C]
client.dll+39E96F - EB 03                 - jmp client.dll+39E974
client.dll+39E971 - 0F57 C0               - xorps xmm0,xmm0
client.dll+39E974 - 8B B7 00A30000        - mov esi,[edi+0000A300]
client.dll+39E97A - F3 0F11 45 E8         - movss [ebp-18],xmm0
client.dll+39E97F - E8 2CB1F0FF           - call client.dll+2A9AB0
client.dll+39E984 - F3 0F10 45 E8         - movss xmm0,[ebp-18]
client.dll+39E989 - 8D 0C F5 00000000     - lea ecx,[esi*8+00000000]
client.dll+39E990 - 2B CE                 - sub ecx,esi
client.dll+39E992 - 8B 00                 - mov eax,[eax]
client.dll+39E994 - F3 0F11 44 C8 10      - movss [eax+ecx*8+10],xmm0
client.dll+39E99A - 5F                    - pop edi
client.dll+39E99B - 5E                    - pop esi
client.dll+39E99C - 8B E5                 - mov esp,ebp
client.dll+39E99E - 5D                    - pop ebp
client.dll+39E99F - C3                    - ret

请观察上述蓝色表明出:
1.mov [ecx+edx*8+24],al 这条语句,若al为1,则开启人物发光,为0则关闭,sososososo
这里搜索ecx,可以找到指向ecx的指针,我这里就叫做发光基址吧。。
edx是一个人物的类似ID的玩意儿,向上看,可以知道  lea edx,[esi*8+00000000]
sub edx,esi
而esi是在这里赋值的mov esi,[edi+0000A300] ,这个edi其实就是实体对象地址,我们之前已经找到过了是吧

那很好搞了,也就是说  (发光对象地址+[实体对象地址 + 0xa300]*0x8-发光对象地址+[实体对象地址 + 0xa300])*0x8+0x24 处
化简下,就是发光对象地址+[实体对象地址 + 0xa300]*0x38+0x24
的内容修改为1,就好了喽??

但是实际上并没有,因为这个只是一个开关,但是颜色的画还是不会画出来的,颜色的ARGB分别是这4条代码:

  movss [eax+ecx*8+04],xmm0
movss [eax+ecx*8+08],xmm0
movss [eax+ecx*8+0C],xmm0
movss [eax+ecx*8+10],xmm0

然后。。。xmm明显是float对吧,写上你喜欢的颜色就好了。。。

最后有个问题就是,上面修改后,只能看到敌方,虽说已经够了,其实要看到我方的话,修改这调语句:
  mov byte ptr [eax+edx*8+25],00
强制为0就好了,虽然这里是0,但是可能其他敌方的代码改了这个数值。。。。。

0x4 检测机制
这个比较简单,国外的游戏不会很坑爹,找到kernel32的那条线程,暂停或结束都可以,然后就OK了。。。对了,顺便说下,被人举报的话,是不会立马封号的。。。有个类似审核期,大概再作弊被发现后的1-2个月内会把你处理。。为什么我这么清楚,因为我被ban id了。。。。哈哈哈哈哈哈


[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 5
支持
分享
赞赏记录
参与人
雪币
留言
时间
飘零丶
为你点赞~
2024-5-31 06:44
shinratensei
为你点赞~
2024-5-31 06:38
PLEBFE
为你点赞~
2023-2-22 01:18
Jaychouzzk
为你点赞~
2021-5-23 11:47
黑的默
为你点赞~
2020-3-17 18:21
最新回复 (22)
雪    币: 324
活跃值: (60)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
先顶后看,太高端,现在问题是游戏保护都好难过
2016-3-17 11:11
0
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
这个文章挺好,其他的就不行了~
2016-3-17 14:27
0
雪    币: 284
活跃值: (250)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
谢谢你的意见,我会努力的
2016-3-17 14:35
0
雪    币: 625
活跃值: (586)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
[[基地址]+偏移] 写1 or 0 就可以了
2016-3-17 17:08
0
雪    币: 129
活跃值: (348)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xed
6
写得很详细、过来学习一下~
2016-3-17 23:36
0
雪    币: 251
活跃值: (357)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
呵呵,这个透视有意思
2016-4-14 21:28
0
雪    币: 13
活跃值: (26)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
现在好像不可以用了?
2016-4-15 16:33
0
雪    币: 13
活跃值: (26)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主找到kernel32的那条线程 这个线程好像没有啊,我都没看到。难道不在csgo进程里面?
2016-4-15 18:42
0
雪    币: 284
活跃值: (250)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
必须联网游戏才有那个玩意儿,如果没了我也不知道了,可能更新了吧
2016-4-16 19:03
0
雪    币: 13
活跃值: (26)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
他这个检测是crc 还是其他的?
2016-4-18 00:48
0
雪    币: 0
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=aimhack;1420595][[基地址]+偏移] 写1 or 0 就可以了[/QUOTE]

你有CF透视文件?
2016-7-7 14:58
0
雪    币: 127
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好高端的东西mark
2016-8-21 16:16
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
马克一下
2016-8-22 09:05
0
雪    币: 212
活跃值: (117)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不是因为被举报。。而是因为你用CE了。。VAC这玩意检测CE的。
2016-8-23 18:50
0
雪    币: 284
活跃值: (250)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
16
不是的兄弟,编的是自己的程序不是CE,CE只是用来搜索的,用CE在单机模式下关闭了VAC的
2016-8-24 21:43
0
雪    币: 1085
活跃值: (250)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bxb
17
去年这时候我也研究了 用CE搜索 单人游戏 控制台输入透视代码 开关反复搜索 就好 不过效果不太好看
2017-1-12 18:25
0
雪    币: 6061
活跃值: (4222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
gmhzxy 不是的兄弟,编的是自己的程序不是CE,CE只是用来搜索的,用CE在单机模式下关闭了VAC的
大佬,请教下。kernel32的那条线程怎么找的?
2017-7-14 20:42
0
雪    币: 19
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
顶一下
2017-7-19 13:51
0
雪    币: 223
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
兄弟你是如何在单人模式下关闭VAC的
最后于 2018-3-28 11:31 被weiyangs编辑 ,原因:
2018-3-28 11:31
0
雪    币: 1140
活跃值: (102)
能力值: ( LV4,RANK:48 )
在线值:
发帖
回帖
粉丝
21
但是按照你发的图,EntityInfo结构里面的指针对不上啊,并不像前后指针
2019-5-11 20:53
0
雪    币: 2648
活跃值: (4281)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
22
强啊
2020-3-10 11:06
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
活到老学到老
2020-3-17 18:00
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册