Misc中音频题的常见思路

admin 2024年12月23日12:47:40评论8 views字数 4538阅读15分7秒阅读模式
Misc中音频题的常见思路
Misc中音频题的常见思路
Misc中音频题的常见思路
鼎新安全
don't give up and don't give in !

1、波形图分析:摩斯电码

2、频谱图分析(有时要调高最高频率)

3、Silenteye隐写

wav音频文件可能是 silenteye 隐写,可以拿默认密码 silenteye 解密试试看

4、Deepsound隐写

先用 deepsound 打开试一下,如果需要密码说明就是 deepsound 隐写,有密钥直接填入密钥解密即可

如果是 deepsound 隐写并且没有密钥,就先用

<font style="color:rgb(36,41,47);">deepsound2john</font>脚本获取wav文件的哈希值(注释里有使用方法),

然后拉入kali用john爆破hash(如果编码有误,可以先用notepad另存为一下)

执行:john 1.txt

5、SSTV慢扫描电视

# 安装步骤:sudo python3 setup.py install # 注意python版本如果低于python3.9,需要将setup.py中的numpy那一行注释# 使用命令如下,图片会自动命名为result.pngsstv -d flag.wav

Windows中使用RX-SSTV

使用前还要安装虚拟声卡 Virtual Audio Cable

#使用步骤:1.点击Setup-Sound Control and Devices将默认输入设备和输出设备都设置为虚拟声卡line12.用VLC播放音频(最好不要用Au播放)3.如果扫描出来的图片有错位,可以点击slant手动修改4.退出RX-SSTV前要注意把默认的输入/输出设备改回原来的参数

拉入kali用qsstv(有时候要用到反向和反相)

6、电话音分析(DTMF)

用在线网站:

http://www.dialabc.com/sound/detect/

或者在dtmf2num.exe里使用

dtmf2num -o C:Desktop1.wav命令

7、wav可能是业余无线电文件

先用sox把wav转为raw:

sox -t wav latlong.wav -esigned-integer -b16 -r 22050 -t raw latlong.raw

再用multimon-ng分析:

multimon-ng -t raw -a AFSK1200 latlong.raw

8、steghide

#如果密码已经知道了steghide extract -sf filename -p passwd

在WSL或者kali里用Stegseek跑(字典在wordlist里)

#如果密码未知可以用下面这个脚本爆破#bruteStegHide.sh#!/bin/bashfor line in `cat$2`;do    steghide extract -sf $1 -p $line > /dev/null 2>&1if [[ $? -eq 0 ]];thenecho'password is: '$lineexitfidone#或者在WSL或者kali里用Stegseek跑(字典在wordlist里)stegseek filename rockyou.txt

9、MP3音频(mp3stego隐写)

使用前需要先把要处理的文件放到 mp3stego 目录下

# Encodeencode -E data.txt -P pass sound.wav sound.mp3    data.txt里面放要隐写的txt信息 pass是解密时需要的密码# Decodedecode -X -P pass sound.mp3   -X 是提取出隐写的文件pass是解密时需要的密码 sound.mp3是待处理的MP3文件# mp3stego可以使用无密码进行隐写# 如果需要密码解密,但是没有密码,可以试试看音频中歌曲的名字(比如Canon)

10、WAV还可能是OpenPuff隐写(有密码)

直接用OpenPuff.exe解密即可

11、stegpy隐写

stegpy 开源地址下载好后直接用WSL输入以下命令并输入密码解密即可

也可以直接用 pip 安装: 

pip3 install stegpystegpy 1.wav -p

12、DeEgger Embedder隐写

可以直接使用 DeEgger Embedder 工具 extract files

13、分析左右声道的差值

# 导入模块wavfileimport scipy.io.wavfile as wavfile# 读取音频文件的采样率和数据sample_rate, data = wavfile.read("1.wav")# print(sample_rate, data)# 创建两个列表来存储左右两声道的数据left = []right = []for item in data:    # print(item)    # 第一列的数据是左声道,第二列是右声道    left.append(item[0])    right.append(item[1])diff = [str(left-right) for left, right in zip(left, right)]res = ''for item in diff:    if item == '2':        res += '1'    elif item == '1':        res += '0'    else:        continuewith open('res.txt', 'w') as f:    f.write(res)

