翻记录发现这题分类是 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 就在这啊。
不知道为什么当初没人做出来,可能头铁去逆向了吧。