轩辕杯Wp
密码dp
Misc
Terminal Hacker
非预期:下载附件发现是exe加密猜测为exe转pyc但是进行读取1.pyc发现是可以直接读取到flag的
预期:
连接终端 进行提示一步步操作拿到flag
逆向Ezre
将文件放入PE发现存在upx尝试脱壳发现报错
猜测为魔改UPX将文件放入010里的确存在
进行修复
接着再次尝试脱壳发现成功了
将脱完壳的exe让入ida进行分析发现存在自定义base64
直接搓一个脚本
import base64def decrypt_flag():target = "iP}ui7siC`otMgA~h5o]Tg<4jPmtIvM5C~I4h644K7M~KVg="xor_restored = ''.join(chr(ord(c) ^ 4) for c in target)modified_charset = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789+/"standard_charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"standard_b64 = ''.join(standard_charset[modified_charset.index(c)] if c != '=' else '='for c in xor_restored)try:decoded_bytes = base64.b64decode(standard_b64)flag = decoded_bytes.decode('utf-8')return flagexcept UnicodeDecodeError:return decoded_bytes.hex()except Exception as e:print(f"解码失败: {e}")return standard_b64if __name__ == "__main__":flag = decrypt_flag()print(f"解密后的flag: {flag}")print(f"长度验证: {len(flag)} 个字符")
Misc 八卦
用 PIL 打开 JPEG 并读出 EXIF信息,发现 usercomment 字段里是一串八卦符号类似于
这些符号恰好是 Unicode范围 U+2630到U+2637的八卦(三、三、三、、三、三、三、)。要把它们转换成数字,需要用「伏羲先天八卦」的顺序对应到3位二进制(或八进制)
因此,逐个把 usercomment 里的 trigram 符号替换成对应的八进制数字,就得到一连串的八进制数(每个符号对应 0-7 中的一个)。
# 伪代码示意:将 ☰…☱…☲… 等转换为 '7','6','5',...
mapping = {'\u2630': '7', # ☰ → 7'\u2631': '6', # ☱ → 6'\u2632': '5', # ☲ → 5'\u2633': '4', # ☳ → 4'\u2634': '3', # ☴ → 3'\u2635': '2', # ☵ → 2'\u2636': '1', # ☶ → 1'\u2637': '0', # ☷ → 0
}
digits = ''.join(mapping[ch] for ch in user_comment_string if ch in mapping)
拿到的八进制数字串打印出的结果
2646657032055063350421452543452426254154314535271623053014443171264530712106106215267124256661652643
每个八进制数字代表3位二进制。所以把“264665."中的每个字符当作3位二进制来拼接,总共会得到约139x3=417 位的位流。然后将这 417 位按8位一组截取
# 将每个八进制数字转为 3 位二进制
bitstream = ''.join(bin(int(d, 8))[2:].zfill(3) for d in digits) # 每个都补足 3 位# 去掉末尾不满 8 位的部分
trim_len = (len(bitstream) // 8) * 8
bitstream = bitstream[:trim_len]# 按 8 位一组转换为字节
bytes_out = bytes(int(bitstream[i:i+8], 2) for i in range(0, trim_len, 8))
解码后 bytes_out 是一串 52 字节的数据。把这几字节用 ASCI/UTF-8 直观显示,会发现它是一段可打印字符
base64
Zmxhz3tDeV9TYX1fWN91X2FyZV9Db25nTWluz0Rhb190b1B5f0==
进行还原解密
import base64b64 = b"ZmxhZ3tDeV9TYXlfWW91X2FyZV9Db25nTWluZ0Rhbl9Ob1B5fX=="
flag = base64.b64decode(b64).decode('ascii')
print(flag)
# 输出:flag{Cy_Say_You_are_CongMingDan_NoPy}