PaperPlease

先查壳,发现没有,用IDA打开,比较简单,直接看main函数

1

先比较了一下前面几位输入的是不是和DASCTF{ }一样,然后调用了一下这个巨长的函数,打开看一下

2

可以看出是和一段数据进行了异或操作,off_4010点进去看看

3

可以看到一串数据,思路清晰了,直接解

1
2
3
4
5
6
7
8
9
r = "5c715207e3abed7dfb7c8ea9c82d0e29"

t = [0x56,0x5,0x53,0x52,0x4,0x3,0x53,0x54,0x4,0x0B,0x53,0x51,0x6,0x6,0x0F,0x55,0x5,0x5B,0x3,0x56,0x0E,0x7,0x57,0x0E,0x1,0x0D,0x56,0x0,0x4,0x6,0x0A,0x5D]

flag=""
for i in range(len(r)):
flag += chr(ord(r[i])^t[i])

print(flag)

4

最后在加上DASCTF{ }就可以了

end

该程序逻辑其实也十分清晰,就是一道迷宫题,如下图所示,2代表前进七步,8代表后退七步,6代表前进一步,4代表后退一步。每前进一步就和amp数组里的值进行比较,为1则继续前进,不为1则退出,直到走到”#”的位置

5

6

找到了数据才顺藤摸瓜找到函数

看着这个数出来的是错的,看了大佬讲的才知道32位的程序每一步是4个字节,而IDAHEX显示的是单字节,要调整成四字节的才可以看出,把原来的数据类型改成unsigned,8列,四字节

43

计算一下就可以推导出结果

262266866222442266667