能力值:
( LV2,RANK:10 )
|
-
-
2 楼
Thanks for share!
|
能力值:
( LV1,RANK:0 )
|
-
-
3 楼
pte hook 要隔离一个PML4E ,一个PML4E控制512G空间 如果系统在你隔离PML4E后在这个512G空间中又分配了新的内存给系统使用 被隔离进程怎么同步?
最后于 2025-8-3 23:16
被杰森66988编辑
,原因:
|
能力值:
( LV1,RANK:0 )
|
-
-
4 楼
杰森66988
pte hook 要隔离一个PML4E ,一个PML4E控制512G空间 如果系统在你隔离PML4E后在这个512G空间中又分配了新的内存给 ...
这个可以先隔离。然后当自己用的时候再判断修改部分内容是否更新,更新就重新隔离,确保新内存分配的实时同步。
|
能力值:
( LV1,RANK:0 )
|
-
-
5 楼
毕竟这个只是用来一次性的函数钩子,可以考虑其他方法,比如:apc调用劫持(我也忘记什么名了,流程是修改apc执行后回去的地址指向自己写的地址,当执行指定地址的时候调用apc然后apc返回到hook的地方),回调hook,异常,ept等等,但大都是通过回调机制(我了解的技术,不深)
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
杰森66988
pte hook 要隔离一个PML4E ,一个PML4E控制512G空间 如果系统在你隔离PML4E后在这个512G空间中又分配了新的内存给 ...
大哥问题好犀利哦。怎么我没想过这个问题?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
mb_kbmkpcnd
这个可以先隔离。然后当自己用的时候再判断修改部分内容是否更新,更新就重新隔离,确保新内存分配的实时同步。
hook了后要每个页表比对吗?那太麻烦了吧。 如果监控分配内存的函数也不对,工作量太大了。 是不是我的PTE HOOK一直报错就是这个原因呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
mb_kbmkpcnd
这个可以先隔离。然后当自己用的时候再判断修改部分内容是否更新,更新就重新隔离,确保新内存分配的实时同步。
楼主大哥,这个代码我摘到我的工程中,一样的蓝屏。
可不可以帮我看看我的代码哪里有问题哦,谢谢。 我的代码
|
能力值:
( LV1,RANK:0 )
|
-
-
9 楼
老年人学C._.
楼主大哥,这个代码我摘到我的工程中,一样的蓝屏。
可不可以帮我看看我的代码哪里有问题哦,谢谢。 我的代码
每个版本内核数据结构排布都有可能有问题,你运行一段时间就报错,你确定获取的结构没问题?先通过windbg确定结构没问题。我这个你也运行报错的原因大概是没替换内核数据结构?毕竟我这个是适用于win10 10240版本。
|
能力值:
( LV1,RANK:0 )
|
-
-
10 楼
老年人学C._.
楼主大哥,这个代码我摘到我的工程中,一样的蓝屏。
可不可以帮我看看我的代码哪里有问题哦,谢谢。 我的代码
先暂定你代码有问题跟你电脑环境无关,先检测你内核结构是否符合版本,再检测你分配页表和分割页表操作没问题。你现在最好是给你的代码添加调试信息函数来验证你的操作是否正确再怀疑是否是电脑环境的问题
|
能力值:
( LV1,RANK:0 )
|
-
-
11 楼
老年人学C._.
楼主大哥,这个代码我摘到我的工程中,一样的蓝屏。
可不可以帮我看看我的代码哪里有问题哦,谢谢。 我的代码
报错误码0x4E,0x1A,0x3B都大概率是分配页表出问题的
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
mb_kbmkpcnd
先暂定你代码有问题跟你电脑环境无关,先检测你内核结构是否符合版本,再检测你分配页表和分割页表操作没问题。你现在最好是给你的代码添加调试信息函数来验证你的操作是否正确再怀疑是否是电脑环境的问题
好的好的,谢谢大哥提供的思路
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
mb_kbmkpcnd
每个版本内核数据结构排布都有可能有问题,你运行一段时间就报错,你确定获取的结构没问题?先通过windbg确定结构没问题。我这个你也运行报错的原因大概是没替换内核数据结构?毕竟我这个是适用于win10 ...
大哥,我不理解你的代码中这几句是什么意思 // 创建新的PML4E
PML4E* new_pml4 = (PML4E*)VaPdpt; // 重用VaPdpt内存
PML4E* old_pml4 = (PML4E*)pml4_va;
RtlCopyMemory(new_pml4, old_pml4, PAGE_SIZE);
new_pml4[pml4e_index].AsUlonglong = 0;
new_pml4[pml4e_index].Present = 1;
new_pml4[pml4e_index].ReadWrite = 1;
new_pml4[pml4e_index].PageFrameNumber = virtual_to_physical(VaPdpt) >> 12;
// 保存当前CR3
QWORD old_cr3 = __readcr3();
// 写入新CR3
QWORD new_cr3 = virtual_to_physical(new_pml4);
__writecr3(new_cr3);
// 立即恢复原CR3
__writecr3(old_cr3); 为什么要重建PML4这个表呢,不是说好了PTE HOOK只修改PML4中的pdpte表项吗?
还有重建了写入新的CR3后,立即要恢复到原来的CR3呢?
我执行到这里就双重错误了。
|
能力值:
( LV1,RANK:0 )
|
-
-
14 楼
老年人学C._.
大哥,我不理解你的代码中这几句是什么意思 // 创建新的PML4E
PML4E* new_pml4 = (PML4E*)Va ...
代码中重建PML4的原因是为了实现进程内页表隔离过PG,双重错误可能是 PML4E* new_pml4 = (PML4E*)VaPdpt; 中的VaPdpt这个问题
|
能力值:
( LV1,RANK:0 )
|
-
-
15 楼
写错了,同一个物理页 VaPdpt 既作为PML4,又作为PDPTE发生了自引用,分配内存写错了
|
能力值:
( LV1,RANK:0 )
|
-
-
16 楼
老年人学C._.
大哥,我不理解你的代码中这几句是什么意思 // 创建新的PML4E
PML4E* new_pml4 = (PML4E*)Va ...
我是虚拟机测试的,估计报错被忽略了
|
|
|