养成习惯,不管它是啥,都先查壳
可以看出这是一个.py的文件,所以要反编译成py的文件,这里用的是uncompyle6
安装如下:cmd命令下输入如下:pip install uncompyle6(回车)
使用如下:uncompyle6 (目标文件) > (转换成的文件的名字).py(这里注意,要在对应路径下使用,不然找不到文件)
得到对应的py文件,查看咯:
print 'Welcome to Re World!'
print 'Your input1 is your flag~'
l = len(input1)
for i in range(l):
num = ((input1[i] + i) % 128 + 128) % 128
code += num
for i in range(l - 1):
code[i] = code[i] ^ code[i + 1]
print code
code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',',
'\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13']
解读一下:
首先是让我们输入一个字符串,经过加密后,如果能和code的元素对应上,那么你输入的就是正确的flag
很明显(一堆错误,看的懂在讲啥就好,不懂其中的函数的话可以去查查看,挺简单的这道题的函数),需要我们来个暴力,来吧脚本:
int main(){
char code[] = {'\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',',
'\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13'};
for(int i = strlen(code)-1; i >= 0; i--){
code[i-1] = code[i] ^ code[i-1];
}
string flag = "";
for (int i = 0; i < strlen(code); i++) {
for (int j = 32; j <= 126; j++) {
if(((j + i)%128 + 128)%128 == code[i]){
flag += char(j);break;
}
}
}
cout << flag << endl;
return 0;
}