CTF WP HGAME 2025 WP LacYor 2025-05-07 2025-08-16 W3ight#00005f-WEEK1-WP MISC Hakuya Want A Girl Friend 观察.txt文件,发现打头为 50 4B 03 04
,直接写脚本提取zip
1 2 3 4 5 6 7 8 9 10 11 12 def hex_to_zip (input_file, output_file ): with open (input_file, 'r' ) as infile: hex_data = infile.read().replace('\n' , '' ).replace(' ' , '' ) binary_data = bytes .fromhex(hex_data) with open (output_file, 'wb' ) as outfile: outfile.write(binary_data) input_file = 'hky.txt' output_file = 'output.zip' hex_to_zip(input_file, output_file)
压缩包内得到一加密txt文件
简单尝试爆破密码无果,回到hky.txt寻找线索
在文件最后发现 47 4E 50 89
,判断应该讲PNG文件藏入并进行倒置
ctrl+f 查找倒置文件尾 82 60 42 AE
提取PNG文件部分,使用脚本倒置并生成PNG文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 def reverse_numbers_from_file (input_file, output_file ): with open (input_file, 'r' ) as infile: lines = infile.readlines() reversed_lines = [] for line in lines: reversed_line = ' ' .join(line.split()[::-1 ]) reversed_lines.append(reversed_line) with open (output_file, 'w' ) as outfile: for reversed_line in reversed_lines: outfile.write(reversed_line + '\n' ) input_file = 'hky.txt' output_file = 'output.txt' reverse_numbers_from_file(input_file, output_file) def hex_to_png (input_file, output_file ): with open (input_file, 'r' ) as infile: hex_data = infile.read().replace('\n' , '' ) binary_data = bytes .fromhex(hex_data) with open (output_file, 'wb' ) as outfile: outfile.write(binary_data) input_file = 'output.txt' output_file = 'output.png' hex_to_png(input_file, output_file)
同时进行宽高检测,最终得到图片
得到解压密码
flag:
Web Level 24 Pacman 进入环境,吃豆人游戏
查看源码,在index.js 开头发现了类似Base64加密的密文
解密,得 haepaiemkspretgm{rtc_ae_efc}
猜测还有一层加密,多次尝试后发现为篱笆密码
解密,得
输入flag后发现不对,再次查看源码
又发现一串Base64密文
同上进行解密,得到flag: hgame{u_4re_pacman_m4ster}
Re Compress dot new 打开附件,源码如下:
分析后发现程序对明文使用霍夫曼编码表对进行了编码
根据附件给出的enc和程序,解析霍夫曼树
``
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import jsondef parse_huffman_tree (data ): if 's' in data: return {'s' : data['s' ]} elif 'a' in data and 'b' in data: return {'a' : parse_huffman_tree(data['a' ]), 'b' : parse_huffman_tree(data['b' ])} else : raise ValueError("Invalid Huffman tree structure" ) def decode_huffman (binary_str, huffman_tree ): decoded_data = [] current_node = huffman_tree for bit in binary_str: if bit == '0' : current_node = current_node['a' ] elif bit == '1' : current_node = current_node['b' ] else : raise ValueError("Invalid bit in binary string" ) if 's' in current_node: decoded_data.append(current_node['s' ]) current_node = huffman_tree return decoded_data with open ('enc.txt' , 'r' ) as file: lines = file.readlines() huffman_tree_json = lines[0 ].strip() binary_data = lines[1 ].strip() huffman_tree = parse_huffman_tree(json.loads(huffman_tree_json)) decoded_bytes = decode_huffman(binary_data, huffman_tree) flag = '' .join(chr (byte) for byte in decoded_bytes) print ("Flag:" , flag)
得到flag:Flag: hgame{Nu-Shell-scr1pts-ar3-1nt3r3st1ng-t0-wr1te-&-use!}