ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

2026.7.19(6)【Stegosaurus pyc隐写】ACTF新生赛2020 剑龙

2026/8/17 2:56:30 拓冰建站 浏览量
2026.7.19(6)【Stegosaurus pyc隐写】ACTF新生赛2020 剑龙 题目信息项目内容题目名称[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 最终 Flagflag{3teg0Sauru3_!1}简单补充关于Stegosaurus的知识Stegosaurus 的核心思想是将秘密信息Payload拆分然后“藏”在 Python 字节码.pyc文件的“缝隙”里。它实现了一种在文件格式层面进行的隐写。 什么是“缝隙”.pyc文件的“无用字段”Python 源码.py在被执行前会先被编译成一种二进制格式即.pyc字节码文件供 Python 虚拟机PVM执行。这个字节码文件里包含了一些对程序运行没有影响的“注释”或“调试信息”可以理解为文件里的“无用字段”。Stegosaurus 正是瞄准了这些位置。 Stegosaurus 的嵌入与提取嵌入过程工具会分析.pyc文件的结构找到那些“无用字段”。然后它将你想要隐藏的 Payload一段 Python 代码或字符串拆分成小块分别写入这些字段中。这些 Payload 会被分散嵌入到文件的各个角落。提取过程提取是嵌入的逆过程。Stegosaurus 会再次解析.pyc文件从同样的“无用字段”中按顺序收集所有碎片最终拼凑出完整的 Payload。️‍♂️ 为什么难以察觉实现“三不变”这种设计带来了几个关键的隐蔽性文件大小不变因为是利用现有空间所以嵌入后文件大小不会改变。运行行为不变隐藏的信息放在不会被执行的“无用字段”里所以原程序的功能完全不受影响。常规工具无效正因为 Payload 分散且位于非执行区域像strings这样的命令无法从中提取出完整的、有意义的信息。⚠️ 注意事项容量与版本限制容量有限由于只能利用“无用字段”的空间可隐藏的信息量非常有限。所以Stegosaurus 通常只用来隐藏简短的提示或 Flag。Python 版本要求这是一个关键限制。Stegosaurus 的设计基于 Python 3.6 及以下版本的字节码结构在更高版本的 Python 中可能无法正常工作。 总结Stegosaurus 的巧妙之处在于它没有修改代码逻辑而是利用了文件格式自身的“冗余”来藏匿信息实现了高隐蔽性的隐写。