代码改变世界

11的动态检测

2022-11-22 11:08  魔兽全图-DOTA-信长  阅读(490)  评论(0)    收藏  举报
无聊就爆了,看能不能混个精,md 高手勿喷
反正我reload game.dll老是不成功,于是我就直接搞,没想到还挺简单
我用的CE 用OD会省去很多步骤,不过习惯了
11设置里 参数加个-window方便
反正我选个辅助,然后就跑到泉水那,时不时右键下泉水,人也不会动,别人不确定我是否是故意挂机,也T不了我
先把ntgetcontextthread搞了,否则开始后4分钟会检测到硬件断点,直接头改成jmp ntgetcontextthread就行了
然后下断一个点,我下的是0x6f3a20a3
4分钟后会出来这个
11xp.dll+71281A - 8B 06                 - mov eax,[esi]

一个在2xxxxxx地址的动态检测,即便你手速很快也就截个图而已
11xp.dll+71281A l好搞,hook它判断esi是不是在game.dll里,这才2字节hook要5字节,后面的代码被占了也没事,我测试过
这两个地方是先调用11xp.dll+71281A再调用动态,从开始检测每隔1分钟就来一次,或许可以通过11xp.dll+71281A找到动态检测的位置,不知道
对于动态检测,我是分析它的代码
这里可以用OD来搞,直接硬件内存断点,可以看到代码

我是把CE改了下

看下CE设置是用的windows调试器

百度了下

主要调用这几个函数
DebugActiveProcess();附加进程
WaitForDebugEvent();//等待异常,有异常就暂停进程
ce的自定义处理函数();
ContinueDebugEvent();//恢复进程,线程

直接写个dll hook ce的ContinueDebugEvent

先弹个messagebox再jmp ContinueDebugEvent+5
这样不关对话框就可以看到动态检测的代码了(看来11xp有异常是真的,右键就出个对话框)

020047A3 - 81 EC 88020000        - sub esp,00000288
020047A9 - A1 D8E33B53           - mov eax,[11xp.dll+FE3D8]
020047AE - 33 C5                 - xor eax,ebp
020047B0 - 89 45 FC              - mov [ebp-04],eax
020047B3 - 56                    - push esi
020047B4 - 57                    - push edi
020047B5 - 8B 45 08              - mov eax,[ebp+08]
020047B8 - 8B 08                 - mov ecx,[eax]//获取特征码
020047BA - 3B 4D 0C              - cmp ecx,[ebp+0C]//比较
020047BD - 74 09                 - je 020047C8
020047BF - E8 71A80900           - call 0209F035 //看到这个call跟进去
020047C4 - 3D D2B63BE9           - cmp eax,E93BB6D2

020047C8 - E9 30000000           - jmp 020047FD

020047FD - B8 01000000           - mov eax,00000001
02004802 - 5F                    - pop edi
02004803 - 5E                    - pop esi
02004804 - 8B 4D FC              - mov ecx,[ebp-04]
02004807 - 33 CD                 - xor ecx,ebp
02004809 - 68 D1479853           - push 11xp.7FWARDEN_INIT+1842   
0200480E - E9 03F8FFFF           - jmp 02004016                 

0209F035 - E8 55D49851           - call 11xp.dll+76C48F//灵感来了,直接hook 11xp.dll+76C48F

不过直接hook不行,一来就会出现非法检测,跟进11xp.dll+76C48F
11xp.dll+76C48F jmp 11xp.dll+760D0F
11xp.dll+760D0F - E9 0C440000           - jmp 11xp.dll+765120

11xp.dll+765120 - E9 2DFEFFFF           - jmp 11xp.dll+764F52

11xp.dll+764F52 - 9C                    - pushfd

有个pushfd,说明一开始就检测了某些东西,不只是动态检测调用这个函数,所以nake函数先
pushfd
pushad
处理。。
再popad
pushfd
最后jmp

当比较特征码不相等会call 0209F035 再call 11xp.dll+76C48F
void _declspec(naked) nake()
{
_asm
{
  push eax
  mov eax,[esp+4+4]  
  mov dword ptr[jiang],eax//call两次,jiang就是20047C4了
pop eax
}
_asm
{
pushfd
pushad
}
if(*(BYTE*)(jiang-5)==0xe8&&*(BYTE*)jiang==0x3d)//这里用的特征码不放心可以再加点
{
   _asm
{
   popad
pushfd
   add esp,8
   mov eax,dword ptr[jiang]
   add eax,4
   jmp eax
}
}
else
{
_asm
{
  popad
pushfd
jmp 11xp.dll+760D0F
}
}
}
就是这样了,nake hook 11xp.dll+76C48F就行了,其余检测不知道有没有