首页
社区
课程
招聘
[分享]获取win10x64 PTE_BASE随机化源码。
发表于: 2020-6-19 01:10 6798

[分享]获取win10x64 PTE_BASE随机化源码。

2020-6-19 01:10
6798

群里有人说大表哥逆向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期)

收藏
免费 3
支持
分享
最新回复 (14)
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
2
2是flag
2020-6-19 02:21
0
雪    币: 3574
活跃值: (4719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1.直接导出函数能直接获取PTE 兼容WIN7到任何WIN10版本 他不香嘛
2.Win10 2019是什么鬼? 你想说20H1 2004(19041)?
2020-6-19 04:01
0
雪    币: 688
活跃值: (204)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看到KeStackAttachProcess,就知道你在玩古董.
新版的WIN10(2004+),以上操作已经被禁用,所以这段代码自然是无效(不管用)的.
2020-6-19 07:29
0
雪    币: 2157
活跃值: (12639)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
5
听大表哥讲故事
2020-6-19 08:24
0
雪    币: 796
活跃值: (2049)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
syser 1.直接导出函数能直接获取PTE 兼容WIN7到任何WIN10版本 他不香嘛 2.Win10 2019是什么鬼? 你想说20H1 2004(19041)?
这种获取方式相对于特征码搜索来说,这种方法更稳定,特征码搜索的话,万一某个版本代码变动,特征码也会随着变动,这种方法不会。
2020-6-19 09:57
0
雪    币: 796
活跃值: (2049)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
syser 1.直接导出函数能直接获取PTE 兼容WIN7到任何WIN10版本 他不香嘛 2.Win10 2019是什么鬼? 你想说20H1 2004(19041)?
这种获取方式相对于特征码搜索来说,这种方法更稳定,特征码搜索的话,万一某个版本代码变动,特征码也会随着变动,这种方法不会。
2020-6-19 09:59
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
8
2是pcid的index
2020-6-19 10:14
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
9
2是pcid的index
2020-6-19 10:14
0
雪    币: 3574
活跃值: (4719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
のばら 这种获取方式相对于特征码搜索来说,这种方法更稳定,特征码搜索的话,万一某个版本代码变动,特征码也会随着变动,这种方法不会。
不需要啊 KeCapturePersistentThreadState 直接获取就行
2020-6-19 11:54
0
雪    币: 796
活跃值: (2049)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
syser 不需要啊 KeCapturePersistentThreadState 直接获取就行
这个也确实可以
2020-6-19 12:30
0
雪    币: 6124
活跃值: (4666)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
12
康康
2020-6-19 15:14
0
雪    币: 12363
活跃值: (5884)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
syser 不需要啊 KeCapturePersistentThreadState 直接获取就行
兼容性不如大表哥的方法,这函数只有在win10 14393之后的系统才能拿到ptebase,正好14393给这函数加了个ForceDumpDisabled=0的限制,没准以后巨硬还会加更多恶心的判断进去
2020-9-28 16:49
0
雪    币: 3574
活跃值: (4719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
hhkqqs 兼容性不如大表哥的方法,这函数只有在win10 14393之后的系统才能拿到ptebase,正好14393给这函数加了个ForceDumpDisabled=0的限制,没准以后巨硬还会加更多恶心的判断进 ...
确实是...
2020-9-29 00:10
0
雪    币: 48
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
EptCommonEntry结构体的定义和PfnFromPA的定义没有给出
2020-11-3 17:26
0
游客
登录 | 注册 方可回帖
返回
//