2020华南师大CTF新生赛maze

分析

首先查壳image-20220415193004979

发现这是没有壳32位的,然后把它方如ida去分析

image-20220415193101638

很容易知道这个是找最短路径的迷宫,于是我们去CreateMap()这个函数去看看这个迷宫是怎样的

image-20220415193340808

我一开始不知道v2&1然后再v2>>=1是干嘛的,然后去问了一下一个CAS的朋友,才知道这个v2&1是奇数就是它本身,如果不是奇数就是0。这个v2>>=1是除2,向下取整数的意思,判断这个位置是不是1。这里大致就是将num的元素都转换位2进制的意思

那么下一步就是找到所有的v2然后将其转换成16*16的表,这里就直接IDA动态调试,在这里for循环这里下一个断点,然后去看值

image-20220415194153985

这是第一个的v2,每到一次这里

image-20220415194245658

就是一个新的v2的值(停在v1=1的时候,才会出现新v2)后将其转化成表格

a=[0xffff,0x83F7,0xBBF7,0xBB17,0xBB57,0xB857,0xBF57,0xBF17,0xBFB7,0xBFB7,0x8611,0xF7B5,0xF7B5,0x7B4,0xFF87,0xFFFF]
for i in a:
a = bin(i)
print(a)

原本迷宫倒数第三行的0x7B4为image-20220415201720434

然后根据二进制,填充一下得到下图

那么得到迷宫

image-20220415200833555

然后去check函数找找有没有操作的规则

image-20220415201831928

由v6和v7的初始值,以及增减容易得出

有四个方向k,h,j,l

v6控制行,v7控制列
l为右移一个
h左移一个
k上移一个
j下移一个

解决方法

最后去走迷宫

image-20220415202049313

然后得到

flag{llllkkkhhhkkkkkkkkklllljjjjllljjljjjjjjjlllkkkklljjjl}