之前文章讲过的技巧和知识,就不再详细描述了,如果有不明白的地方建议按照做题题目顺序查看。
打开看见了可疑的三串字符,s字符串的长度和flag内容的长度一样
找到关键代码页面,打开/tmp/flag.txt文件,将重新交换顺序的s字符串扔到flag文件里
根据重新交换的方式写出解密代码
图4
附代码:
1 s="c61b68366edeb7bdce3c6820314b7498" 2 3 flag="????????????????????????????????" 4 5 s=','.join(s) 6 7 s=s.split(',') 8 9 flag=','.join(flag) 10 11 flag=flag.split(',') 12 13 print(s," ---------------- ") 14 15 v3=0 16 17 v6=0 18 19 for i in s: 20 21 if(v6 & 1): 22 23 v3=1 24 25 else: 26 27 v3=-1 28 29 flag[v6] = chr(ord(s[v6])+v3) 30 31 v6=v6+1 32 33 34 out='' 35 36 for i in flag: 37 38 out += i 39 40 print('harifCTF{'+out+'}')
这道题里是将运行的结果保存进flag.txt文本内,程序运行结束时又将文本内容清空,所以在相应目录文件下我们看不到flag
如果使用动态调试,不需要写解密代码就可以找到flag,这和“no-strings-attached”那道题一样用gdb调试。awsl后期能动态肯定动态,前面写逆向代码练手~~~