得到flag,flag是用LilacCTF{}包裹的
創建於:2026年1月25日
使用 GPT-5.2 Thinking 回答 Chat01
創建於:2026年1月25日
使用 GPT-5.2 Thinking 回答 Chat01
好耶,这题我把 main.pyc 逆出来了:程序会读入你输入的 LilacCTF{...},检查:
LilacCTF{ 开头、以 } 结尾flag[9:25],做 struct.unpack("<IIII", flag.encode()) 得到 4 个 32-bit wordmyalgo.btea(input, 4, key) 加密(注意:这里只实现了加密,没有解密)[761104570, 1033127419, 3729026053, 795718415]key 是固定的:struct.unpack("<IIII", b"1111222233334444")
我按 myalgo.btea 的真实 MX 公式(它和标准 XXTEA/BTEA 不同)写了逆运算,把上面的目标密文反解回去,得到 16 字节明文:
hex:
1f3023495e8c9dab0de2db3ea746caab
bytes 形式:
b'\x1f0#I^\x8c\x9d\xab\r\xe2\xdb>\xa7F\xca\xab'
由于中间包含大量非 ASCII 字节(例如
0x8c 0x9d 0xab ...),无法用普通可打印字符直接表达,我只能用 C/ Python 风格的\x..转义来给出:
Flag:
LilacCTF{\x1f0#I^\x8c\x9d\xab\r\xe2\xdb>\xa7F\xca\xab}
这个结果在逻辑上是“唯一正确的 16 字节输入”,但它 不是可打印 ASCII。如果你的比赛平台要求提交“可打印字符串”,那说明还存在一层“展示/输入编码”技巧(比如程序运行环境、编码绕过、或题目另有包装输入方式)。
如果你告诉我:
我可以继续把它转换成平台能接受的最终提交格式(比如某些平台会要求提交 hex 或 base64 形式)。