14、使用脚本提取数据进行分析

# 2023 DASCTFxCBCTFimport numpy as npimport waveimport scipy.fftpack as fftpackSAMPLE_RATE = 44100 # 表示采样率,即每秒钟有多少采样点SAMPLE_TIME = 0.1 # 表示一个样本的时间,即0.1秒SAMPLE_NUM = int(SAMPLE_RATE * SAMPLE_TIME) # 计算在SAMPLE_TIME时间内的采样点数LIST = [800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700]   def get_len():    with wave.open('1.wav','rb') as f:        # 使用numpy从音频文件中读取所有的帧并将其转换为int16数据类型的数组        wav_data = np.frombuffer(f.readframes(-1),dtype=np.int16)        N = len(wav_data)        print(N)    #这实际上计算了wav文件的总时长(以0.1秒为单位)    a = (N/(44100*0.1)) / 189    print(a)# 傅立叶变换函数。给定时域数据,该函数返回其频域形式的前半部分def fft(data):    N = len(data)                                   #获取数据长度    fft_data = fftpack.fft(data)                    #得到频域信号                          abs_fft = np.abs(fft_data)                      #计算幅值        abs_fft = abs_fft/(N/2)                                 half_fft = abs_fft[range(N//2)]                 #取频域信号的前半部分    return half_fft# 此函数旨在解码100ms的音频数据。它首先对音频数据进行FFT变换,然后检查LIST中的每个频率,以确定哪些频率具有明显的活动(幅值大于0.8)  def dec_100ms(wave_data_100_ms):    fft_ret = fft(wave_data_100_ms)    for index, freq in enumerate(LIST):        if np.max(fft_ret[int(freq*SAMPLE_TIME) - 2 : int(freq*SAMPLE_TIME) + 2]) > 0.8:            print(freq, 'Hz有值',end=" ")            return index# 解码整个音频文件中的句子。它首先确定音频中有多少个100ms的段,然后每次解码两个段来生成一个两位数的索引,该索引用于查找与之对应的字符def dec_sentence(wav_data):    _100ms_count = len(wav_data) // SAMPLE_NUM        # print(_100ms_count)     print('待解码音频包含', _100ms_count // 2, '个字')        ret = ''    for i in range(0, _100ms_count, 2):                      index = 0        for k in range(2):            index = index*10 + dec_100ms(wav_data[i*SAMPLE_NUM + k*SAMPLE_NUM : i*SAMPLE_NUM + (k+1)*SAMPLE_NUM])        print('序号:', index)        ret += string[index]    return retif __name__ == '__main__':    # get_len()    # 题目给了一个字符串序列,所以就是从音频中提取出index,然后根据index找到对应的字符    string ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_}{-?!"    with wave.open('1.wav', 'rb') as f:          #读取为数组        wav_data = np.frombuffer(f.readframes(-1), dtype=np.int16)    print(dec_sentence(wav_data))    # DASCTF{Wh1stling_t0_Convey_informat1on!!!}

15、提取两个音频中的浮点集并分析

例题1-2024极客大挑战-音乐大师
import librosaimport libnumres = []flag = ""table = {'19':"01","9":"00","39":"11","29":"10"}# 使用文件原始采样率获取音频数据和采样率data1,sr1 = librosa.load("secret.wav",sr=None,dtype="float32")data2,sr2 = librosa.load("1.wav",sr=None,dtype="float32")for i in range(148):    res.append(str(int((data1[i]-data2[i])*1e7)))for item in res:    flag += table[item]print(libnum.b2s(flag))# b'SYC{wav_LSB_but_You_can_get_M3_Coll!}'
Misc中音频题的常见思路
END
Misc中音频题的常见思路

注:鼎星安全有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

原文始发于微信公众号(鼎新安全):Misc中音频题的常见思路

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月23日12:47:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Misc中音频题的常见思路https://cn-sec.com/archives/3542856.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息