CTF相关比赛个人WPMysteryFile-WP by Debu8ger
debu8gerMISC
MysteryFile
题目描述:黑客截获了一个神秘文件,请你解密文件并提取文件中隐藏的内容。
hint:xor
下载附件,尝试用010打开,

全是0x66和ffff啥的,再拖到IDA里看

最上面的0x00是db 72h,而根据提示的异或0x72 ^ 0x66 = 0x14,对应ZIP文件格式,
小端序存储,逆序输出
所以想着将从0x20到0xC8的所有数据按小端序提取出来,再与0x66异或,
得到了14 00 08 00 ...,是缺少了50 4B 03 04的ZIP文件头
编写完整的提取代码:
import struct
def solve(): raw_bytes = bytearray([0x72, 0x66]) raw_bytes.extend([0x6E, 0x66, 0x6E, 0x66, 0x93, 0xDF]) raw_bytes.extend([0x4C, 0x3C]) raw_bytes.extend(b'ffffffffqfffnfFf\x00') raw_bytes.extend([0x0A]) raw_bytes.extend(struct.pack('<I', 0x12480107)) dq_list = [ 0x0F861666B3233121E, 0x1E01E75CE601E75F, 0x67666D1E1301E75E, 0x6666626666666662, 0x68176B6A16ED6666, 0x4AA9EC4E56C8CD17, 0x0C84A2B29EE5049E8, 0x496E612D366663CA, 0x716666667F24D984, 0x7264672D36666666, 0x93666E666F667265, 0x7F24D984493C4CDF, 0x6E66666671666666, 0x6666666666664666, 0x666666E7D0666666, 0x1E124801070A0066, 0x5FF861666B323312, 0x5E1E01E75CE601E7, 0x6267666D1E1301E7, 0x6666666266666666, 0x66666660632D3666, 0x6666306667666766 ] for val in dq_list: raw_bytes.extend(struct.pack('<Q', val))
raw_bytes.extend([0x66, 0x09]) raw_bytes.extend([0x66, 0x66, 0x66, 0x66]) raw_bytes.extend([0x66])
decrypted = bytearray() for b in raw_bytes: decrypted.append(b ^ 0x66) fixed_zip = b'\x50\x4B\x03\x04' + decrypted with open('D:\\flag.zip', 'wb') as f: f.write(fixed_zip) print("[+] Successfully decoded. Saved as 'flag.zip'.")
if __name__ == '__main__': solve()
|
OK,得到了zip文件,试着解压缩,发现要密码 :(
接着用010打开,

可以由08 00和00 00处知道其实是无加密的;在50 4B 01 02后面看到09 00 ,得到是有加密
一前一后,ZIP伪加密无疑了
把09 00改为00 00,变为偶数,也就无加密了

得到无密码的zip文件,解压后即可得到flag:XAUTCTF{x0r_is_s0_easy}