XMAN2017冬 万箭穿心 writeup

翻记录发现这题分类是 mobile,没人做出来过,《万箭穿心》writeup献给各位老铁。

文件链接:https://github.com/LeadroyaL/attachment_repo/tree/master/xman_2017/

一、万箭穿心

不知道这个和mobile 主题有什么关系,只是一个 arm 的可执行文件,可以在手机上运行。

官方的 hint 是题目中有2个二维数组,表示2组坐标,共17个。

上来先读了长度18以内的输入,观察一下是有结构体的,经过多次测试,结构体大小给4个 int32刚好,前2个 int32表示 x方向的int64,后2个int32表示y方向的 int64。我们不把 int64标记出来是因为 F5以后实在太丑了。中间很多函数都是以点为单位的,而且发现 startPoint 的y 全都是0x80,currentPoint的 x 全都是0。 输入是按照 char 去挨个处理的,每个 char 与startPoints[i]targetPoints[i]强相关,currentChar 表示的点的 x 为零,y 的高位为0,低位为 currentChar,所以涉及到3个点。 稍微猜一下,三点共线,但不一定有整数解,先试试吧。

(ox24, 0x80),(0x20,0x68),(0,??),求得??=-88,取个相反数是88,对应 ASCII 的"X"。嗯,很合理。 写个 python 把其他的也算一下吧

1
2
3
4
5
6
7
In [24]: for i in range(len(setA)/2):
...: p1 = setA[i*2:i*2+2]
...: p2 = setB[i*2:i*2+2]
...: x1, y1, x2, y2 = p1[0], p1[1], p2[0], p2[1]
...: print chr(int(1.0*(y1-y2)/(x1-x2)*x1-y1) ),
...:
X C T F { h e l l o _ w o r l d }

噗,flag 就在这啊。 不知道为什么当初没人做出来,可能头铁去逆向了吧。