首页
社区
课程
招聘
[原创] KCTF 2021 Spr. 第二题 未选择的路
发表于: 2021-5-11 21:00 9270

[原创] KCTF 2021 Spr. 第二题 未选择的路

HHHso 活跃值
22
2021-5-11 21:00
9270


《未选择的路》 (弗罗斯特)

黄色的树林里分出两条路,

可惜我不能同时去涉足,

我在那路口久久伫立,

我向着一条路极目望去,

直到它消失在丛林深处。

但我却选择了另外一条路,

它荒草萋萋,十分幽寂,

显得更诱人,更美丽;

虽然在这条小路上,

很少留下旅人的足迹。

那天清晨落叶满地,

两条路都未经脚印污染。

啊,留下一条路等改日再见!

但我知道路径延绵无尽头,

恐怕我难以再回返。

也许多少年后在某个地方,

我将轻声叹息将往事回顾:

一片树林里分出两条路--

而我选择了人迹更少的一条,

从此决定了我一生的道路。


【0x100】望

    (下载、)解压、执行,如图;console应用,相对(KCTF 2021 Spr. 第一题)的10KB,777KB略大。

【0x200】切

    拖进IDA进行分析,环境(IDA Pro 7.5, Python 3.8)

    如图,自动定位到_main函数处;

    概览下上下文,不妨根据上述输出信息猜定几个全局变量(Hi_stdout,Hi_stdin)和函数命名(Hi_init,Hi_cout,Hi_cin),其意义未必完全贴合其名,只是初步接近。


上图尾部的业务逻辑有些费解,F5伪码能很好应对这种情形,可见实现的是strlen功能,如下图

【0x210】

    _main函数伪码如下

(1)在switch分支中,我们有理由猜测是vm或迷宫,稍微深入些分析,确定是迷宫无疑;

如下图,这是各行、列号从0开始,列号lv_col不超过9,行号不超过8的9行10列迷宫图,char map[9][10]

(2)其方向基础操作码有6个,分别为1,2,3,4,5,0,由于2、3、5、0着四个操作码考虑到行号奇偶属性,复用出8种操作,结合1、4两个操作,总共是6个操作码10种操作。如下图,为操作码对应的操作动作

操作动作方向示意图:

【0x220】

我们看下key到操作码的转换过程,


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 5307
活跃值: (9888)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
2
分析的很清楚了!
2021-5-12 13:28
0
游客
登录 | 注册 方可回帖
返回
//