拿到一个.py的文件,查个壳:
进入看看是怎么个解密:
挺长,感觉还有点像RC4的加密方式(这个不讨论),往下看逻辑:
首根据输出,我们能知道,加密后的文档应该是enc,enc又是由crypt而来,crypt又是由cipher而来,而cipher又是由res而来:
看看res怎么来的:
res可以知道是由flag跟k异或而来的,
接着往下看,cipher = "".join(res) 简单来说就是讲res 赋给了 cipher,
?经过base64编码后 又解码? == 可有可无,即整个程序可以这样看:
经过urllib.parse.quote加密,(urllib.parse.quote这玩意是个啥?不懂就查:)
urllib.parse.quote:
查清楚了,那么可以开始写脚本了:
key = "HereIsFlagggg"
flag = "xxxxxxxxxxxxxxxxxxx"
s_box = list(range(256))
j = 0
for i in range(256):
j = (j + s_box[i] + ord(key[i % len(key)])) % 256
s_box[i], s_box[j] = s_box[j], s_box[i]
res = []
i = j = 0
enc1 = '%C2%A6n%C2%87Y%1Ag%3F%C2%A01.%C2%9C%C3%B7%C3%8A%02%C3%80%C2%92W%C3%8C%C3%BA'
Des = urllib.parse.unquote(enc1)
flag1 = ''
for s in Des:
i = (i + 1) % 256
j = (j + s_box[i]) % 256
s_box[i], s_box[j] = s_box[j], s_box[i]
t = (s_box[i] + s_box[j]) % 256
k = s_box[t]
flag1 += chr(ord(s) ^ k)
print(flag1)