CONFidence2019-oldschool

一道8086汇编题。

不知道还会开放多久的比赛地址

运行一波程序,结合汇编进行分析,8086汇编不是很会,看了很久才看出程序大概是个什么逻辑。

程序一开始会让我们输入,输入的字符仅限于十六进制中存在的字符。当输入到达18个时就会终止输入并开始输出,同时题目给了我们一个flag.txt,里面的字符跟输出的是差不多的。所以猜测我们输入正确的flag就会打印出和flag.txt中一样的内容。

flag.txt的内容:

1
2
3
4
5
  4 {4pp   
p {k4{ E
p 44p{ p
4 p
S

又读了很久汇编后,发现输出的字符是以seg000:000~0a1的值为index,对p4{krule_ctf}取值输出的。

不妨对flag.txt的内容进行替换一下。

1
2
3
4
5
  2 3211   
1 3423 E
1 2213 1
2 1
S

仔细分析一下程序发现其实这是一个一笔画或者说迷宫,S是起点,E是终点。数字代表着要走到这个地方的次数,输入的每两位会控制走四步,并且只能斜着走,不过不会超过边界,例如从第一行的3的位置往右上走,只会往右移一格。

知道了规则之后就很简单了,手动走了一下得到了正确的输入,但是却不是正确的flag,阅读题目要求发现输入的ascii码转字符之后要满足p4{[0-9a-z]+},所以开始3个最后一格ascii码值是固定的,中间的ascii码值也有范围要求。

以q代表向左上,w代表向右上,a代表向左下,s代表向右下,找到了一条满足要求的路径:qqswqwsqsaswwqawwqswwaawaqsqawawwssw

这条路径所需的输入为:70347b61716932667d

转字符串得到:p4{aqi2f}

一开始没有注意题目的要求,很久没能找到正确的flag,并且也不会编程根据这个图寻找flag,只能手动找路径。比赛结束了一会才找到(说不定正确)的flag,属实弟弟行为。

文章目录
|