[SWPUCTF 2021 新生赛]简简单单的解密

拿到一个.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:



(参考文章)https://blog.csdn.net/weixin_41827162/article/details/109177372

查清楚了,那么可以开始写脚本了:

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)

拿到NSSCTF{REAL_EZ_RC4}

posted @   TFOREVERY  阅读(116)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示