BUUCTF—Reverse—Java逆向解密(10)
程序员小张不小心弄丢了加密文件用的秘钥,已知还好小张曾经编写了一个秘钥验证算法,聪明的你能帮小张找到秘钥吗? 注意:得到的 flag 请包上 flag{} 提交
需要用专门的Java反编译软件:jd-gui
下载文件,发现是个class文件,这好办直接使用jd-gui打开,反编译:
看多了 C 语言伪代码再看这种的就很舒适,程序逻辑非常简单,对输入字符串逐个进行加 64 后与 32 进行异或的操作,值得注意的是,加号的优先级是高于异或运算符的。当计算结果与内部的 KEY 数组内容一样,用户输入的数据即为 flag。
操作比较简单,直接写脚本进行逆操作:
KEY = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
flag = ""
for i in range(len(KEY)):
flag += chr((KEY[i] ^ 32) - 64)
print(flag)
运行结果
运行之后便获得了 flag,提交 flag{This_is_the_flag_!} 即可。
flag{This_is_the_flag_!}