-
-
[分享]获取win10x64 PTE_BASE随机化源码。
-
发表于:
2020-6-19 01:10
6798
-
[分享]获取win10x64 PTE_BASE随机化源码。
群里有人说大表哥逆向TesSafe.sys获取win10x64 PTE_BASE随机化的方法不管用了,我直接贴源码吧【伸手党直接复制粘贴就好】
BOOLEAN InitializePteBase()
{
__debugbreak();
PEPROCESS Process;
auto status = PsLookupProcessByProcessId((HANDLE)4, &Process);
if (NT_SUCCESS(status))
{
ObReferenceObject(Process);
KAPC_STATE kapc_state = {0};
KeStackAttachProcess(Process,&kapc_state);
PHYSICAL_ADDRESS phaddr = { 0 };
phaddr.QuadPart = __readcr3();
**EptCommonEntry* VirtualAddr = reinterpret_cast<EptCommonEntry*>(PAGE_ALIGN(MmGetVirtualForPhysical(phaddr)));**
if (!VirtualAddr)
{
KeUnstackDetachProcess(&kapc_state);
return FALSE;
}
ULONG_PTR iItem = 0;
ULONG_PTR paddr;
while ((paddr = VirtualAddr[iItem].fields.physial_address) != PfnFromPA(phaddr.QuadPart))
{
DbgPrint("iItem:%d paddr:%p phaddr:%p\n", iItem, paddr, PfnFromPA(phaddr.QuadPart));
iItem++;
if (iItem >= 512)
{
KeUnstackDetachProcess(&kapc_state);
return FALSE;
}
}
DbgPrint("----------------------*********************----------------------------------------\n");
PTE_BASE = static_cast<ULONG64>((iItem + 0x1FFFE00i64) << 39i64);
DbgPrint("PTE_BASE:%p\n", PTE_BASE);
PDE_BASE = static_cast<ULONG64>((iItem << 30i64) + PTE_BASE);
PPE_BASE = static_cast<ULONG64>((iItem << 30i64) + PTE_BASE + (iItem << 21i64));
PXE_BASE = static_cast<ULONG64>((iItem << 12i64) + PPE_BASE);
DbgPrint("----------------------*********************----------------------------------------\n");
KeUnstackDetachProcess(&kapc_state);
return TRUE;
}
return FALSE;
}
我之前也看了,win7x64没有问题的,但是我在win10 2019上弄的时候,真的搜索不出来,之后看了 MmGetVirtualForPhysical 这函数,里面有这样的代码
and ecx, 0FFFh
sub rax, rdx
sar rax, 10h
add rax, rcx
第一条代码and ecx, 0FFFh 这意思就是取物理地址的后12位,add rax, rcx 之后加上页对齐就好了。
还不懂?意思就是从readdr3() 取得的物理地址不是页对齐,如:0x00AAB002 = readdr3()。
得到了虚拟地址之后是:如,0xFFFFF67000008000+2 = 0xFFFFF67000008002;为什么要有个2?我就没研究了,各位去研究吧。
0xFFFFF67000008000 = PAGE_ALIGN(0xFFFFF67000008002);
while(0xFFFFF67000008000[item] & 0xFFFFFFFFF000 != phaddr.QuadPart)
{
//-----------------------------
//-----------------------------
}
这样就能搜到了。
总结:不是什么技术,群里有人说这个,我直接贴在这里,最后:大表哥,永远滴神。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)