2026.7.19(6)【Stegosaurus pyc隐写】ACTF新生赛2020 剑龙
2026/8/17 2:56:04 网站建设 项目流程

📌 题目信息

项目内容
题目名称[ACTF新生赛2020]剑龙
题目来源BUUCTF Misc
题目类型Misc(杂项)
子分类隐写术
考点AAEncode编码、Steghide图片隐写、DES解密、Stegosaurus pyc隐写
难度⭐⭐
最终 Flagflag{3teg0Sauru3_!1}

🛠️ 使用工具

  • AAEncode在线解码
  • Steghide:图片隐写工具,需输入密码提取
  • DES在线解密
  • Stegosaurus(剑龙):Python pyc隐写提取工具
    • GitHub地址:https://github.com/AngelKitty/stegosaurus

⚠️注意:Stegosaurus 对 Python 版本有严格要求,必须使用 Python 3.6 及以下版本,否则无法运行。

📝 解题思路

题目名称叫“剑龙”,英文即Stegosaurus,这是专门针对 Python 字节码文件(.pyc)的隐写工具。


第 1 步:解压附件,分析文件

下载附件解压后,得到以下文件:

  • 一个o_o文件(无后缀名)——实际上是.pyc文件
  • 一个hint.zip压缩包

先解压hint.zip,里面包含:

  • pwd.txt—— 内容是一段“颜文字”代码
  • hh.jpg—— 一张图片

整理一下,总共3份文件。


第 2 步:AAEncode 解码获取密码

打开pwd.txt,内容是一段以゚ω゚ノ=开头的颜文字代码。

💡 这种代码叫做AAEncode(又称颜文字加密),是一种 JavaScript 混淆编码。

pwd.txt中的全部内容复制,粘贴到AAEncode 在线解码网站(http://www.hiencode.com/aaencode.html)进行解码。

解码后得到密码:

welcom3!

⚠️注意:注意密码中是数字3而不是字母e,不要写错。


第 3 步:Steghide 图片隐写

拿到密码welcom3!后,对hh.jpg进行Steghide 隐写提取

Steghide 是一款可以将文件隐藏到图片或音频中的工具。使用命令:

steghide extract -sf hh.jpg

执行后会提示输入密码,输入上一步得到的welcom3!

成功提取后,得到一个文本文件,内容为:

U2FsdGVkX1/7KeHVl5984OsGUVSanPfPednHpK9lKvp0kdrxO4Tj/Q==

这串字符看起来像 Base64 编码,但实际上直接 Base64 解码得不到有意义的结果。结合题目其他线索,这应该是DES 加密后的密文。


第 4 步:从图片属性获取 DES 密钥

查看hh.jpg文件属性(右键 -> 属性 -> 详细信息),在备注或注释字段中可以找到 DES 解密的密钥:

@#$%^&%%$)

⚠️注意:密钥中既有%也有$),注意区分%$,不要抄错。

用这个密钥对密文进行DES 解密,得到一段明文提示:

think about stegosaurus

“想想剑龙”——这明确指向了下一步要用Stegosaurus工具。


第 5 步:Stegosaurus 提取 pyc 中的 Flag

回到最初那个无后缀的o_o文件,它实际上是 Python 的字节码文件(.pyc)。

o_o文件重命名O_O.pyc,然后使用Stegosaurus工具提取其中隐藏的信息。

python3 stegosaurus.py -x O_O.pyc

⚠️Python 版本警告:Stegosaurus 在 Python 3.7 及以上版本可能无法正常运行。如果报错,请使用Python 3.6 或更低版本的环境。

运行后即可提取出 Flag:

🏁 最终 Flag

flag{3teg0Sauru3_!1}

简单补充:关于Stegosaurus的知识

Stegosaurus 的核心思想是将秘密信息(Payload)拆分,然后“藏”在 Python 字节码(.pyc文件)的“缝隙”里。它实现了一种在文件格式层面进行的隐写。

🧬 什么是“缝隙”:.pyc文件的“无用字段”

Python 源码(.py)在被执行前会先被编译成一种二进制格式,即.pyc字节码文件,供 Python 虚拟机(PVM)执行。
这个字节码文件里,包含了一些对程序运行没有影响的“注释”或“调试信息”,可以理解为文件里的“无用字段”。Stegosaurus 正是瞄准了这些位置。

🦕 Stegosaurus 的嵌入与提取
  1. 嵌入过程:工具会分析.pyc文件的结构,找到那些“无用字段”。然后,它将你想要隐藏的 Payload(一段 Python 代码或字符串)拆分成小块,分别写入这些字段中。这些 Payload 会被分散嵌入到文件的各个角落。
  2. 提取过程:提取是嵌入的逆过程。Stegosaurus 会再次解析.pyc文件,从同样的“无用字段”中按顺序收集所有碎片,最终拼凑出完整的 Payload。
🕵️‍♂️ 为什么难以察觉:实现“三不变”

这种设计带来了几个关键的隐蔽性:

  • 文件大小不变:因为是利用现有空间,所以嵌入后文件大小不会改变。
  • 运行行为不变:隐藏的信息放在不会被执行的“无用字段”里,所以原程序的功能完全不受影响。
  • 常规工具无效:正因为 Payload 分散且位于非执行区域,像strings这样的命令无法从中提取出完整的、有意义的信息。
⚠️ 注意事项:容量与版本限制
  • 容量有限:由于只能利用“无用字段”的空间,可隐藏的信息量非常有限。所以,Stegosaurus 通常只用来隐藏简短的提示或 Flag。
  • Python 版本要求:这是一个关键限制。Stegosaurus 的设计基于 Python 3.6 及以下版本的字节码结构,在更高版本的 Python 中可能无法正常工作。
💎 总结

Stegosaurus 的巧妙之处在于,它没有修改代码逻辑,而是利用了文件格式自身的“冗余”来藏匿信息,实现了高隐蔽性的隐写。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询