隐藏inlinehook已经不是新鲜招数了,因为我们有隐藏更彻底的hook,木有ark能扫得到,so,这个老技术是时候解封了。
第一种老V已经说了,poolhack~吖把我正在用的方法给公布了,鄙视下
传送门:http://bbs.pediy.com/showthread.php?t=152884
第二种也是老v发布的http://bbs.pediy.com/showthread.php?t=154384
其实就是hook MmIsAddressValid(肯定会有N多人鄙视我了。)
//适用:gmer,rku,KD
BOOLEAN __stdcall NewMmIsAddressValid(
__in PVOID VirtualAddress
)
{
MMISADDRESSVALID OldMmIsAddressValid;
PEPROCESS EProcess;
char *ProName = NULL;
__try{
if (KeGetCurrentIrql() != PASSIVE_LEVEL){
__leave;
}
EProcess = PsGetCurrentProcess();
ProName = PsGetProcessImageFileName(EProcess);
if (!ProName){
__leave;
}
if (strstr(ProName,"123123.exe") != 0)
{
KdPrint(("%s -> %08x\n",ProName,VirtualAddress));
//
if (VirtualAddress == 0x80511000 ||
VirtualAddress == 0x805c8000)
{
return FALSE;
}
}
}
__except(EXCEPTION_EXECUTE_HANDLER){
goto _FuncRet;
}
_FuncRet:
OldMmIsAddressValid = (MMISADDRESSVALID)MmIsAddressValidHookZone;
return OldMmIsAddressValid(VirtualAddress);
}
你以为到此就完了吗?下面重点说说xuetr~~
xuetr自实现了一个MmIsxxxxxxx,难点在于怎么定位到xuetr的这个函数~~
如果你认认真真看过A盾的代码,就知道自己实现MmIsxxxxxxx会有一个特征码:
__inline ULONG CR4()
{
// mov eax, cr4
__asm _emit 0x0F __asm _emit 0x20 __asm _emit 0xE0
}
mov eax, cr4 //机器码是:0F 20 E0 即可准确定位到xuetr自己实现的MmIsAddressValid函数了
lkd> dt_driver_object 82256030
nt!_DRIVER_OBJECT
+0x000 Type : 4
+0x002 Size : 168
+0x004 DeviceObject : 0x82464cf0 _DEVICE_OBJECT
+0x008 Flags : 0x12
+0x00c DriverStart : 0xb2142000
+0x010 DriverSize : 0x70000
+0x014 DriverSection : 0x81f70008
+0x018 DriverExtension : 0x822560d8 _DRIVER_EXTENSION
+0x01c DriverName : _UNICODE_STRING "\Driver\XueTr"
+0x024 HardwareDatabase : 0x80671b60 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"
+0x028 FastIoDispatch : (null)
+0x02c DriverInit : 0xb21a203e long +ffffffffb21a203e <--------定位这里
+0x030 DriverStartIo : (null)
+0x034 DriverUnload : 0xb2190e34 void +ffffffffb2190e34
+0x038 MajorFunction : [28] 0xb2190f5e long +ffffffffb2190f5e
//===================================================================
lkd> u 0xb21a203e
b21a203e 8bff mov edi,edi
b21a2040 55 push ebp
b21a2041 8bec mov ebp,esp
b21a2043 e8bdffffff call b21a2005
b21a2048 5d pop ebp
b21a2049 e9f8f9feff jmp b2191a46 <--------定位这里
b21a204e cc int 3
b21a204f cc int 3
//=================================================
lkd> u b2191a46 l 100
b2191a46 8bff mov edi,edi
b2191a48 55 push ebp
b2191a49 8bec mov ebp,esp
b2191a4b 83ec20 sub esp,20h
b2191a4e 53 push ebx
b2191a4f 56 push esi
b2191a50 57 push edi
b2191a51 50 push eax
b2191a52 8b4504 mov eax,dword ptr [ebp+4]
b2191a55 8945f4 mov dword ptr [ebp-0Ch],eax
b2191a58 58 pop eax
b2191a59 8b750c mov esi,dword ptr [ebp+0Ch]
b2191a5c 8b4604 mov eax,dword ptr [esi+4]
b2191a5f c745fc010000c0 mov dword ptr [ebp-4],0C0000001h
b2191a66 85c0 test eax,eax
b2191a68 0f8406020000 je b2191c74
b2191a6e 50 push eax
b2191a6f ff15285019b2 call dword ptr ds:[0B2195028h]
b2191a75 3c01 cmp al,1
b2191a77 0f85f7010000 jne b2191c74
b2191a7d 0fb73e movzx edi,word ptr [esi]
b2191a80 33c0 xor eax,eax
b2191a82 663bc7 cmp ax,di
b2191a85 0f84e9010000 je b2191c74
b2191a8b e860ffffff call b21919f0
b2191a90 3c01 cmp al,1
b2191a92 0f85dc010000 jne b2191c74
b2191a98 6a02 push 2
b2191a9a 5b pop ebx
b2191a9b 0fb7c7 movzx eax,di
b2191a9e 03c3 add eax,ebx
b2191aa0 50 push eax
b2191aa1 6a01 push 1
b2191aa3 ff15fc5019b2 call dword ptr ds:[0B21950FCh]
b2191aa9 8bf8 mov edi,eax
b2191aab 897df0 mov dword ptr [ebp-10h],edi
b2191aae 85ff test edi,edi
b2191ab0 0f84be010000 je b2191c74
b2191ab6 0fb706 movzx eax,word ptr [esi]
b2191ab9 03c3 add eax,ebx
b2191abb 50 push eax
b2191abc 6a00 push 0
b2191abe 57 push edi
b2191abf e8822e0000 call b2194946
b2191ac4 0fb706 movzx eax,word ptr [esi]
b2191ac7 50 push eax
b2191ac8 ff7604 push dword ptr [esi+4]
b2191acb 57 push edi
b2191acc e8692e0000 call b219493a
b2191ad1 6a5c push 5Ch
b2191ad3 57 push edi
b2191ad4 ff15f45019b2 call dword ptr ds:[0B21950F4h]
b2191ada 83c420 add esp,20h
b2191add 85c0 test eax,eax
b2191adf 740c je b2191aed
b2191ae1 03c3 add eax,ebx
b2191ae3 33c9 xor ecx,ecx
b2191ae5 89450c mov dword ptr [ebp+0Ch],eax
b2191ae8 663b08 cmp cx,word ptr [eax]
b2191aeb 7503 jne b2191af0
b2191aed 897d0c mov dword ptr [ebp+0Ch],edi
b2191af0 e87309fdff call b2162468
b2191af5 ff750c push dword ptr [ebp+0Ch]
b2191af8 e84bfeffff call b2191948
b2191afd 33c0 xor eax,eax
b2191aff 0fb788a24d19b2 movzx ecx,word ptr [eax-4DE6B25Eh]
b2191b06 668988a0151ab2 mov word ptr [eax-4DE5EA60h],cx
b2191b0d 03c3 add eax,ebx
b2191b0f 6685c9 test cx,cx
b2191b12 75eb jne b2191aff
b2191b14 bea0151ab2 mov esi,0B21A15A0h
b2191b19 8bc6 mov eax,esi
b2191b1b 8d5002 lea edx,[eax+2]
b2191b1e 668b08 mov cx,word ptr [eax]
b2191b21 03c3 add eax,ebx
b2191b23 6685c9 test cx,cx
b2191b26 75f6 jne b2191b1e
b2191b28 8b3df05019b2 mov edi,dword ptr ds:[0B21950F0h]
b2191b2e 2bc2 sub eax,edx
b2191b30 d1f8 sar eax,1
b2191b32 b900010000 mov ecx,100h
b2191b37 2bc8 sub ecx,eax
b2191b39 51 push ecx
b2191b3a ff750c push dword ptr [ebp+0Ch]
b2191b3d 56 push esi
b2191b3e ffd7 call edi
b2191b40 83c40c add esp,0Ch
b2191b43 e8b802fdff call b2161e00
b2191b48 ff75f4 push dword ptr [ebp-0Ch]
b2191b4b 8b5d08 mov ebx,dword ptr [ebp+8]
b2191b4e 53 push ebx
b2191b4f e8bc46fdff call b2166210
b2191b54 e8b715fbff call b2143110 <--------定位这里
//====================
lkd> u b2143110 l 100
b2143110 8bff mov edi,edi
b2143112 55 push ebp
b2143113 8bec mov ebp,esp
b2143115 83ec14 sub esp,14h
b2143118 53 push ebx
b2143119 6a03 push 3
b214311b c645ff00 mov byte ptr [ebp-1],0
b214311f e8c4300200 call b21661e8
b2143124 8bd8 mov ebx,eax
b2143126 6a02 push 2
b2143128 895dec mov dword ptr [ebp-14h],ebx
b214312b e8b8300200 call b21661e8
b2143130 8945f8 mov dword ptr [ebp-8],eax
b2143133 85db test ebx,ebx
b2143135 0f84b6020000 je b21433f1
b214313b 85c0 test eax,eax
b214313d 0f84ae020000 je b21433f1
b2143143 56 push esi
b2143144 57 push edi
b2143145 8b7b14 mov edi,dword ptr [ebx+14h]
b2143148 8b37 mov esi,dword ptr [edi]
b214314a 685c005300 push 53005Ch
b214314f 6a04 push 4
b2143151 897df0 mov dword ptr [ebp-10h],edi
b2143154 e875300200 call b21661ce
b2143159 6879007300 push 730079h
b214315e 6a05 push 5
b2143160 e869300200 call b21661ce
b2143165 6874006500 push 650074h
b214316a 6a06 push 6
b214316c e85d300200 call b21661ce
b2143171 686d005200 push 52006Dh
b2143176 6a07 push 7
b2143178 e851300200 call b21661ce
b214317d 686f006f00 push 6F006Fh
b2143182 6a08 push 8
b2143184 e845300200 call b21661ce
b2143189 6874005c00 push 5C0074h
b214318e 6a09 push 9
b2143190 e839300200 call b21661ce
b2143195 6873007900 push 790073h
b214319a 6a0a push 0Ah
b214319c e82d300200 call b21661ce
b21431a1 6873007400 push 740073h
b21431a6 6a0b push 0Bh
b21431a8 e821300200 call b21661ce
b21431ad 6865006d00 push 6D0065h
b21431b2 6a0c push 0Ch
b21431b4 e815300200 call b21661ce
b21431b9 6833003200 push 320033h
b21431be 6a0d push 0Dh
b21431c0 e809300200 call b21661ce
b21431c5 3bfe cmp edi,esi
b21431c7 0f841f010000 je b21432ec
b21431cd 8b4e18 mov ecx,dword ptr [esi+18h]
b21431d0 8b150c5119b2 mov edx,dword ptr ds:[0B219510Ch]
b21431d6 8b4620 mov eax,dword ptr [esi+20h]
b21431d9 8b12 mov edx,dword ptr [edx]
b21431db 03c1 add eax,ecx
b21431dd 894df4 mov dword ptr [ebp-0Ch],ecx
b21431e0 3bca cmp ecx,edx
b21431e2 0f86ed000000 jbe b21432d5
b21431e8 3bc2 cmp eax,edx
b21431ea 0f86e5000000 jbe b21432d5
b21431f0 394df8 cmp dword ptr [ebp-8],ecx
b21431f3 0f86dc000000 jbe b21432d5
b21431f9 3945f8 cmp dword ptr [ebp-8],eax
b21431fc 0f83d3000000 jae b21432d5
b2143202 8b15145119b2 mov edx,dword ptr ds:[0B2195114h]
b2143208 3bd1 cmp edx,ecx
b214320a 0f86c5000000 jbe b21432d5
b2143210 3bd0 cmp edx,eax
b2143212 0f83bd000000 jae b21432d5
b2143218 81f900000090 cmp ecx,90000000h
b214321e 0f83b1000000 jae b21432d5
b2143224 66837e2404 cmp word ptr [esi+24h],4
b2143229 0f86a6000000 jbe b21432d5
b214322f 8b4628 mov eax,dword ptr [esi+28h]
b2143232 85c0 test eax,eax
b2143234 0f849b000000 je b21432d5
b214323a 6a01 push 1
b214323c 50 push eax
b214323d e872ab0300 call b217ddb4 <--------定位这里就是xuetr自己的MmIsAddressValid
然后没区别了:
//bypass xuetr
BOOLEAN __stdcall NewXuetrMmIsAddressValid(
__in PVOID VirtualAddress,
__in int Type
)
{
XUETRMMISADDRESSVALID OldXuetrMmIsAddressValid;
KdPrint(("%08x\n",VirtualAddress));
if (VirtualAddress == 0x804fe000)
{
return FALSE;
}
OldXuetrMmIsAddressValid = (XUETRMMISADDRESSVALID)XuetrMmIsAddressValidHookZone;
return OldXuetrMmIsAddressValid(VirtualAddress,Type);
}
最后广告PS:
反游戏保护论坛,专注各种游戏保护的反向研究~:
http://www.antigameprotect.com/
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课