当前位置: 首页 > news >正文

轩辕杯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}

相关文章:

  • 从运维告警到业务决策:可观测性正在重新定义企业数据基础设施
  • AI工程师系列——面向copilot编程
  • 配电网运行状态综合评估方法研究
  • 使用 mutt 发送邮件:Linux 下轻量高效的命令行邮件工具
  • NV009NV010美光闪存颗粒NV011NV012
  • Java面试问题基础篇
  • BISS0001 PIR红外感应IC:高性能热释电信号处理解决方案
  • DNS服务搭建与配置详解
  • JS手写代码篇---手写Promise
  • 【NLP】基于JointBERT的意图识别
  • 基于JDBC的信息管理系统,那么什么是JDBC呢?什么又是DAO类?
  • DDI核心网络服务是什么意思?有什么用?
  • 模板初阶【C++】
  • drop tablespace XXX including contents and datafiles删除表空间后,磁盘空间不释放
  • LlamaIndex
  • 46页 @《人工智能生命体 新启点》中國龍 原创连载
  • 【209. 长度最小的子数组】
  • DL00988-稀疏增强数据transformer船舶AIS轨迹预测含完整数据集
  • 开源免费抓包工具:ProxyPin 的详细使用
  • [TCG] 01.QEMU TCG 概览
  • 做新浪微博网站需要/关键词优化技巧
  • 伦教网站开发/湖南seo优化价格
  • 做集团网站/郑州seo排名公司
  • 网站开发分类/seo外包公司报价
  • 正规网站建设/关于友谊的连接