哈哈,微软的CE6简直是大门洞开啊

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

最近通过看LocalAlloc的问题结合之前研究如何用AP去读写CE6的物理地址的过程,发现CE6的内核存在巨大安全隐患。
如果说CE5是蜗牛壳,那么CE6就是鸡蛋壳了,骚味动点脑筋,CE6的核心就能马上被你控制,下面简述几个CE6设计上的败笔。
败笔1:KDataStuct位置固定
稍微了解一点wince的都知道这个结构体吧,这个结构体在wince初始化的最早期的时候会由OAL先去初始化放置于一个“kernel才有特权”的专属地址,以CE6为例,它位于虚拟地址0xffffc800,此结构体放置大量关键内核信息,此败笔在于此地址固定,而且只需要得到“kernel特权”就可以访问此结构体。
败笔2:CE6的OAL和NK的global结构体
CE6和CE5最重要的区别之一就算OAL和kernel正式分家了,以前CE5因为OAL和Kernel打包成一个exe,外界很难进入和破坏里面的链接关系。但是CE6为了把OAL和kernel.dll分开而又要考虑让它们之间可以建立一些必要的联系,创造性的设计了两个新结构体:_NKGLOBAL和_OEMGLOBAL(nkglobal.h/oemglobal.h)。在新的设计中,kernel只提供和平台无关的一些内核算法,OAL只提供和平台相关的函数接口,kernel提供的API在被上层调用后如果需要访问硬件就必须要透过oemglobal去调用oal的函数,反过来OAL需要做一些关键调用比如entercriticalsection的时候,又要依赖kernel提供的nkglobal来调用kernel的函数。但是如果这两个结构体暴露到外部就非常危险,因为结构体上面的函数指针如果被篡改,那么kernel和oal就会被牵着鼻子走了。
败笔3:Kdatastruct结构体包含了oal和nk的global结构体
微软为了方便启动过程中oal找到nkglobal,把nkglobal和oalglobal的指针都挂在了Kdatastruct中,只要具有内核权限的代码都可以找到它们。
败笔4:用户态名存实无
虽然微软规定了所有AP都是用户态,但是AP却可以自己挂载一个内核态的驱动,这个驱动可以作为内鬼去帮助用户态的AP做任何事情。通过ARMCE兄弟们前期的探索,我们已经知道,我们可以用一个AP去读写CE6的物理地址。

综合上述败笔,我们可以做如下想象:
1.我们先写一个AP和一个傀儡内核态驱动,AP动态注册和加载这个自己的内核驱动。
2.在内核态驱动里面去fetch那个位于0xffffc800的Kdata结构体。
3.内核态驱动从Kdata结构体里面拿到NKglobal和Oemglobal结构体
4.撰写傀儡函数于内核态驱动
5.篡改oemglobal或者nkglobal的相关函数指针指向傀儡函数
6.傀儡函数提供数据给AP
这就实现了对CE6的一个简单破*解。
哈哈,是不是很有意思啊,CE6大门洞开啊。

 

打个浅显一点的比方,只针对实际应用,大体过程参考1楼。
比如你想监视M8上面的所有的kerneliocontrol的调用。
你可以这样偷梁换柱。
用傀儡内核驱动找到pOemglobal->pfnOEMIoctl指针,先存下来。
然后自己实现一个傀儡OEMIoctl,接口要和kerneliocontrol一致,做的事情就是先得到调用参数记录下来,然后再去call实际的pfnOEMIoctl指针。
然后把傀儡OEMIoctl的地址写到pOemglobal->pfnOEMIoctl
万事大吉了。
【2026大厂AI岗位面试真题】算法岗(含完整答案) -LLM 基础理论、训练工程与微调 2026 届大厂 AI 算法岗面试真题合集,含完整答案,分两条主线:LLM 基础与训练工程(BPE/WordPiece、MoE 原理与负载均衡损失推导、Scaling Laws、bf16/fp16、参数量与 FLOPs 估算、ZeRO 三阶段、7B 推理显存估算、Qwen/DeepSeek 创新点);微调与 PEFT(SFT 数据构建清洗、loss mask、LoRA 原理与 r 选择、QLoRA 与 NF4 量化、DPO 偏好数据、蒸馏与裁剪)。每题配追问与加分点,可直接背诵突击。 阅读详情

相关推荐

转:哈哈,微软CE6简直是大门洞开

