无聊就爆了,看能不能混个精,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就行了,其余检测不知道有没有