下载附件,得到文件,以txt格式打开:
判断为python字节码,手动反编译还原源码:
# a = input('plz input your flag:') a = '' b = [0] * len(a) c = [68, 5, 164, 100, 231, 228, 175, 36, 142, 175, 78, 206, 4, 45, 142, 174, 238, 164, 45, 14, 175, 46, 238, 45, 164, 174, 36, 175, 45, 196, 196, 78, 175, 36, 46, 238, 196, 206, 78, 78, 68, 39] if len(a) != 42: print("wrong length") for i in range(len(a)): b[i] = (ord(a[i]) >> 3 ^ ord(a[i]) << 5) & 255 b[i] ^= 136 if b[i] != c[i]: print("wrong") print("win")
如果能理解pyhon字节码,就是很简单的逻辑,可以查看参考文献
可以简单编写脚本拿到flag:
c = [68,5,164,100,231,228,175,36,142,175,78,206,4,45,142,174,238,164,45,14,175,46,238,45,164,174,36,175,45,196,196,78,175,36,46,238,196,206,78,78,68,39]
flag = []
for i in range(len(flag)):
flag[i] = c[i] ^ 136
for index in range(len(flag)):
for i in range(32, 127):
if flag[index] == ((i >> 3) ^ (i << 5) & 255):
flag[index] = i
print("".join(chr(x) for x in flag))
标签:196,45,displacement,flag,238,2021,楚慧杯,175,78
From: https://www.cnblogs.com/BlackIce416/p/17152272.html