使用 Python 从音频中提取摩斯密码
First Post:
Last Update:
Word Count:
Read Time:
Last Update:
Word Count:
1.1k
Read Time:
5 min
本人并非专业人士,在部分专业名词的表述上可能会出现错误,敬请谅解
同步自本人 CSDN
前段时间在 BugKu 做题时碰到了这么一题 铁子,来一道 - Bugku CTF
(WriteUp 可见同学的博客 【BugKu】铁子,来一道_s1ameseL的博客-CSDN博客)
在解题过程中有一步,需要从音频中提取出摩斯密码。看了同学写的 WriteUp 后,我突发奇想,决定写一个自动从音频中提取摩斯密码的程序,于是就有了这么个工具
Github地址: https://github.com/Ling-Ink/MorseAudioDecoder
编写过程
载入音频
在这里使用的是 python 的 wave
库
1 |
|
提取数据
计算出横轴的时间轴后,使用 pylab
库绘制频谱图像
1 |
|
结果如下
对于如何区分长(“-“)与短(“.”),我想到的方法是计算出所有信号的平均长度,大于平均长度的即为长(“-“)
1 |
|
在此处有个小插曲,由于音频的波形呈现正弦型,所以在带有信息的区域也会出现频率值为0的情况,最终生成的数据也无法转换为摩斯密码
后来在 Python 波形处理_Rone-X的博客-CSDN博客 这篇博客中发现可以取一段区域内的平均值
比较代码如下,使用了 tqdm
库显示绘制进度
1 |
|
最后生成的图像如下
接着取出 0 位和 1 位的长度信息
1 |
|
与平均长度比较
1 |
|
解码数据
使用如下字典解码
1 |
|
1 |
|
plain_text
变量中即为解码后的数据
验证
参考:
利用python自动解析摩斯电码音频文件_如何从音频中提取摩斯密码_Rabbit_Gray的博客-CSDN博客
使用Python绘制语音信号的波形图_python画信号图_进击的小杨人的博客-CSDN博客
Python 波形处理_Rone-X的博客-CSDN博客