首页
社区
课程
招聘
[原创]逆向TesSafe.sys有感:鹅厂是如何定位随机化的PTE_BASE
发表于: 2019-9-4 12:02 25383

[原创]逆向TesSafe.sys有感:鹅厂是如何定位随机化的PTE_BASE

2019-9-4 12:02
25383
收藏
免费 19
支持
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  毕达哥拉斯   +5.00 2019/09/05
最新回复 (47)
雪    币: 1402
活跃值: (341)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
表哥牛批嗷
2019-9-23 11:50
0
雪    币: 1402
活跃值: (341)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
xiaofu 试了下,可以用,牛批
什么编辑器啊 还能有表情
2019-9-23 11:50
0
雪    币: 3129
活跃值: (3668)
能力值: ( LV8,RANK:158 )
在线值:
发帖
回帖
粉丝
28
枚举PXE索引获取ptebase

PVOID64 KGetPteBase_SEH() {
       ULONG64 Cr3 = MmiGetCr3();;
       ULONG64 Result = 0;
       for (int i = 0; i < 512; ++i) {
               ULONG64 Page_Table = MmiMakeVirtualAddress_PXE(i);
               MmiSetPteBase(Page_Table);
               PULONG64 pxe_va = MmiGetPxeAddress(0);
               ULONG64 Entry = 0;
               //Entry = pxe_va[i];
               //Sleep(100);
               if (!MmIsAddressValid(pxe_va))continue;
               if (!MmiSafeMemcpy(&Entry, &pxe_va[i], 8))continue;
               if (MmiEntryToAddress(Entry) == Cr3) {
                       Result = Page_Table;
                       break;
               }
               
       }
       MmiClearPteBase();
       return Result;
}
最后于 2019-10-27 21:33 被cslime编辑 ,原因: 枚举PXE索引
2019-10-27 21:32
1
雪    币: 6172
活跃值: (4947)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
29
mark
2019-11-2 01:05
0
雪    币: 174
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
大表哥牛逼
2019-11-16 03:30
0
雪    币: 1402
活跃值: (341)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
表哥出手 鹅厂失眠
2019-11-19 12:01
0
雪    币: 184
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
不懂明文包怎么搜,有现成的特征吗大佬
2019-11-25 17:21
0
雪    币: 1129
活跃值: (2761)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
33
大佬牛皮,学习思路
2019-11-25 18:02
0
雪    币: 245
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
ULONG64 HvFindPTE()
{
       // Get PTE_BASE from MmGetVirtualForPhysical
       UNICODE_STRING ApiName = {0};
       RtlInitUnicodeString(&ApiName, L"MmGetVirtualForPhysical");
       PVOID p_MmGetVirtualForPhysical = MmGetSystemRoutineAddress(&ApiName);
       if (!p_MmGetVirtualForPhysical) {
               return;
       }

       static const UCHAR kPatternWin10x64[] = {
               0x48, 0x8b, 0x04, 0xd0,  // mov     rax, [rax+rdx*8]
               0x48, 0xc1, 0xe0, 0x19,  // shl     rax, 19h
               0x48, 0xba,              // mov     rdx, ????????`????????  ; PTE_BASE
       };

       __try
       {
               for (ULONG i = 0; i < 255; i++)
               {
               
                       //文雅而不失响亮
                       if (RtlCompareMemory(p_MmGetVirtualForPhysical, kPatternWin10x64,10) == 10)
                       {
                               HvUtilLogDebug("ok %d \n",i);
                               (ULONG64)p_MmGetVirtualForPhysical = *(PLONG64)((ULONG64)p_MmGetVirtualForPhysical + 10);
                               return (ULONG64)(p_MmGetVirtualForPhysical);

                       }
                       (ULONG64)p_MmGetVirtualForPhysical = (ULONG64)p_MmGetVirtualForPhysical + 1;
               }
       }
       __except (1)
       {
               HvUtilLogDebug("Find err");
       }

}
2020-1-30 12:34
0
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
36
老哥 您能否写个LOLff  或者可以加一下大佬的联系方式吗
2020-3-13 14:09
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
37
大佬能否留个联系方式交流下
2020-3-14 21:31
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
路过留个mark
2020-3-14 22:25
0
雪    币: 4562
活跃值: (3238)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
路过留个mark
2020-3-16 02:09
0
雪    币: 1420
活跃值: (2171)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
40
周壑的那个方法是真的野,我都不知道 他是怎么想到的。
2020-4-11 00:13
0
雪    币: 830
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
xiaofu 试了下,可以用,牛批
我算出来的结果跟你一样,为啥我PTE BASE里没有物理页呢 大佬
2020-5-10 16:12
0
雪    币: 6509
活跃值: (2382)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
43
测试了win10 1803已经没有页表自映射了。
2020-6-18 17:29
0
雪    币: 41
活跃值: (86)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
44
yirucandy 测试了win10 1803已经没有页表自映射了。

1803这不还是自映射嘛

2020-6-18 18:51
0
雪    币: 6509
活跃值: (2382)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
45

原来是__readcr3()取出来末尾有个标记位,要置0再比较,跟操作系统版本没关系。
可以看https://bbs.pediy.com/thread-260177.htm这篇帖子。

最后于 2020-6-19 08:27 被yirucandy编辑 ,原因:
2020-6-19 08:26
0
雪    币: 12356
活跃值: (5879)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
46
wbaby1988 不是一个导出函数直接可以获取么 KeCapturePersistentThreadState
吐槽一下,这函数兼容性其实不咋地,首先PTEBASE在正式版本中是14393之后才加入KdDebuggerDataBlock,其次14393及之后ForceDumpDisabled这个全局变量能决定这个函数是否拷贝KdDebuggerDataBlock,ForceDumpDisabled是由注册表“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl”有关项控制的,只有开机时的IoInitSystem流程才会修改它。要保证KeCapturePersistentThreadState在所有机子上成功执行,必须先定位ForceDumpDisabled并强制给它设为1
2020-9-28 16:39
0
雪    币: 1475
活跃值: (14652)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
47
表哥牛逼奥
2021-6-6 23:30
0
雪    币: 6
活跃值: (1146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
小伙子很厉害哦
2021-6-7 08:27
0
游客
登录 | 注册 方可回帖
返回
//