ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

CTF杂项解题工具全攻略:隐写、动图、音频、流量一网打尽

CTF杂项解题工具全攻略:隐写、动图、音频、流量一网打尽 简介面向CTF夺旗赛参赛者与安全学习者的杂项/取证类解题工具集内容聚焦流量解析、隐写还原、文件格式处理等高频方向适合希望在比赛中快速定位切入点、提升解题效率的入门到进阶选手。压缩包共23个文件、整体约74.48MB以8个exe可执行工具为主另含PNG样例图片、C源码、WAV音频、DLL动态库、Makefile及二进制数据文件各类材料相互配合既可直接运行也能对照源码理解工具实现思路。工具覆盖常见杂项场景网络抓包程序用于流量分析与协议数据提取SIGINT与无线信号监测工具侧重音频信号中的隐藏信息逐帧播放器与图片图层读取工具针对GIF、图片隐写DTMF双音多频识别可解码电话音频指令16进制转图片工具则完成数据到图像的逆向还原。包内附带的wav、png等样例文件与C源码可帮助使用者验证工具效果、熟悉典型出题思路并在实际赛题中快速搭建本地分析环境。已有2194人学习下载对CTF杂项入门和赛前工具储备均有参考价值。1. 一串exe打开CTF杂项的门这套工具到底解决什么CTF杂项Misc题和Web、逆向不一样它不考某个具体框架而是考“你知不知道有这种工具”。去年队友发给我一个zip里面全是exe小软件名字直白得有点好笑“图片图层隐写读取.exe”“gif图片逐帧提取信息.exe”“16进制转图片.exe”。压缩包里还有一组dtf0.png、girlfriend.wav这样的测试样例一看就是某位选手把自己打比赛的工具箱整个打包发出来了。真正用起来才发现这些老版本exe在Win10上翻车率极高杀软乱报毒、界面黑匣子、输出格式全靠猜但确实是杂项解题的高频刚需。这篇笔记把这套工具按隐写、动图、音频、流量四个方向拆开讲清楚每个exe的用途、操作流程和踩过的坑适合刚入门的杂项选手和备赛工具控拿到包后能照着跑通不用自己再折腾一遍。2. CTF杂项Windows工具全景分类、定位与文件清单核对2.1 工具分类隐写、动图、音频、流量四个方向杂项题百分之九十五可以归纳成一句话把flag藏起来或者把藏起来的东西找出来。藏匿的载体无非是图片、GIF、音频、网络流量、压缩包这几种。压缩包里的工具正好按这个逻辑分成四类先列个总表把对应关系理清后面每一类单独展开方向对应exe一句话定位图片隐写图片图层隐写读取.exe、silenteye-0.4.1-win32.exe拆图层、看通道、提取LSB隐写内容动图分析动画师逐帧播放器.exe、gif图片逐帧提取信息.exe逐帧播放、逐帧导出GIF画面音频取证dtmf2num.exe从wav里识别DTMF拨号音还原电话号码流量辅助Cap.exe轻量抓包验证工具行为或复现题目环境这四个方向里图片隐写是绝对主力动图和音频是常见的第二落点流量方向这个包里的Cap.exe只算辅助真遇到pcap大流量文件还是得靠Wireshark。我的习惯是先把工具分类贴到桌面拿到题目文件后先对照分类表定方向再决定用哪个exe避免在错误方向上瞎折腾。2.2 逐文件核对每个exe的真实用途与常见误读压缩包里的文件并不是都有用有一部分是分享者跑题时留下的测试样例和临时文件。先把容易混淆的几个说清楚silenteye-0.4.1-win32.exe是包里最容易被误读的工具。网上有些资料把它描述成信号情报监听工具那是张冠李戴。SilentEye在CTF语境下的真实身份是LSB隐写工具支持把文本或文件藏进图片和WAV音频也支持反向提取。0.4.1是最后一个比较稳定的Windows版本界面是Qt写的对PNG和BMP支持较好对JPEG支持很差这点后面避坑章节会细说。动画师逐帧播放器.exe和gif图片逐帧提取信息.exe是一对互补工具。前者的核心能力是“看”把GIF按帧慢放适合肉眼找差异帧后者核心能力是“存”把每一帧导出成独立的PNG文件方便后续用图片隐写工具逐帧分析。很多动画题藏flag的方式是某一帧多了一行像素或者某几帧叠加起来才组成完整信息两个工具配合使用才顺手。16进制转图片.exe名字已经说明了用途把十六进制文本还原成图像。很多人第一次用反了以为是图片转hex。实际场景是题目给一个txt里面是排好格式的hex字符串本质是一张位图的像素数据需要指定宽、高、颜色模式才能还原出二维码或者flag图案。dtmf2num.exe旁边还跟着dtmf2num.c、dsp.c、mywav.h、Makefile、help.txt这一整套源码工程压缩包里唯一带源码的就是这个DTMF识别工具。girlfriend.wav是配套的测试音频。这说明分享者把源码工程一起打包了想研究底层识别算法的人可以直接读代码后面第4章会贴一段说明。另外还有几个不是工具的文件dtf0.png、dtf1.png、dtf2.png、dtf3.png、tempA.bin、Mark.png、imageIN_Data、PsyQrDcd.dll。这些明显是分享者调试时留下的样例和临时数据PsyQrDcd.dll很可能是某个二维码解码库的依赖文件不要手动删除但也不要去分析它们的内容真正的工具只有那六个exe。2.3 环境准备虚拟机、兼容模式与杀软报毒红线这组工具全部是Windows exe而且大部分没有数字签名界面停留在XP时代。我建议在Win7或Win10虚拟机里跑不要直接扔到工作机甚至生产环境。原因有两个一是有些工具在Win10 1903以后的版本上会闪退右键属性里切“Windows 7兼容模式”也不一定救得回来二是这些exe几乎必然被杀软报毒。报毒不一定是真木马。隐写工具为了防逆向经常加壳或者夹杂汇编代码启发式引擎容易把这种壳判成恶意软件。我的做法是在虚拟机里关掉Windows Defender实时保护再解压或者解压时给目录加白名单。注意这条红线不是开玩笑报毒工具必须在隔离环境里用别拿它访问网银和办公系统。注意解压后如果某个exe双击根本没反应先看是不是被Defender静默删掉了。还原文件后再右键→属性→兼容性→勾选“以兼容模式运行这个程序”选Windows 7多数老工具能活过来。3. 图片隐写实操图层隐写读取与SilentEye的LSB提取3.1 图片图层隐写读取.exe当flag藏在像素关系里图片隐写题最常见的出法有两种一种是把信息直接写在像素最低位另一种是把两张图片叠在一起用图层混合的方式藏信息。第二类考题用StegSolve的通道转换能解决一部分但StegSolve看的是通道视图图层隐写读取.exe这种工具则直接检查图像内部的图层结构把可能存在的隐藏图层单独分离出来导出更直观一些。常见操作流程是打开exe载入PNG或BMP图片工具会列出识别到的图层列表。正常图片只有一个图层如果列表里出现第二个名字带有alpha、overlay、text字样的图层多半就是出题人藏信息的地方。点导出把隐藏层单独存成PNG再用后面的SilentEye或StegSolve继续分析。使用的时候注意一个坑这个工具对PNG的RGB格式支持最好对带有调色板模式的PNG可能会直接报“不是有效的图像文件”。遇到这种情况先用Windows画图把图片另存成24位BMP再拖进工具里。画图另存会丢失alpha通道如果隐藏信息恰好存在alpha通道里那这个方法会直接破坏信息所以另存BMP之前先备份原图给自己留一条后悔药。3.2 SilentEye原理LSB替换与提取参数SilentEye能成为杂项选手的常备工具是因为它把LSB隐写做到了开箱即用的程度。LSB的全称是Least Significant Bit中文叫最低有效位。一张24位真彩图像里每个像素的RGB三个通道各占8位修改每个通道的最低一位人眼根本分辨不出颜色差异但每个像素就能多存3个bit的信息。一段100字的flag塞进一张普通照片视觉上完全无感这就是LSB隐写。SilentEye的Encode操作支持在图片和WAV音频里藏数据Decode操作则是提取。使用前要关注的参数有三个Algorithm算法、Channel通道选择、密钥。默认情况下Algorithm选LSBChannel选All密钥留空。如果题目是裸LSB默认参数就能直接提出内容如果提出来的内容是一堆十六进制字符说明可能换过加密算法或者用了密钥需要逐个尝试RC4、DES等选项。我一般会先看题目描述和图片来源。如果题目提示“最低位”或者“LSB”直接用SilentEye的默认参数跑一遍如果没有任何提示先跑SilentEye提取失败再换StegSolve看各通道的视觉差异。记住一个经验SilentEye对PNG的兼容性还行但对JPEG基本无能为力JPEG是有损压缩像素值已经被改过一轮了LSB信息大概率被破坏。3.3 完整实操从一张PNG里提取隐藏文本拿压缩包里的dtf0.png来走一遍完整流程。第一步把dtf0.png拖进SilentEye选中图片后点击Decode按钮工具会弹出提取结果。第二步如果结果框里出现的是可读文本直接复制完成如果是一串乱码尝试勾选不同的Algorithm和密钥组合重新提取。第三步如果SilentEye始终提示失败用图片图层隐写读取.exe检查图层结构排除多图层隐藏的可能性。很多时候SilentEye提取出来的内容并不是直接的flag而是一串被二次编码的数据。这时候可以用Python自己写一个最朴素的LSB提取脚本验证图片最低位里到底存了什么。代码如下这是裸LSB的标准做法from PIL import Image # 打开图片强制转成RGB模式避免调色板图读到错误像素值 img Image.open(dtf0.png).convert(RGB) pixels img.load() width, height img.size # 按从左到右、从上到下的顺序取出每个像素R通道的最低位 bits [] for y in range(height): for x in range(width): r, g, b pixels[x, y] bits.append(r 1) # 只取红色通道的最低位 # 每8个bit拼成一个字节再转成ASCII字符 data bytearray() for i in range(0, len(bits) - 7, 8): byte 0 for j in range(8): byte | bits[i j] (7 - j) data.append(byte) print(data[:300])这段代码的逻辑很简单第一层循环遍历所有像素第二层把每个像素的R通道最低位追加进bits数组最后把每8个bit按大端序拼成一个字节。参数说明里最值得改的是bits.append(r 1)这一行如果把r换成g或者b就是提取绿色或蓝色通道题目如果把信息分别藏在三个通道里需要逐个通道试。另外data[:300]只打印了前300个字节如果flag排在数据后面把切片去掉直接打印全部内容。裸LSB提取脚本和SilentEye之间的差异在于SilentEye可能默认从文件的特定偏移开始读而脚本是从像素第一行第一列开始读。两个方案结果对不上时说明出题人对LSB数据做过偏移、倒序或者通道变换这时候就需要看题目提示或者逐通道逐偏移去试了。这套脚本是我从一次翻车经历里总结出来的当时SilentEye提取结果一直是乱码最后用裸脚本按B通道试了一遍才拿到flag从那以后我养成了一个习惯任何LSB题都先用脚本把RGB三个通道各自跑一遍再上SilentEye。4. 动图、十六进制与音频三条容易踩空的杂项解题线4.1 GIF逐帧提取动画帧里藏flag的还原手法GIF动图类的杂项题考的是选手“逐帧检查”的耐心。常见藏法有三种一是某一帧画面被替换成带flag的图片播放速度太快肉眼看不到二是每帧各藏一个字符把所有帧拼起来才是完整flag三是帧与帧之间的透明度变化隐含信息。无论哪种第一步都是把GIF的每一帧拆出来。具体操作用gif图片逐帧提取信息.exe打开GIF文件工具会把动图拆成帧序列并导出PNG。导出帧数如果和播放器里看到的帧数对不上优先检查GIF是否包含重复帧或者透明帧。拆完帧以后对每张PNG做一次快速筛查先用文件大小排序某几帧大小明显异常说明那几帧可能携带了额外信息再用SilentEye对每帧跑一遍LSB提取因为有些题目把LSB隐写藏在某一帧里。这里有一条血泪经验GIF拆出来的帧第一帧和最后一帧最容易出问题。GIF的循环设置会导致首尾帧之间做差值过渡有些选手误以为信息藏在过渡帧里折腾半天发现只是浏览器播放器的渲染差异。拿到帧序列先别急着分析用动画师逐帧播放器把GIF按原速度播一遍确认视觉上有没有明显闪帧的片段再决定重点分析哪些帧。4.2 16进制转图片.exe把hex数据倒回成二维码16进制转图片.exe处理的题目形式通常是一个txt文件里面是成串的十六进制数看起来毫无规律其实是一张图片的像素数据。使用的时候先数一数总共有多少个字节然后根据数据量反推图片尺寸。二维码是最常见的载体因为二维码对尺寸不敏感宽高比错了也能扫出来一部分所以这类题的第一落点通常是二维码。工具的界面一般包含几个参数宽度、高度、颜色模式、字节序。颜色模式常见的有RGB888、RGBA8888、灰度8位三种不知道用哪个就按数据总量除一下如果字节数是3的倍数优先试RGB如果能被4整除试RGBA。字节序默认小端序即可题目很少在这个地方设坑。生成出来如果是一张花屏的图先别急着改参数把图片保存下来放大看花屏有时候是因为宽高比错误但不影响二维码定位角识别。参数常见值说明宽度400、512、1024先按数据总量算出像素数再试常见尺寸高度与宽度对应和宽度乘积要等于像素总数颜色模式RGB888 / RGBA8888 / 灰度8位字节数能整除3试RGB整除4试RGBA字节序小端序大端序出现在题目中时通常会有提示4.3 音频与流量DTMF拨号音识别、Cap.exe的边界DTMF拨号音这类题给一个wav文件里面是一段电话按键音要还原出拨打的号码。原理是双音多频每个按键由两个频率叠加而成低频组有697Hz、770Hz、852Hz、941Hz四档高频组有1209Hz、1336Hz、1477Hz四档两个频率交叉组合对应一个按键所以叫“双音多频”。压缩包里那套dtmf2num源码工程是这个方向最有价值的部分它不是黑匣子而是把最核心的频率检测逻辑直接摊开给你看。dtmf2num.c里的核心逻辑是对每个按键时间段做Goertzel算法检测Goertzel是一种针对单频点做能量检测的算法比FFT更适合DTMF这类稀疏频点场景。下面是源码工程里典型的检测思路/* * DTMF频率表ITU-T Q.23标准定义 * 低频组与高频组交叉对应键盘矩阵 */ #define ROW_FREQS { 697, 770, 852, 941 } #define COL_FREQS { 1209, 1336, 1477 } /* * 对wav的一小段采样数据计算指定频率的能量 * 能量超过阈值的两个频点就能还原出一个按键 */ double goertzel(short* samples, int count, double freq, int sample_rate) { double w 2.0 * M_PI * freq / sample_rate; double coeff 2.0 * cos(w); double s0 0, s1 0, s2 0; for (int i 0; i count; i) { s0 samples[i] coeff * s1 - s2; s2 s1; s1 s0; } return s1 * s1 s2 * s2 - coeff * s1 * s2; }这是Goertzel算法的典型实现逐段计算每个频点的能量能量最大值对应的行频和列频组合成按键数字。实际使用中不需要自己编译源码直接用dtmf2num.exe跑wav文件即可。但要注意dtmf2num对输入文件要求很严格采样率必须是8000Hz、单声道、PCM编码不符合会被识别成乱码。拿到wav后先用Audacity查看属性格式不对就先转码再识别这是DTMF方向最容易踩的坑。Cap.exe在压缩包里的定位是轻量级抓包工具。CTF流量题的标准姿势是用Wireshark打开pcap分析HTTP、DNS、USB等协议Cap.exe的能力范围到不了那一步。它的实际用途是复现环境比如题目里的恶意exe会回连某个IP在虚拟机里跑exe之前先开Cap.exe记录通信行为帮自己找到flag可能出现的流量位置。简单来说pcap分析题目用Wiresharkexe行为分析场景才用Cap.exe。5. 避坑指南CTF杂项exe工具使用的五条踩坑记录5.1 SilentEye打不开图片一直弹错误窗口现象把PNG拖进SilentEye点击Decode或者Encode直接弹窗报错图片完全没有加载成功。原因SilentEye对PNG的颜色类型敏感。PNG支持真彩、灰度、调色板多种颜色类型SilentEye只对24位真彩和部分8位灰度处理得比较好从网上下载的题目图片经常带着alpha通道或者调色板直接导致解析失败。解决先用Windows画图打开图片另存为24位BMP格式再拖进SilentEye。注意画图另存BMP不保留alpha通道如果怀疑信息存在于alpha通道先备份原图再另存副本用于SilentEye分析。这个方法能解决九成以上的SilentEye打开失败问题。5.2 GIF逐帧提取出来的全是黑帧现象用gif图片逐帧提取信息.exe把GIF拆成几十张PNG大部分帧是全黑的或者连续好几帧几乎一模一样看不出信息。原因出题人故意在GIF里插入了全黑帧和重复帧用来干扰逐帧肉眼的观察节奏。还有一些情况是信息帧本身没有问题但颜色接近黑色肉眼难以区分像素值其实有细微差异。解决不要靠肉眼扫帧先把所有帧的文件大小排序帧大小异常突变的优先分析。对全黑帧用16进制转图片.exe或者Python脚本检查像素最低位黑图里存LSB信息是常见套路因为黑色像素RGB值很低修改最低位后依然接近黑色看起来仍然是黑帧。5.3 hex转图片尺寸参数错乱生成花屏现象把hex数据输入16进制转图片.exe设置宽高后生成的图像完全花屏看不出二维码或者任何图形轮廓。原因宽高比不对或者颜色模式选错。如果实际图片是RGB888模式按灰度模式解析数据量直接差三倍生成结果必然是噪声。解决先数hex数据总量按字节数计算像素总数。假设字节数为NRGB888模式下像素数是N/3灰度模式是N图片宽度和高度要在这个像素数附近取因子通常试512、400、256这几个常见值。如果试了几组都花屏检查txt开头是否有偏移量或文件头说明。二维码类的题目花屏状态下定位角仍然可能可见先把图放大看看三个角有没有回字形定位框有的话说明尺寸接近微调宽度即可。5.4 DTMF识别输出乱码或者空结果现象girlfriend.wav这类测试音频用dtmf2num.exe跑完输出的数字串和预期不符或者直接没有输出。原因wav文件采样率不是8000Hz或者音频是立体声、带噪声、按键之间有较长的静音间隔导致频点能量检测阈值判断失败。解决先用Audacity打开wav查看采样率。如果不是8000Hz执行“轨道→重采样”改成8000如果是立体声执行“轨道→拆分→转为单声道”。处理完导出新wav再跑dtmf2num。如果仍然失败用Audacity看频谱图手动确认每个按键的时间区间看看是不是开头混入了环境噪声把多余片段删除后重试。这个方法在处理现场录音类的DTMF题时特别有效。5.5 工具解压即被杀毒软件删除现象压缩包一解压Windows Defender立刻弹窗文件被自动删除只能看到临时文件残留。原因隐写和逆向工具常被壳保护有些exe为了减小体积还用了UPX之类的压缩壳杀毒软件启发式引擎会把壳特征识别为木马行为。这是误报常见场景不代表工具真的是恶意程序。解决在虚拟机里解压解压前临时关闭实时保护或者把解压目录加入排除项。跑完题目后用快照恢复虚拟机保证宿主机干净。别把这类工具放在工作电脑的系统目录里更不要手动添加到白名单后拿去访问生产环境这个红线值得反复强调。6. 串起工具链按文件类型分流的一页纸决策与flag验证技巧6.1 按文件类型匹配工具的一页纸决策表工具单独用都是散兵游勇串起来才是一条完整的解题流水线。我按文件类型整理了一张决策表直接贴在杂项题工作笔记第一页拿到的东西第一反应本包里的工具注意PNG/BMP图片先看图层和通道再试LSB图片图层隐写读取.exe、SilentEye不要一上来就跑SilentEye先看图层JPG图片JPEG有损压缩不适合LSBSilentEye基本无效换StegSolve看通道JPEG题多为附加数据或EXIFGIF动图先拆帧再看大小异常动画师逐帧播放器、gif逐帧提取信息.exe拆帧后按文件大小排序txt内含hex数清字节数反推图片尺寸16进制转图片.exe优先试RGB888和灰度两种模式wav音频先查采样率再转单声道dtmf2num.exe、Audacitydtmf2num只吃8000Hz单声道PCMpcap流量Wireshark打开协议分析Cap.exe只能辅助不要硬上流量题主力永远是Wireshark这张表解决的是“拿到文件不知道用什么工具”的决策问题。每次做题卡住时把表过一遍确认自己是不是在错误方向上花了超过二十分钟。多数时候卡壳不是因为题目难而是方向选错了工具这是新手到熟手之间最典型的瓶颈。6.2 一条完整的流水线与flag验证技巧拿到杂项题附件我现在的固定动作是四步先用file命令或者Hex Fiend看文件真实类型防止出题人改扩展名再用binwalk扫一遍排除文件尾部拼接隐藏内容的可能接着按上面的决策表分流到具体工具最后提取结果统一做一次校验。校验提取结果有一个核心技巧不直接打开文件而是先看文件头。文本类flag直接搜索flag{前缀二维码类结果先确认三个定位角音频类结果先看频谱图上有没有异常的竖线。提取出来的文件如果是一张图片先用十六进制查看器看前16个字节确认PNG的89 50 4E 47或者JPG的FF D8 FF头完好再双击打开避免在文件损坏的假象上反复折腾。从那一次用裸脚本从B通道里读出flag之后我形成了两个习惯第一个任何LSB题都强制把RGB三个通道各自跑一遍绝不依赖单一工具输出第二个比赛前拿到新的工具包先用压缩包自带的样例文件把所有exe冒烟测试一遍确认哪个能用、哪个报毒、哪个需要兼容模式提前排除赛场上可能翻车的环节。希望这套工具的拆解笔记能帮你省下这些排查时间把精力真正花在题目本身上。本文还有配套的精品资源点击获取
返回列表