0x01 解题思路
-
尝试运行一下
-
拖入ida64,F5
- 分析代码逻辑
代码看起来复杂,但是其实很容易分析出来,只要用户输入的字符串通过了5个check函数就会输出"you got it !",从而获取flag,否则输出“what a shame !!!”。
对5个fun_check进行分析,发现前四个只是规定了flag的格式为UUID格式,即flag{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
最后一个进行了字符校验,如果用户输入的字符是0-9的数字,那么加上17比对;如果等于-,直接比对;如果是小写字母,就减去48进行比对;其余范围的字符直接比对。
0x02 EXP
mystr = "J2261C63-3I2I-EGE4-IBCC-IE41A5I5F4HB"
flag = "flag{"
for i in mystr:
if (ord(i)-17)>=48 and (ord(i)-17)<=57:
flag += chr(ord(i)-17)
elif (ord(i)+48)>=97 and (ord(i)+48)<=122:
flag += chr(ord(i)+48)
else:
flag += i
flag += '}'
print flag
获取flag: