2025轩辕杯 - Misc - WriteUp


碎碎念

本来是想看看题的,因为那会刚打完iscc实在是太伤了。但结果看到有实体奖品,最后还是燃尽了…… 这比赛我只能说,怎么也算半个iscc了,有些题目出的真的抽象,完全get不到作者脑洞,告白更是一绝,不好评价。
但他又给贴纸又有奖品,真是人民的好比赛)

音频的秘密

附件得到一个音频,丢给audacity可以看到里面有摩斯密码,但是转出来发现信息是假的,丢给silenteye后设置为low发现藏了个压缩包

1747924861600

压缩包有密码,直接爆破,得到密码为1234

1747924991669

同时压缩包里有备注,给了个key为Lovely

1747925013838

解压得到的照片丢给随波,发现有lsb隐写

1747925035371

结合前面给的key,维吉尼亚一下就好(不能用一键的,一键解密的代码不一样,会变成全小写)

flag{No_AAAA_BBBB_30ao6@_cccyyy_f0k_Y01_1}

1747925053516

Hexagram Protocol

将图片丢给随波,发现exif信息有东西

1747925099342

叽里咕噜的看不懂,丢给随波继续分析,发现可以解码出八卦

☵☱☳☱☱☲☰☷☴☵☷☲☲☷☱☴☴☲☷☳☵☶☳☲☵☲☳☴☳☲☵☳☵☱☵☲☳☶☲☳☴☶☳☲☴☲☵☰☶☱☵☴☷☲☴☷☶☳☳☳☴☶☰☶☵☱☳☲☴☷☰☶☵☶☷☱☶☷☱☵☶☲☵☱☰☶☵☳☵☲☱☱☱☶☱☲☵☱☳☴☷☶☵☵☴☵☷☱☶☶☲☳☶☱☵☳☰☲☳☵☶☳☵☳☶☷☱☲☴☶☳☲☷☳☰☲☶☰☵

8774ea59-7429-49c8-9364-2ab729541ff9

不难猜出是将八卦转为01字符串就好了,不过这里藏了坑,需要从下往上读取阴阳卦

010110100110110101111000011010000101101000110011011101000100010001100101010101100011100101010100010110010101100001101100011001100101011101010111001110010011000101011000001100100100011001111001010110100101011000111001010001000110001000110010001101010110111001010100010101110110110001110101010110100011000001010010011010000110001001101100001110010100111101100010001100010100001000110101011001100101000100111101001111010

最后厨子梭哈一下就好

1747925247071

Terminal Hacker

附件一看就是python打包的exe,反编译就好,先用pyinstxtractor反编译成pyc,然后丢给https://pylingual.io/

1747925267881

一大碗冰粉

内存取证,vol3分析一下,发现桌面有两个关键文件

python vol.py -f ../whereicej3lly.raw windows.filescan | grep Desktop

1747925374372

提取出来,发现一个加密压缩包,hint是,同时压缩包里面也有这个hint文件,直接bkcrack明文攻击

1747925389619

成功后解出压缩包

1747925403366

得到的压缩包里有个未知文件,根据名字推出是对search进行异或

飞书文档 - 图片

1747925422905

打开有个伪加密,修一下得到jpg图片,末尾告诉我们flag需要社工

1747925431284

看到远处有个辣抽抽烧烤还有一个酒店,锁定一下就能找到 江苏省连云港市海州区陇海步行街

1747925445385

哇哇哇瓦

附件一张图片,丢给随波,lsb得到一半

b80b3759-fef2-4503-816f-f11c78d2ac08

同时binwalk得到一个hint,那说明还有内容

1747926354638

看看图片,右下角有情况

1747926378477

1747926385818

导出处理一下得到压缩包,用密码:GekkoYoru解压得到后半段flag

1747926397968

数据识别与审计

四种格式,各五个文件

首先是png图片,用火绒查杀就可以得到5个图片

1747926420437

其次是wav,写脚本检测是否有声音得到五个音频

import os
import wave
import contextlib
import numpy as np

