愚公系列2021年12月 攻防世界-简单题-CRYPTO-009(easychallenge)

网友投稿 730 2022-05-28

前言

题目描述:你们走到了一个冷冷清清的谜题前面,小鱼看着题目给的信息束手无策,丈二和尚摸不着头脑 ,你嘿嘿一笑,拿出来了你随身带着的笔记本电脑,噼里啪啦的敲起来了键盘,清晰的函数逻辑和流程出现在 了电脑屏幕上,你敲敲键盘,更改了几处地方,运行以后答案变出现在了电脑屏幕上。

提示:以下是本篇文章正文内容,下面案例可供参考

一、easychallenge

题目链接:https://adworld.xctf.org.cn/task/answer?type=crypto&number=5&grade=0&id=5109&page=1

二、使用步骤

1.uncompyle6

发现是一个.pyc文件

需要反编译成py文件

uncompyle6是一个原生python的跨版本反编译器和fragment反编译器,是decompyle、uncompyle、uncompyle2等的接替者

【愚公系列】2021年12月 攻防世界-简单题-CRYPTO-009(easychallenge)

pip install uncompyle6 uncompyle6 -o . test.pyc

得到py代码如下:

import base64 def encode1(ans): s = '' for i in ans: x = ord(i) ^ 36 x = x + 25 s += chr(x) return s def encode2(ans): s = '' for i in ans: x = ord(i) + 36 x = x ^ 36 s += chr(x) return s def encode3(ans): return base64.b32encode(ans) flag = ' ' print 'Please Input your flag:' flag = raw_input() final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E===' if encode3(encode2(encode1(flag))) == final: print 'correct' else: print 'wrong'

流程分析

encode1函数是把输入的字符串分割成单独的字符,先转换为ascii数值,再与36异或,然后+25,接着转回字符,最后拼接为新的字符串输出。因此对应的decode1函数应该是先-25,再与36异或(异或的逆操作还是异或)。encode2函数是把输入的字符串分割成单独的字符,先转换为ascii数值,再+36,然后与36异或,接着转回字符,最后拼接为新的字符串输出。因此对应的decode2函数应该是先与36异或,再-36。encode3函数是调用base64库里的b32encode()函数进行base32运算。因此对应的decode3函数应该是base64.b32decode()。

2.解密py文件

import base64 def decode1(ans): s = '' for i in ans: x = ord(i) - 25 x = x ^ 36 s += chr(x) return s def decode2(ans): s = '' for i in ans: x = i^ 36 x = x - 36 s += chr(x) return s def decode3(ans): return base64.b32decode(ans) final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E===' flag=decode1(decode2(decode3(final))) print(flag)

得到对应的flag为cyberpeace{interestinghhhhh}

总结

uncompyle6

数据结构

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:每 N 秒重复一次 Linux 命令或 Shell 脚本
下一篇:【5G科普】华为码chine姐姐聊5G第14期:5G大事件盘点
相关文章