好友
阅读权限10
听众
最后登录1970-1-1
|
小枫叶
发表于 2012-12-10 19:24
首先这个问题说是入门级技术,自己挺苦恼的.混了那么久-才有入门级的水平。- -!~ 悲哀
以下是过程+讨论内容
1.游戏检测指定内存地址.是否被修改.如被修改T下线:
2.自己没能力处理,于是找了其他过检测的辅助研究。
3.幸运的是辅助并没有通过寄存器传送指令,而是HOOK了IAT的函数。(寄存器传送的指令.没技术监视与判断)
4.HOOK的函数为:EnterCriticalSection
5.完整代码为:
00003320: 50 PUSH EAX
00003321: 8B4424 24 MOV EAX, [DWORD SS:ESP+24]
00003325: 3D A01B0000 CMP EAX, 1BA0 /////////////////////很清晰的代码.
0000332A: 75 0F JNZ SHORT 0000333B//////////////这里不跳即表示检测开始.然后执行下面过检测代码(上面判断的EAX值也有理由解释了.)
0000332C: 8B4424 2C MOV EAX, [DWORD SS:ESP+2C]
00003330: 60 PUSHAD
00003331: 50 PUSH EAX
00003332: E8 89050000 CALL 000038C0//////////////////////其关键代码CALL里被VM猜不出执行的啥玩意。
00003337: 83C4 04 ADD ESP, 4
0000333A: 61 POPAD
0000333B: 58 POP EAX
0000333C: FF25 20021700 JMP NEAR [DWORD DS:170220]////////170220储存的EnterCriticalSection开头地址
6.开始在CALL下工夫.写代码观察各寄存器的值,没技术过游戏保护,另类方法查看寄存器值。
mov ss:[00400012],eax
mov ss:[00400022],ebx
mov ss:[00400032],ecx
mov ss:[00400042],edx
mov ss:[00400052],esi
mov ss:[00400062],edi
mov ss:[00400072],ebp
mov ss:[00400082],esp
INT3
获取CALL返回值后模仿写.=掉线(不修改游戏所检测的内存地址也掉)
7.不过不能灰心 继续查看函数返回与各寄存器的值。然后模仿=掉线(不修改游戏所检测的内存地址也掉)
8.然后在被HOOK的函数上下工夫,
写代码,防API
略长贴关键
7C921000 > 64:8B0D 1800000>mov ecx,dword ptr fs:[18]
7C921007 8B5424 04 mov edx,dword ptr ss:[esp+4]
7C92100B 837A 14 00 cmp dword ptr ds:[edx+14],0
7C92100F 75 4F jnz short ntdll.7C921060
7C921011 F0:FF42 04 lock inc dword ptr ds:[edx+4]
7C921015 75 19 jnz short ntdll.7C921030
7C921017 8B41 24 mov eax,dword ptr ds:[ecx+24]
7C92101A 8942 0C mov dword ptr ds:[edx+C],eax
7C92101D C742 08 0100000>mov dword ptr ds:[edx+8],1
7C921024 33C0 xor eax,eax
7C921026 C2 0400 retn 4 //////////////////////////////////返回=掉线。不修改游戏检测的内存也掉,
7C921029 8DA424 00000000 lea esp,dword ptr ss:[esp]
7C921030 8B41 24 mov eax,dword ptr ds:[ecx+24]
7C921033 3942 0C cmp dword ptr ds:[edx+C],eax
7C921036 75 08 jnz short ntdll.7C921040
7C921038 FF42 08 inc dword ptr ds:[edx+8]
7C92103B 33C0 xor eax,eax
7C92103D C2 0400 retn 4 //////////////////////////////////返回=掉线。不修改游戏检测的内存也掉,
********************************
7C921060 8B41 24 mov eax,dword ptr ds:[ecx+24]
7C921063 3942 0C cmp dword ptr ds:[edx+C],eax
7C921066 75 18 jnz short ntdll.7C921080
7C921068 F0:FF42 04 lock inc dword ptr ds:[edx+4]
7C92106C FF42 08 inc dword ptr ds:[edx+8]
7C92106F 33C0 xor eax,eax
7C921071 C2 0400 retn 4//////////////////////////////////返回=掉线。不修改游戏检测的内存也掉,
我只防了3个返回地址,游戏并没有奔溃而是掉线.那我们怎么理解???我该怎么理解???
由于这个函数经过的地址比较多,我并没有耐心全部写上。
而我在编程中也没有实际运用过这个函数.
这是作者故意HOOK的函数来躲避游戏检测?
还是游戏就是用这条函数来检测指定内存地址是否被修改?
猜测+讨论.欢迎各位!谢谢各位
各位的一切猜测.假想.我会逐一按照大家的想法测试。
|
|