def has_sound(file_path, frame_size=1024, threshold=300):
    try:
        with contextlib.closing(wave.open(file_path, 'rb')) as wf:
            nchannels = wf.getnchannels()
            sampwidth = wf.getsampwidth()
            framerate = wf.getframerate()
            nframes = wf.getnframes()

            frames = wf.readframes(nframes)

            # 支持16位或8位
            if sampwidth == 2:
                data = np.frombuffer(frames, dtype=np.int16)
            elif sampwidth == 1:
                data = np.frombuffer(frames, dtype=np.uint8) - 128
            else:
                print(f'不支持的采样位深: {sampwidth * 8}位')
                return False

            if nchannels > 1:
                data = data.reshape(-1, nchannels)
                data = data.mean(axis=1).astype(data.dtype)  # 转为单通道

            # 分帧判断:只要有一帧均值超过阈值就认为有声音
            for i in range(0, len(data), frame_size):
                frame = data[i:i+frame_size]
                if len(frame) == 0:
                    continue
                energy = np.mean(np.abs(frame))
                if energy > threshold:
                    return True
            return False
    except wave.Error:
        print(f'无法读取为有效的wav文件: {file_path}')
        return False

def check_wav_files(directory):
    result = []
    for filename in sorted(os.listdir(directory)):
        if filename.lower().endswith('.wav'):
            filepath = os.path.join(directory, filename)
            if has_sound(filepath):
                print(f'检测到声音: {filename}')
                result.append(filename)
    if result:
        print('拼接结果:')
        print(','.join(result))
    else:
        print('没有检测到任何有声音的文件')

if __name__ == '__main__':
    directory_path = './wav'  # 修改为你的目录路径
    check_wav_files(directory_path)

然后是pdf,notepad包搜alert发现五个pdf有

1747926438068

最后是txt,脚本读取过滤有数字或者英文的部分正好找出五个txt文档

import os
import re

def contains_english_or_digits(text):
    return re.search(r'[A-Za-z0-9]', text) is not None

def scan_and_print_txt_files(directory):
    matched_files = []

    for root, _, files in os.walk(directory):
        for file in files:
            if file.lower().endswith('.txt'):
                file_path = os.path.join(root, file)
                try:
                    with open(file_path, 'r', encoding='utf-8') as f:
                        content = f.read()
                except UnicodeDecodeError:
                    try:
                        with open(file_path, 'r', encoding='gbk') as f:
                            content = f.read()
                    except Exception as e:
                        print(f'[错误] 读取文件失败 ({file_path}): {e}')
                        continue
                except Exception as e:
                    print(f'[错误] 读取文件失败 ({file_path}): {e}')
                    continue

                if contains_english_or_digits(content):
                    print(f'--- 文件: {file_path} ---')
                    print(content)
                    print('--------------------------\n')
                    matched_files.append(file)

    # 输出匹配的文件名列表
    result = ','.join(matched_files)
    print('匹配的文件名拼接结果:')
    print(result)

# 用法示例:替换为你要扫描的目录路径
if __name__ == '__main__':
    target_directory = './txt'  # 修改为你实际的目录路径
    scan_and_print_txt_files(target_directory)

然后排列就行了

9h0zQJok.txt,FiBRFFnG.txt,gWa0DiTs.txt,Me4CoMw7.txt,T0BPOXDY.txt,a4ijc0fu.png,b7aykkl9.png,lhf82t3d.png,sofhifed.png,wxrozxe3.png,bVKINl.pdf,hnPRx1.pdf,mIR13t.pdf,OGoyOG.pdf,rSG2pW.pdf,Bd2IYe3.wav,bjVwvcC.wav,H0KDChj.wav,ou9E9Mh.wav,UEbzH4X.wav

隐藏的邀请

把docx解压,发现有一个cyyy.xml,打开里面有十六进制数据,丢给010

1747926511794

保存丢给厨子,异或Cyyyy,得到gif图

1747926522637

问gpt发现是数据矩阵码,直接在线解密

1747926531090

1747926538596

qwq