-
-
[原创] KCTF 2021 Spr. 第二题 未选择的路
-
发表于:
2021-5-11 21:00
9246
-
[原创] KCTF 2021 Spr. 第二题 未选择的路
《未选择的路》 (弗罗斯特)
黄色的树林里分出两条路,
可惜我不能同时去涉足,
我在那路口久久伫立,
我向着一条路极目望去,
直到它消失在丛林深处。
但我却选择了另外一条路,
它荒草萋萋,十分幽寂,
显得更诱人,更美丽;
虽然在这条小路上,
很少留下旅人的足迹。
那天清晨落叶满地,
两条路都未经脚印污染。
啊,留下一条路等改日再见!
但我知道路径延绵无尽头,
恐怕我难以再回返。
也许多少年后在某个地方,
我将轻声叹息将往事回顾:
一片树林里分出两条路--
而我选择了人迹更少的一条,
从此决定了我一生的道路。
【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到操作码的转换过程,
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)