Python 脚本解密:使用 base64、hashlib 和条件判断获取 Flag
Python 脚本解密:使用 base64、hashlib 和条件判断获取 Flag
以下 Python 脚本用来解密一个 Flag,它使用 base64 编码、md5、sha1 和 sha256 哈希算法以及一系列条件判断来验证输入的 Flag 是否正确。
import base64
import hashlib
import sys
def abort():
print('Wrong flag!')
sys.exit(1)
print('Please input the flag:')
flag = input()
#res=['N','e','e','p','u','{','P','u','t',10,'0','s','N','9','S',16,'a','_',19,20,21,22,'_',24,25,'_','k','u','}']
if len(flag) != 29:
abort()
if flag[:5] != 'Neepu':
abort()
if flag[16]!='a' or flag[17]!='_':
abort()
if flag[22]!=flag[17]:
abort()
if flag[28:] != '}':
abort()
if base64.b64encode(flag[-4:].encode()) != b'X2t1fQ==':
abort()
if flag[-2:-15:-3].encode().hex() != '75316c745f':
abort()
if sum(ord(x) * 10000 ** i for i, x in enumerate(flag[11:15][::-1])) !=110009500490115:
abort()
if hashlib.md5(flag[9:3:-2].encode('utf-8')).hexdigest()!='db46a959e0f94c0a8977411ab69df11a':
abort()
if hashlib.sha1((flag[6]+flag[8]+flag[10]).encode()).hexdigest()!= 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d':
abort()
if hashlib.sha256(flag.encode()).hexdigest() != 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892':
abort()
print('You are right!')
解密方法
根据代码,可以知道 Flag 的长度为 29,开头为 'Neepu',第 17、18 个字符为 'a_',第 23 个字符和第 18 个字符相同,最后一个字符为 '}'。
接下来依次判断每个条件:
- 长度是否为 29
- 开头是否为 'Neepu'
- 第 17、18 个字符是否为 'a_'
- 第 23 个字符是否与第 18 个字符相同
- 最后一个字符是否为 '}'
- Flag 倒数 4 个字符的 base64 编码是否为 'X2t1fQ=='
- 从倒数第 2 个字符到倒数第 15 个字符(每隔 3 个字符)所组成的字符串的 16 进制编码是否为 '75316c745f'
- 将 Flag 的第 12 到第 15 个字符反转后,每个字符乘以 10000 的 i 次方,i 从 0 开始,相加之和是否为 110009500490115
- 将 Flag 的第 4 到第 8 个字符反转后,进行 md5 哈希,结果是否为 'db46a959e0f94c0a8977411ab69df11a'
- 将 Flag 的第 7、9、11 个字符组成一个字符串,进行 sha1 哈希,结果是否为 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d'
- 对 Flag 进行 sha256 哈希,结果是否为 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892'
满足以上所有条件的 Flag 即为正确答案。
提示: 可以使用 Python 脚本逐一验证每个条件,或者借助在线工具来进行哈希计算。
通过一步步的推导和验证,你最终会找到正确的 Flag。
原文地址: https://www.cveoy.top/t/topic/obLp 著作权归作者所有。请勿转载和采集!