原文地址:http://www.armce.com/bbs/thread-1131-1-3.html最近通过看LocalAlloc的问题结合之前研究如何用AP去读写CE6的物理地址的过程,发现CE6的内核存在巨大安全隐患。如果说CE5是蜗牛壳,那么CE6就是鸡蛋壳了,骚味动点脑筋,CE6的核心就能马上被你控制,下面简述几个CE6设计上的败笔。败笔1:KDataStuct位置固定稍微了解一点wi

bbw2008的专栏 878

算法44,模拟算法,数青蛙

动态获取当前字符对应的数组下标,实现通用化状态转移。用数组模拟哈希表记录每个字符的等待状态,直接定义长度为 5 的数组,通过多个。存储字符与下标的映射关系,通过。手动判断当前字符并转移状态。)记录空闲/新增青蛙数。

sheshibenniaodan的博客 152

Leecode#26刷题之删除有序数组中的重复项

给你一个的数组nums,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k。去重后,返回唯一元素的数量k。nums的前k个元素应包含的唯一数字。下标k - 1之后的剩余元素可以忽略。系统会用下面的代码来测试你的题解:// 输入数组// 长度正确的期望答案// 调用i < k;i++) {如果所有断言都通过,那么您的题解将被。函数应该返回新的长度2,并且原数组nums的前两个元素被修改为1。

babyiu5201314的博客 162

强化学习的数学原理 | 赵世钰 | 西湖大学 | 笔记 | Lecture 7 | Part 2 | 时序差分方法(TD 算法介绍)

强化学习的数学原理 | 赵世钰 | 西湖大学 | 笔记 | Lecture 7 | Part 2 | 时序差分方法(TD 算法介绍)

周同学的博客 203

算法 Day1-数组 / 哈希 + 双指针

哈希表是一种通过哈希函数将 Key 映射到存储位置的数据结构,底层通常基于桶数组实现。在查询一个 Key 时,首先计算 Key 的 hash 值,再根据 hash 值定位到对应的 bucket,而不需要像线性表一样从头遍历,因此在哈希分布比较均匀的情况下,查找、插入和删除的平均时间复杂度可以达到 O(1)。但是不同 Key 可能映射到同一个位置,这叫哈希冲突。常见解决方式包括链地址法和开放寻址法。因此哈希表的 O(1) 一般指平均时间复杂度,极端冲突情况下性能可能退化。

shirsl的博客 91

算法(1)——双指针

常见的双指针有两种形式:1. 对撞指针 2. 快慢指针对撞指针: 两个指针从两端向中间移动,一般用于顺序结构,也称左右指针。终止条件:两个指针相遇或者错开快慢指针:使用两个速度不同的指针在序列结构上移动,又称龟兔赛跑算法,有效用于处理数组、环形链表或出现循环往复的情况。常用的实现方式:慢的指针移动一位,快的指针移动两位。

BIII__的博客 50

研读《一种用于随机值脉冲噪声的检测统计量》中想到的一种软光敏实现算法

基于红外环境下RGB响应趋近的特性,结合raw域分块统计与对数函数放大差异的特性,提出一种新式软光敏算法。通过计算log₂(R/G)、log₂(B/G)并扣除标定偏移量,使红外下比值趋近0,可见光下显著增大;统计超过阈值的块占比,结合AE参数判断可见光强度,实现IRCUT切换。该方法利用对数增强敏感度,提升鲁棒性与准确性。

大熊 499

揉扁搓圆transformer架构:NAG优化器算法详解

本文描述了大模型优化器NAG算法的原理

tyler_download的专栏 69

算法】双指针与滑动窗口(三):相向双指针——比较、排除、收缩

相向双指针的全部灵魂一句话:一次比较必须买到"排除一整排候选"的信息,买不到就退化。

a18792721831的博客 248

第【123】期--基于LDPC码的数字通信系统译码算法性能对比分析--matlab完整代码

本文构建了一个完整的数字通信系统仿真平台,采用脉冲编码调制(PCM)实现模拟信号数字化,并结合规则低密度奇偶校验码进行信道编码,在AWGN信道下对比了置信传播、分层置信传播和最小和三种LDPC译码算法的性能。通过蒙特卡洛仿真,统计了不同信噪比下的误码率、重建信号质量及编码增益。结果表明,LDPC编码可显著降低误码率,分层置信传播在收敛速度与性能间取得最优平衡,最小和算法以较低复杂度获得接近最优的性能,为实际系统设计提供了有价值的参考。

qq_35027690的博客 300

LeetCode.454.四数相加 ||

我一开始做的时候是没有加这个判定条件的,但也能通过,原因就是当mp_AB[key]不存在时,会分配内存初始化一个value为零的值,加了这个判定之后按道理来说,应该减少了这些开销,速度会更快一点,但是并没有。这道题就是讲四个数转换为两个组,再利用map,思路就跟之前的二数相加一样。所以加了还是没问题的,保险一点。有一点要注意的就是,反而速度大降,本质是。

