[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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?