首页
社区
课程
招聘
[原创]午时·永数囚笼 WriteUp
发表于: 1天前 185

[原创]午时·永数囚笼 WriteUp

1天前
185

主函数链中的重要函数:

该题目最坑点:sub_14000330c 的返回值不决定是否校验成功,其运行 4 个 worker,保存四个 60-byte record 后全部送入 sub_140002940。因此不能将:

看作失败,最终正确链路应当是:

sub_140002880 的 clean 输出通过独立 Unicorn 执行确认是固定值:

.vseal 导出的 integrity clean values:

最终全链机器码验证里,对 OS/debug helper 只模拟已独立验证过的 clean 环境返回,没有 patch compare / worker state / outer result。

26-byte 输入先构造成 8 个 32-bit word:

所以逆 preprocessing 后必有固定 sentinel:

之后是 whitening + 8 轮 ARX,核心操作只有:

全部可逆。实现 mix/unmix 后做了随机 round-trip 验证。

worker 实际消费的 transformed state 记为:

另有 12-bit:

最终解:

sub_140002940 的最终四 word 在 compare 前必须为:

继续逆其 128-bit aggregator,只留下 4 个 32-bit worker digest h_i,Z3 得到唯一解:

这样问题从“找 26-byte 输入”降成“让四个 worker record 分别给出这些 fingerprint”。

worker record 为 15 个 dword:

机器码确认 sub_140002940 的 tail fold 使用真实的 s7..s14

单 worker digest:

直接构造四个 worker 的 clean-success record:

送入真实 record digest:

与 outer target:

比较后只有:

精确相等。

因此 a3=2 / variant2 是真实 clean-validation core;其它三路只是 fail/error fingerprint。

机器 pre-v211 compare 给出 worker2 clean expected keys:

逆 local tail permutation,并撤销 final-key correction,得到 worker2 的 32-byte raw output target:

VM 实际逻辑结构:

也就是 32 个逻辑轮,每轮 8 条 VM instruction,最后终止。

真正跨轮的数据状态只保留:

建立两套模型:

修正 opcode6 的真实机器语义后,对:

逐组比较:

结果:

随后真实 digest / v211 也分别做了随机机器码对拍。

只有这些 iter 含 opcode22:

其余 20 轮没有 secondary read。

给定当前 v66 与目标 raw byte,可以逆 accumulator ARX,唯一恢复 primary S byte,不需要 256 枚举。

primary / secondary byte 与目标 output 存在可逆 8-bit relation。

搜索始终维护:

若同一 index 被推出两个不同 byte:立即剪枝。

clean path 又要求 32 次 primary index 覆盖 0..31,所以:

重复 primary index 可安全剪枝。

节点统计显示真正 heavy subtree 集中在:

这四次 opcode22 的 secondary index 正好覆盖:

各一次。

定义:

于是复杂度按:

因此按:

分层搜索。这只是完备搜索顺序优化,不改变 verifier。


冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回