Problem: [SWPU 2019]Network
思路
- 解题大致思路
二进制提取前两位:发现是zip的文件头
后面就是写个解密脚本 (base64和32轮流)
import base64 import re def is_base64(s): """检查字符串是否为有效的base64编码""" try: # 尝试解码并重新编码来验证 if isinstance(s, str): s_bytes = s.encode('utf-8') else: s_bytes = s decoded = base64.b64decode(s_bytes, validate=True) re_encoded = base64.b64encode(decoded) # 去除填充字符后比较 return s_bytes.rstrip(b'=') == re_encoded.rstrip(b'=') except (Exception, ValueError, TypeError): return False def is_base32(s): """检查字符串是否为有效的base32编码""" try: if isinstance(s, str): s_bytes = s.encode('utf-8') else: s_bytes = s decoded = base64.b32decode(s_bytes, validate=True) re_encoded = base64.b32encode(decoded) # 去除填充字符后比较 return s_bytes.rstrip(b'=') == re_encoded.rstrip(b'=') except (Exception, ValueError, TypeError): return False def decode_recursive(encoded_data, round_count=1): """递归解码base64/base32编码的数据""" print(f"\n=== 第 {round_count} 轮解码 ===") # 尝试base64解码 if is_base64(encoded_data): try: decoded = base64.b64decode(encoded_data) print("使用 Base64 解码") print(f"解码结果: {decoded}") return decode_recursive(decoded, round_count + 1) except: pass # 尝试base32解码 if is_base32(encoded_data): try: decoded = base64.b32decode(encoded_data) print("使用 Base32 解码") print(f"解码结果: {decoded}") return decode_recursive(decoded, round_count + 1) except: pass # 如果都无法解码,返回最终结果 print("无法继续解码 - 最终结果") try: # 尝试以UTF-8解码显示 final_result = encoded_data.decode('utf-8') print(f"最终文本: {final_result}") except: print(f"最终二进制数据: {encoded_data}") return encoded_data def main(): # 读取文件内容 try: with open('./flag.txt', 'r', encoding='utf-8') as file: content = file.read().strip() except: with open('./flag.txt', 'rb') as file: content = file.read() print("原始文件内容:") print(content) # 开始递归解码 if isinstance(content, str): content_bytes = content.encode('utf-8') else: content_bytes = content final_result = decode_recursive(content_bytes) if __name__ == "__main__": main()
EXP
- 具体攻击代码
总结
- 对该题的考点总结

加载中...