mmmmath_3的博客 115

LeetCode.350.两个数组的交集II

这道题就需要有重合的出现了,所以不能用set集合了,转而用map和数组都可以。这里分享一个map的做法,顺便复习一下写法。

mmmmath_3的博客 237

数据结构——快速排序

快速排序通过分治思想,以基准值将序列划分为左右两部分,左小右大,递归处理子序列直至有序。常用“挖空法”实现单次划分,利用双指针从两端向中间扫描交换元素,最后将基准值放入正确位置。也可用辅助数组实现非递归版本,借助栈模拟递归过程。优化策略包括小数据量改用插入排序、三数取中法选基准值,提升性能。整体时间复杂度平均为O(n log n),是高效通用的排序算法

2401_89246663的博客 75

CCFCSP算法专栏:关于二分

left = mid + 1 # mid 可能是答案,但先往右探else:return left - 1 # 注意减 1为什么 return left - 1?因为这里的left是“第一个 > target 的位置”,所以最后一个 <= target 的位置是left - 1。场景区间循环条件更新方式返回值精确查找[l, r]l <= rl=mid+1r=mid-1循环内 return mid,否则 -1左边界(第一个 >= target)[l, r)l < rl=mid+1。

Chester_1999的博客 167

02-regmix具体观-算法与实现剖析

本文深入解析RegMix中的五大核心技术点,按“论文→代码→例子”三步递进:1)基于Dirichlet分布与拒绝采样生成512个物理合理的配比;2)用LightGBM回归拟合“配比→损失”关系,捕捉非线性交互;3)通过top-k模拟实现虚拟最优搜索;4)打包与加权重采样高效喂数据;5)工程优化(融合内核、W&B-only)压低训练开销。全流程依托数学原理与真实代码,揭示如何以系统化方法实现高效混合训练。

ld326的专栏 101

OpenCV中利用EigenFace算法进行人脸识别

本实验基于EigenFace算法,使用4张人脸图像(黎明2张、安志杰2张)训练识别器,通过OpenCV实现灰度化、尺寸统一、PCA降维及特征脸提取。利用cv2.face.EigenFaceRecognizer_create()进行训练与预测,对测试图像输出身份标签与置信度,并在图像上标注结果。核心原理为将人脸投影至低维特征脸空间,通过欧式距离匹配识别。实验完整演示了人脸识别流程,有助于理解PCA降维与分类机制,但需优化阈值与数据量以提升实用性。

yyk33324的博客 151

洛谷 P2835:刻录光盘 → Kosaraju 算法 + 缩点

在有向图中,如果几个结点互相可达(强连通),那么只需要给其中任意一个人光盘,整个强连通分量内的所有人就都能获得资料。因此,我们可以把一个强连通分量( SCC )看作一个整体(缩点)。 缩点之后,原图变成一个有向无环图( DAG )。在 DAG 中,如果某个 SCC 的入度为 0 (没有人能给它传递资料),那我们就必须给它一张光盘,否则这个 SCC 永远无法获得资料。 因此,答案就是:缩点后入度为 0 的 SCC 的个数。

hnjzsyjyj的专栏 469

算法】链表(二):链表上的双指针——变速、异链与定距,和一份路程账本

本文系统解析链表双指针的三大形态:变速(快慢指针判环,速度差1为关键)、异链(两指针跳链补路程,nil会师巧解相交)、定距(保持间距定位倒数节点)。核心思想是“路程账本”——通过等距、补长、绕圈等策略在时间轴上凑出相等路径。结合LC141/142/160/19四题,揭示指针比较认地址不认值、判定顺序、边界处理等深层逻辑,强调“理解配置”优于“机械套用”。

a18792721831的博客 265

带脉冲检测器的通用噪声去除算法

本文提出一种基于排序绝对差(ROAD)统计量的脉冲噪声检测方法,并将其嵌入双边滤波器,构建出可同时抑制高斯噪声与脉冲噪声的三边滤波器。该方法通过自适应调节权重,实现对类脉冲像素的有效识别与抑制,兼具边缘保护与去噪能力。实验表明,三边滤波器在主观视觉质量与峰值信噪比(PSNR)上均优于现有算法,尤其在混合噪声场景下表现突出,具备良好的通用性与实用性。

大熊 238
上一篇: CE6实体内存管理之找到Free page
下一篇: 注意,CE6下OAL内无法调用API
fredzeng
博客等级 码龄20年 19粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值