1.解题过程:
下载附件,使用VSCode打开是乱码
再仔细一看是 .pyc 文件,与 python 源代码文件 .py 不同
进行反编译得到.py文件,可以使用注释部分给的地址进行反编译 python反编译 - 在线工具
打开.py文件后进行分析
从flag处倒推,可知用户输入的字符串为 flag
然后先进入循环先将字符转为对应的ASCII码,再异或,再进行 +16,再转为对应的ASCII码,最后 base64 加密(encode)
所以为了得到原来的 flag,我们需要重新倒回去运算,由于手动计算太多,我们尝试写一个python脚本,让计算机替我们运行
倒过来就应该先 base64 解码 (decode)进入循环 -16,再异或,再转为对应的ASCII码(如图)
注意:
写的脚本中 ord 不要加,因为 base64 解码后相当于已经将字符串转为了ASCII码
如果加上 ord 就会报错(如下图)
2.知识点:
(1).pyc文件是二进制文件,而.py文件是python语言直接产生的文件,就像c语言对应的.c文件,c++对应的.cpp文件,.pyc文件是由原来的python编译后产生的,所以可以使用反编译进行处理得到.py源文件
(2)其中涉及的Python函数:
①ord('a') 返回值 97
可以返回对应字符的ASCII码值
②encode
设置指定的编码格式,返回以这种编码之后的字符(串)
③chr(97) 返回值 a
可以返回对应整数的ASCII码值
(3) ^ 异或运算符:当左右两边对应的二进制位不同的时候,返回值为1
(4)import base64
定义 base64 加密解密模块