首页
社区
课程
招聘
[求助]关于某个游戏的反外挂原理..
发表于: 2007-10-14 01:13 13584

[求助]关于某个游戏的反外挂原理..

2007-10-14 01:13
13584
我测试了下..
注入游戏没问题的.
在可以读出游戏的内存
但是只要一call游戏的函数.就报内存错误.弹出N个窗口.不理会.返回到游戏.人物在自动打怪.说明call是成功的.但是没多长时间.错误越来越多.半分钟时间吧.游戏崩溃..
请教一下.这个反外挂是什么原理??

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
找到原因了.
是call的问题.
但是很奇怪
call的是同一个地址.一个是有参数的.一个是无参数的.
无参数成功.有参数的内存错误..郁闷.
在游戏没更新之间没问题的..
请教一下这是为什么呢??
2007-10-14 01:52
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
第一个
    mov ecx,esi
    call Address
成功
第二个
    push 1
    push 0   <---这里就是参数.我直接压入0
    mov ecx,esi
    call Address
出现内存错误..
这是为什么呢`??实在想不出来原因- -||
2007-10-14 01:54
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
根据出错内存信息.我跟到了.好像这里有个实时的数据校验

0065E1E0    55              PUSH EBP
0065E1E1    8BEC            MOV EBP,ESP
0065E1E3    8BC1            MOV EAX,ECX
0065E1E5    8A48 08         MOV CL,BYTE PTR DS:[EAX+8]   <--传入01
0065E1E8    84C9            TEST CL,CL
0065E1EA    74 37           JE SHORT Fiesta.0065E223    <--这里好像不会跳的.
0065E1EC    8B55 0C         MOV EDX,DWORD PTR SS:[EBP+C]
0065E1EF    53              PUSH EBX
0065E1F0    56              PUSH ESI
0065E1F1    8B75 08         MOV ESI,DWORD PTR SS:[EBP+8]   <--这里应该是传下面数据的长度
0065E1F4    57              PUSH EDI
0065E1F5    8BB8 10800000   MOV EDI,DWORD PTR DS:[EAX+8010]
0065E1FB    8BCA            MOV ECX,EDX
0065E1FD    8BD9            MOV EBX,ECX
0065E1FF    C1E9 02         SHR ECX,2
0065E202    8DBC38 14800000 LEA EDI,DWORD PTR DS:[EAX+EDI+8014]
0065E209    F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
0065E20B    8BCB            MOV ECX,EBX
0065E20D    83E1 03         AND ECX,3
0065E210    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]  <--在这里弹出错误信息
0065E212    8B88 10800000   MOV ECX,DWORD PTR DS:[EAX+8010]
0065E218    5F              POP EDI
0065E219    03CA            ADD ECX,EDX
0065E21B    5E              POP ESI
0065E21C    8988 10800000   MOV DWORD PTR DS:[EAX+8010],ECX
0065E222    5B              POP EBX
0065E223    5D              POP EBP
0065E224    C2 0800         RETN 8

我汇编太差..看不懂..- -||
希望达人帮我看下``
这段大体是什么意思``为什么能起到校验的效果.原理是什么``
2007-10-14 02:49
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
汇编太差都做挂,这世道变了
2007-10-14 09:36
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
6
ecx是this指针

0065E1E5    8A48 08         MOV CL,BYTE PTR DS:[EAX+8]  成员变量

2个参数为pBuffer,cbSize,数据传到另外的成员变量了
2007-10-14 09:48
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
……机器永远是机器!
2007-10-14 10:27
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我用使用外挂的时候跟正常的时候.比较一下看看吧..这种方法最简单了..
2007-10-14 11:17
0
雪    币: 196
活跃值: (96)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
看你call无参数的成功,有参数的失败, 看看弹出的错误是不是 上面显示esp什么什么的,
你在有参数的后面 加上add esp, 8 看看,即
push 1
push 0   <---这里就是参数.我直接压入0
ov ecx,esi
call Address
add esp, 8
2007-10-14 11:55
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
你把它当静态类成员函数用了。
2007-10-14 12:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
晕...高手讨论...我看不懂...
但这个反外挂我非常喜欢....学习中
2007-10-14 13:03
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
又跟了下.我用使用外挂的时候跟不使用外挂的时候做对比.得出个结论
0065E1E0    55              PUSH EBP
0065E1E1    8BEC            MOV EBP,ESP
0065E1E3    8BC1            MOV EAX,ECX   <---使用外挂和不使用外挂这里ECX是不一样的.不使用外挂这里ECX地址里面的值一般是1,若使用外挂就跳到一个随即的地址好像.这个地址里头存的值是??不确定.
0065E1E5    8A48 08         MOV CL,BYTE PTR DS:[EAX+8]   <--传入01或不确定的??
0065E1E8    84C9            TEST CL,CL    <---若这里使用外挂,既传入的是??,那么就弹错,但是我不会修改..谁帮帮我..55555
0065E1EA    74 37           JE SHORT Fiesta.0065E223    <--这里好像不会跳的.
0065E1EC    8B55 0C         MOV EDX,DWORD PTR SS:[EBP+C]
0065E1EF    53              PUSH EBX
0065E1F0    56              PUSH ESI
0065E1F1    8B75 08         MOV ESI,DWORD PTR SS:[EBP+8]   <--这里应该是传下面数据的长度
0065E1F4    57              PUSH EDI
0065E1F5    8BB8 10800000   MOV EDI,DWORD PTR DS:[EAX+8010]
0065E1FB    8BCA            MOV ECX,EDX
0065E1FD    8BD9            MOV EBX,ECX
0065E1FF    C1E9 02         SHR ECX,2
0065E202    8DBC38 14800000 LEA EDI,DWORD PTR DS:[EAX+EDI+8014]
0065E209    F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
0065E20B    8BCB            MOV ECX,EBX
0065E20D    83E1 03         AND ECX,3
0065E210    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]  <--在这里弹出错误信息
0065E212    8B88 10800000   MOV ECX,DWORD PTR DS:[EAX+8010]
0065E218    5F              POP EDI
0065E219    03CA            ADD ECX,EDX
0065E21B    5E              POP ESI
0065E21C    8988 10800000   MOV DWORD PTR DS:[EAX+8010],ECX
0065E222    5B              POP EBX
0065E223    5D              POP EBP
0065E224    C2 0800         RETN 8
2007-10-14 13:45
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
call是没问题的..弹出的错误显示的是65E1E0内存错误.所以我从这里跟进去.发现有个校验.应该不会是call的问题.因为call还是会成功的.只不过弹错.弹到一定数量后,游戏崩溃.



我不太理解.可以再详细说下么?静态类成员函数??貌似我就知道静态类成员函数可以没对象- -||
2007-10-14 13:50
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
14
伊艾斯爱娜丽莱
2007-10-14 13:51
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
晕..我跟错了.这是字符串处理.
我地址写错了..我真想杀了自己!!
2007-10-14 15:11
0
雪    币: 196
活跃值: (96)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
0065E1E0    55              PUSH EBP
0065E1E1    8BEC            MOV EBP,ESP
0065E1E3    8BC1            MOV EAX,ECX  
这里用到了ecx,call这个函数之前要对ecx赋值,可能是一个变量,一个句柄等等

push 1
push 0
mov ecx,esi
call Address
外挂是这样的话,他之前esi里有那个变量,赋值到ecx里 函数不会出错,你的代码是注入的,调用当时的esi里是什么东西有没经过确定?
2007-10-14 15:25
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
17
眼拙。看错了。
2007-10-14 16:55
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我倒。。。佩服楼主。。。。
2007-11-1 19:27
0
雪    币: 328
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
19
有个省事的办法,用按键精灵做个小程序,错误窗口出来一个关闭一个,就不会崩溃了八

反正call都成功了。、、、
2007-11-1 20:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
根据经验 是因为你参数没构造好~~~  或者在这个CALL之前有个还有个前提CALL你没调用 你检查下
2007-11-2 09:05
0
游客
登录 | 注册 方可回帖
返回
//