2024 TFCCTF re 部分wp

SIGNAL

很有意思的题。附件拖入ida

问问gpt

解出很简单,拼凑起来即可

X8

x8拖入ida

稍微一调试,就能发现x8::vm::VM::run是关键,进去看看

再稍微一调试,就发现上图是更关键的部分,包含输入和输出部分,而那个instruction parse函数一看都引不起兴趣,所以核心是中间两个rdx和r15的call。进入调试部分

第一遍第一个call如上图所示,返回值al等于3,看名称应该是指令的长度,而且好像是cmp指令。第一遍第二个call如下图所示,看起来像是执行了mov指令

第二个call的参数rsi的内容如下,刚好对应program.bin文件的内容

多记录几条,方便总结规律。并且发现好像一直在改变rsi的内容

最后rsi的内容如下

然后就是输入,继续调试并且记录

不难发现,好像是逐个比较,详细追踪虚拟机的mov指令执行过程就能找到虚拟机的寄存器位置,下图中的0x31即为我的输入首个字符

发现好像就是输入与右边第一个字节异或后再与右边第二个字节比较,右边第二个字节还是经过一系列与输入无关的运算才得到的

那直接手搓就好了,问题是不可能只得到一位字符就让程序退出吧,肯定是希望无论对错,程序都能一直执行下去。那就要patch一下了,可以选择改虚拟机的cmp执行,原结果是cl,那直接赋值1就行了

VIRTUAL-REV

附件拖入ida

最后一个函数是输出flag部分,要满足五个数相等,而这五个数所在的数组即vm的内存和寄存器,需要构造合适的vm指令进行运算,最后得到这五个数

vm指令分为两种,有两个操作数的和只有一个操作数的,没有立即数寻址,只能在vm的内存(或者可以把内存全看成寄存器,也就是有七个寄存器)

理解函数作用是第一层,这一层就不多说,自己调试加理解,如上图所示,但里面那个shl左移指令好像是会多移一位,有点小坑。第二层是构造汇编指令,同时还要转成限定的助记符,这也不用多说,看脚本就完了

BRAVE TRAVELER

附件拖入ida

程序看着挺简单,但是有点脑洞。运行一看

发现好像左右括号都没有,明明看见了123和125。先提取所有的set插入操作

按照程序输出逻辑,确实不会输出左右括号,因为根节点写死为0了(queue的第一次push了0)。但如果按照flag的格式,又发现没有set里存放的是84即'T',只有一个84的根节点。换种思路,倒过来想,再看看125即'}',发现有而且能向上推,刚好到123即'{',bfs遍历即得

相关推荐
帅次几秒前
信息安全的容灾与业务持续&安全管理的措施
安全·网络安全·系统安全·密码学·网络攻击模型·安全威胁分析·安全架构
视觉震撼31 分钟前
RDP登录事件详细溯源分析脚本(兼容Windows PowerShell版本)
运维·网络·windows·网络安全·网络攻击模型·安全威胁分析·安全架构
Pluchon36 分钟前
硅基计划6.0 陆 JavaEE Http&Https协议
网络协议·tcp/ip·http·网络安全·https·udp·java-ee
Whoami!2 小时前
⸢ 拾伍 ⸥⤳ 安全数智化概念及建设思路
网络安全·信息安全·数智化·智能安全
記億揺晃着的那天12 小时前
六大 API 架构风格
架构·软件工程·graphql·rest api
NewCarRen15 小时前
自动驾驶与联网车辆网络安全:系统级威胁分析与韧性框架
网络·网络安全·自动驾驶
云知谷21 小时前
【经典书籍】《代码整洁之道》第六章“对象与数据结构”精华讲解
c语言·开发语言·c++·软件工程·团队开发
emma羊羊1 天前
【PHP反序列化】css夺旗赛
开发语言·网络安全·php
jenchoi4131 天前
软件供应链npm/pypi投毒预警情报【2025-11-09】
前端·安全·web安全·网络安全·npm·node.js
介一安全2 天前
【Frida Android】实战篇3:基于 OkHttp 库的 Hook 抓包
android·okhttp·网络安全·frida