1. 题目描述
下载附件,发现是一个可执行文件
2. 思路分析
先逆向分析下源码
整个程序的逻辑还是比较简单的,输入key,对key进行encode,如果加密后的字符串和指定字符串相同,那么key就是我们需要的flag,因此这里的关键在于encode是如何实现的
encode的实现逻辑也很简单,每三个字符进行循环处理,这里的key表示我们输入字符的长度,为18
第一个字符:(ch + 6) ^ 18
第二个字符:(ch - 6) ^ 18
第三个字符:(ch ^ 6) ^ 18
而且flag加密后的字符串为:
OK,知道这个规律后,我们跟进encode方式,反过来进行decode即可
3. 解题过程
编写如下代码:
str1 = 'izwhroz\"\"w\"v.K\".Ni'
flag = ''
key = 18
# print(len(str1))
for i in range(len(str1)):
ch = str1[i]
if i % 3 == 0:
flag = flag + chr((ord(ch) ^ key) - 6)
if i % 3 == 1:
flag = flag + chr((ord(ch) ^ key) + 6)
if i % 3 == 2:
flag = flag + chr((ord(ch) ^ key) ^ 6)
print(flag)
运行后,即可获取到flag:unctf{b66_6b6_66b}
4. 总结
这个程序中只保留了加密后的flag,因此逆向出程序后还需要反向解密,不过解密起来也不难,适合新手练习