信息隐藏——使用Python脚本对CTF中的音频隐写进行处理

使用Python脚本对CTF中的音频隐写进行处理


第一步,打开网络拓扑,启动实验虚拟机。
第二步,本次实验要分析的第一个隐写文件MISC-easy-01.zip,打开位于桌面上的PentestBox,然后使用命令cd C:\Users\Administrator\Desktop\隐写术 Audio\切换路径至目标文件夹,然后找到MISC-easy-01.zip。

使用命令unzip MISC-easy-01.zip解压该文件,

解压后如下所示:

解压出来发现压缩包中有两个文件分别为一个包含密码的压缩包文件music.zip,由于目前没有密码,无法打开music.wav文件,只能暂时将它放在一边,继续在图片里寻找打开的密码。

另外还有一个图片文件使用默认的看图软件ACDSee打开pic.jpg进行分析。

如果不了解海伦·凯勒的同学,看到这张图可能就会措手不及,这里我们单独拿出来介绍一下

由于凯伦凯勒是聋哑人,所以可以判断这张图下面所给出的符号就是盲文了,

大家可以自己尝试一下这里解码的内容是否为我们后面转码所得到的。

第三步,根据盲文转码可以得到:kmdonowg,接下来我们用这个密码去打开music.zip这个,注意双击打开会提示文件损坏,请使用右键菜单中的7-Zip——提取到“music\”。解压后得到一个音频文件music.wav

第四步,有条件的同学可以下载音频文件至本地,打开来听一下,你应该会听到类似摩斯电码的声音,我们借助一个软件audacity音频分析软件来打开这个音频文件,路径为C:\Users\Administrator\Desktop\实验工具\,进入界面后选择文件——打开...(O),

 

然后选择我们前面获得的音频文件

打开后发现看起来确实像一个摩斯电码,长线代表“-”,短线代表“.”,中间的间隔代表停顿。那么要解密这个摩斯电码就简单了,我们只需要使用pyhton创建一个字典每个字母对应的摩斯电码的内容即可。

第五步,编写Python脚本进行摩斯电码解密

该脚本以存放在C:\Users\Administrator\Desktop\隐写术 Audio\Others中,代码部分内容如下

......

第六步,打开PentestBox,使用命令cd C:\Users\Administrator\Desktop\隐写术 Audio\Others进行路径切换,接下来使用命令python3 01.py,执行脚本文件并将音频中的“点”、“划”和“停顿”键入到窗口下,执行结果如下(注意停顿的位置)

得到flag:CTF{WPEI08732?23DZ}或ctf{wpei08732?23dz},遇到类似的摩斯电码的ctf音频隐写题后,首先要明确大体的思路:若题目中直接给出了音频,可以直接丢到Audacity频谱分析软件中去分析,找到频谱中存在的规律,有些规律十分明显,有些规律则需要我们再通过二次处理才能得到清晰的摩斯代码,最终还是要看出题人的水平,往往在隐写术中会附加密码学的一些知识也是需要我们去关注的,另外学会通过Python来处理一些有规律的代码对于我们解题是有很大帮助的。

第七步,紧接着上面题目,我们来看下面的这道音频隐写的题目,路径位于C:\Users\Administrator\Desktop\隐写术 Audio\ISCC Misc\普通Disco.zip,将压缩包解压到桌面上,然后使用Audacity频谱分析软件打开它对其进行分析

经过对音频的频谱进行分析,我们发现在音频最开始的位置有一段有规律的上下波动,这对于正常的音频文件而言是不可能出现的

在分析音频之前我们先来看一下软件官方给出的说明文件中,关于音轨的介绍,上面的Track Dropdown Menu:轨道下拉菜单;Left Channel:左声道;Track Control Panel:轨道控制面板;Vertical Scale:纵坐标;Waveform Display:波形显示;Right Channel:右声道

根据观察发现,左右两个声道的波形显示是一致的,那么我们只需单独分析一个音轨即可,为了方便对单声道进行分析,我们将光标定位到Vertical Scale纵坐标那里,然后点击鼠标右键对起始的这一段的音频进行放大处理,最终得到以下的波形:

注意在波形图中使用红色框的部分,发现这一段音频主要有两种状态分别为上方位置和下方位置,且高位和低位的点加起来刚好有105个,可以被7整除,猜测是ascii,此时我们可以联想到二进制的01,那么这里的高位置应该为1,低位置为0。

第八步,使用Audacity频谱分析软件,对音频进行分割,将前面二进制部分的音频与正常音频进行分割,具体操作时选中二进制部分的音频,点击编辑选择剪切

然后我们新建一个新的项目,选择文件——新建(N),编辑——粘贴(P)

接下来我们选择文件(F)——导出音频...(E),将导出的音频命名为cut.wav,最后点击保存按钮,

考虑到点数只有105个并不多,可以使用下面的脚本进行直接转换

Python代码执行结果如下

若点数超过105,甚至这个数字有可能会更大,大到无法通过数点数的方法来解决问题时,我们则需要第二种方法,接下来我们要对保存下来的片段cut.wav进行转换,将高位转换为1,低位转换为0,主要通过Python中的wave模块以及numpy模块即可实现这一功能。

第九步,从减少代码量和更科学的解题方向去考虑,可通过调用wave、numpy等模块来辅助音频进制的转换,编写Python脚本实现音频片段的二进制转换

注意Python脚本与cut.wav文件必须为同一路径下

代码如下

使用命令python 02.py执行该脚本,脚本执行的结果如下

得到一个包含其他冗余信息的二进制数据的列表,接下来我们需要对该列表进行处理,过滤出我们所需要的二进制的数据,去掉列表中的数字2,使用命令python 02.py >1.txt将转换后的二进制结果导出到1.txt文本中并通过EditPlus打开。

使用替换命令Ctrl + H对数据进行替换,删掉多余的符号:(分别替换“2”,”.”以及空格为空,最后使用正则表达式以及进行替换,查找项为([^.”!?])\n,替换项为\1即可查找所有换行符并进行替换)

接下来将其保存为2.txt。

第十步,下面需要对二进制的字符串进行转码,打开桌面上的“实验工具”,找到文件夹“编码解码”

打开转码工具JPK_406.jar,然后选择File——Load File as Ascii

选择桌面上的2.txt待转换的文件

打开后,我们找到BitsPerBlock参数,将其修改为7,因为ASCII码的二进制是七个字节,所以转换的时候7位转换为1个ASCII码

然后在菜单栏中找到Binary——Binary Format(二进制格式)

最后找到Binary——Binary To Ascii,将二进制转换为Ascii码

转换结果如下:

猜你喜欢

转载自blog.csdn.net/qq_48609816/article/details/125965877