CRYPTOHACK challenge Encoding Challenge个人writeup
2026/6/26 2:10:55 网站建设 项目流程

目录

一、解题思路分析

二、关键步骤实现

1.建立连接与通信

2.多编码类型解码器

三、自动化挑战流程

1.循环处理数据

2.实时解码与反馈

四、运行与结果

1.依赖安装

2.执行脚本

3.输出示例


一、解题思路分析

该挑战要求连续解码100次由服务器随机生成的加密数据,加密方式可能为base64、hex、rot13、bigint或utf-8五种之一。核心在于动态识别加密类型并执行对应的解码操作。

二、关键步骤实现

1.建立连接与通信

使用pwntools库建立与服务器的socket连接,通过JSON格式收发数据。

json_recv()json_send()函数处理数据的序列化与反序列化。

from pwn import * import json r = remote("socket.cryptohack.org", 13377) def json_recv(): line = r.recvline() return json.loads(line.decode()) def json_send(hsh): request = json.dumps(hsh).encode() r.sendline(request)

2.多编码类型解码器

根据type字段动态选择解码方式:

base64: 使用base64.b64decode

hex: 通过bytes.fromhex转换

rot13: 调用codecs.decode的ROT13解码

bigint: 处理十六进制字符串并转换为字节

utf-8: 将ASCII码列表拼接为字符串

def decode_payload(enc_type, encoded): if enc_type == "base64": return base64.b64decode(encoded).decode() elif enc_type == "hex": return bytes.fromhex(encoded).decode() elif enc_type == "rot13": return codecs.decode(encoded, "rot_13") elif enc_type == "bigint": num = int(encoded, 16) return long_to_bytes(num).decode() elif enc_type == "utf-8": return ''.join(chr(c) for c in encoded)

三、自动化挑战流程

1.循环处理数据

持续接收服务器数据,检测是否包含flagerror字段以终止循环。

2.实时解码与反馈

提取typeencoded字段,调用decode_payload()解码后返回结果。

while True: received = json_recv() if "flag" in received: print("\n[+] Flag:", received["flag"]) break if "error" in received: print("\n[-] Error:", received["error"]) break enc_type = received["type"] enc_val = received["encoded"] decoded = decode_payload(enc_type, enc_val) json_send({"decoded": decoded})

四、运行与结果

1.依赖安装

执行以下命令安装所需库:

pip install pwntools pycryptodome

2.执行脚本

保存代码为solve.py并运行:

python3 solve.py

3.输出示例

成功后将显示类似结果:

[+] Flag: crypto{3nc0d3_d3c0d3_3nc0d3}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询