活跃值:
(1456)
能力值:
( LV2,RANK:15 )
|
-
はつゆき
2022-5-14 00:54
-
2 楼
思路是对的,并且已经有厂在用了 https://bbs.pediy.com/thread-254276.htm
|
活跃值:
(108)
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
はつゆき
思路是对的,并且已经有厂在用了
https://bbs.pediy.com/thread-254276.htm 谢谢佬回复,这个帖我看过了,思路差不多,不过还是有点区别的,鹅厂是通过映射cr3来比较的,我这个并没有映射
最后于 2022-5-14 01:03
被yuyuaqwq编辑
,原因:
|
活跃值:
(21)
能力值:
( LV9,RANK:289 )
|
-
-
4 楼
char __fastcall LocatePteBase()
{
unsigned __int64 v0; // rax
__int64 v1; // krB8_8
__int64 i; // krA0_8
__int64 index; // rsi
__int64 v4; // r9
PHYSICAL_ADDRESS v5; // krA0_8
unsigned __int64 v6; // krD8_8
__int64 v7; // krE8_8
unsigned __int64 v8; // kr30_8
unsigned int v9; // eax
char v10; // cf
ULONG v11; // krB0_4
void *v14; // rax
__int64 v15; // r9
unsigned __int64 VA; // [rsp+44h] [rbp+8h]
v0 = __readcr3();
v1 = v0 & 0xFFFFFFFFFF000i64;
for ( i = 1i64; ; i = index + 1 )
{
VA = (i | ((i | ((i | (i << 9)) << 9)) << 9)) << 12;
index = i;
v5 = (*(PHYSICAL_ADDRESS (__stdcall **)(PVOID))pfnMmGetPhysicalAddress_0)((PVOID)VA);
v6 = VA;
v7 = v4;
if ( v5.QuadPart == v1 )
break;
if ( (unsigned __int64)(index + 1) >= 0x200 )
{
SelfAutoIndex = 0i64;
goto LABEL_11;
}
}
if ( (VA >> 47) & 1 != 0 )
v6 = VA | 0xFFFF000000000000ui64;
SelfAutoIndex = index;
if ( !v6
|| (PteBase = (index << 39) | 0xFFFF000000000000ui64,
PdeBase = (index << 30) | (index << 39) | 0xFFFF000000000000ui64,
PpeBase = (index << 21) | PdeBase,
PxeBase = (index << 21) | PdeBase | (index << 12),
PxeBase != v6) )
{
LABEL_11:
v11 = -536870756;
LABEL_12:
DbgPrintEx(6, v11, L"\n", v7);
return 0;
}
return 1;
} 来自vgk
|
活跃值:
(5076)
能力值:
( LV9,RANK:270 )
|
-
-
5 楼
咋回事儿啊
char __fastcall LocatePteBase()
{
unsigned __int64& ...
vgk不是基本上全v了,这段咋找到的?
|
活跃值:
(2079)
能力值:
( LV3,RANK:35 )
|
-
-
6 楼
MmPteBase 不是有这玩意吗
|
活跃值:
(1456)
能力值:
( LV2,RANK:15 )
|
-
はつゆき
2022-5-14 18:33
-
7 楼
|
活跃值:
(21)
能力值:
( LV9,RANK:289 )
|
-
-
8 楼
hzqst
vgk不是基本上全v了,这段咋找到的?
全程序vm还原 就像be
|
|
|