首页
社区
课程
招聘
[原创]2025 KCTF Magic_VM 第八题 暗云涌动设计思路
发表于: 2025-7-29 22:32 2525

[原创]2025 KCTF Magic_VM 第八题 暗云涌动设计思路

2025-7-29 22:32
2525

题目整体框架是一个vm虚拟机,包含栈相关、alu相关、以及内存操作相关的指令。

题目引入自由度较高的用户可控指针,寄存器的最高位即第63位作为标志位,当最高位为1时将寄存器的值作为一个指针地址,可以对其进行store写入以及load载出的操作。

正常情况下alu操作会对寄存器最高位进行校验,如果是两寄存器都是指针的alu操作则会将其最高位清空变为非指针值,而其中一个为指针时,会调用函数adjust_pointer进行校验会调整。


可以看到adjust_pointer函数只允许data、stack两种指针,其他非法指针会将其调整为data指针。


这里看似很安全,但实际未对两者都不是指针的情况进行校验,当两寄存器都不是指针,但是计算的结果能够将高位变成1时,就会使得构造出一个非法指针同时绕过检查。例如:

但是由于程序开启了pie保护,所以还需要泄露地址信息。

在先前的adjust_pointer函数分析时,有提到如果不是data段或者stack段就会返回默认的data段指针。


而其中data段是一个固定的0x200000地址,stack段则是malloc申请的堆地址。

由此,当我们调用adjust_pointer函数校验并调整指针时,如果指针不符合两个区间就会指向data段,因此我们可以通过该函数判断指针是否指向stack段。

题目有给到jump函数,因此我们可以通过只使用vmcode来遍历整个堆的可能地址空间,并找到合法的stack指针,从而得到堆地址。


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-8-31 12:17 被kanxue编辑 ,原因:
上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回