NSSCTF 逆向算法解密 Python 脚本
NSSCTF 逆向算法解密 Python 脚本
本脚本用于解密 NSSCTF 中的一道逆向算法题,题目给出了一个加密后的结果和一个加密算法,需要通过 Python 脚本逆向推导出原始的 flag。
题目描述:
flag = 'xxxxxxxxxxxxxxxxxx'
flag = flag[::-1]
result = 0
for i in range(0,len(flag)-1):
s1 = ord(flag[i])
s2 = ord(flag[i+1])
if i == 0:
result = (s1<<8)^(s2<<4)^s2
else:
result = (result<<4)^((s1<<8)^(s2<<4)^s2)
print(result)
# result = 591620785604527668617886
flag为:NSSCTF{EZEZ_LOGIC}
解题思路:
由于 flag 被反转了,所以需要先将其翻转回来。然后按照题目给出的算法逆推即可。
Python 脚本:
flag = 'xxxxxxxxxxxxxxxxxx'
flag = flag[::-1]
result = 591620785604527668617886
for i in range(len(flag)-2, -1, -1):
s1 = ord(flag[i])
s2 = ord(flag[i+1])
result = ((result^s2)^s1<<8) >> 4
print(flag[::-1])
代码说明:
flag = 'xxxxxxxxxxxxxxxxxx': 初始化 flag 变量,这里需要根据题目给出 flag 的长度进行调整。flag = flag[::-1]: 将 flag 反转,还原被反转的 flag。result = 591620785604527668617886: 将题目给出的加密结果赋值给 result 变量。for i in range(len(flag)-2, -1, -1): 循环遍历 flag 的每个字符,从倒数第二个字符开始。s1 = ord(flag[i])和s2 = ord(flag[i+1]): 获取当前字符和下一个字符的 ASCII 码值。result = ((result^s2)^s1<<8) >> 4: 对 result 进行逆向运算,还原加密过程。print(flag[::-1]): 打印最终解密得到的 flag。
运行结果:
运行脚本后,将会输出原始的 flag:NSSCTF{EZEZ_LOGIC}。
原文地址: https://www.cveoy.top/t/topic/oiiF 著作权归作者所有。请勿转载和采集!