对某嵌入式设备声波配网的研究

一
前言

二
硬件分析


三
音频分析

音频处理
m4a转wav

import librosa
from pydub import AudioSegment
import matplotlib.pyplot as plt
import numpy as np
input_file = './声波配网信息.m4a'
output_file = './声波配网信息.wav'
# 将M4A文件转换为WAV格式
audio = AudioSegment.from_file(input_file, format='m4a')
audio.export(output_file, format='wav')
频谱生成
audio_path = './声波配网信息.wav'
audio_data, sample_rate = librosa.load(audio_path)
spectrogram = librosa.stft(audio_data)
plt.figure(figsize=(12, 8))
plt.title('Spectrogram')
plt.xlabel('Time')
plt.ylabel('Frequency')
plt.imshow(librosa.amplitude_to_db(abs(spectrogram), ref=np.max),
origin='lower', aspect='auto', cmap='coolwarm')
plt.colorbar(format='%+2.0f dB')
plt.tight_layout()
plt.show()

提取频率数组
# 使用librosa进行频谱分析,并将能量值转换为分贝单位
spectrogram = librosa.amplitude_to_db(librosa.stft(audio_data), ref=np.max)
# 设置阈值,只记录强度大于-10dB的频率
threshold = -10
# 初始化空的频率数组
frequencies = []
# 遍历每个时间帧
for i in range(spectrogram.shape[1]):
# 获取当前时间帧的能量值
frame = spectrogram[:, i]
# 获取强度大于阈值的频率索引
freq_indices = np.where(frame > threshold)[0]
# 将符合条件的频率添加到频率数组中
frequencies.extend(freq_indices)
# 去除重复的频率,并按升序排列
frequencies = sorted(set(frequencies))
print(frequencies)

尝试特殊的wifi和密码

四
通信细节分析
通信概要
接收方








发送方app的逆向分析
app脱壳



frida-dexdump -FU


定位关键dex











对原生库文件进行分析








五
协议分析







type0:全是数字(1111)
type1:前面是小写后面是数字(aa11)
type2:前面是除数字外的base64后面全是数字的(_A11)
type3:含有非base64的(@#$%)
type4:前面全是数字然后出现不是数字的base64的(11_a)
type5:全是小写(aaaa)
type6:只要是由base64组成的(a-_b)
type7:全是大写(AAAA)

function hook_java(){
Java.perform(function(){
Java.use("voice.encoder.DataEncoder").encodeSSIDWiFi.implementation = function(ssid,wifi){
console.log("java hooked");
console.log(ssid);
console.log(wifi);
var enc = this.encodeSSIDWiFi(ssid,wifi);
return enc;
}
Java.use("voice.encoder.DataEncoder").encodeData.implementation = function(a1,a2,a3){
//console.log("encode hooked");
let str = String.fromCharCode.apply(null, a1);
console.log("string before encode:"+str);
var enc = this.encodeData(a1,a2,a3);
return enc;
}
Java.use("voice.encoder.VoicePlayer").play.overload('java.lang.String', 'int', 'int').implementation = function(a1,a2,a3){
//console.log("play hooked");
console.log("string after encode:"+a1);
//console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
this.play(a1,a2,a3);
return;
}
});
}
hook_java();




六
后续的工作以及收尾
七
总结
看雪ID:Nameless_a
https://bbs.kanxue.com/user-home-943085.htm

# 往期推荐


球分享

球点赞

球在看
[广告]赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- ai-logo一个开源 AI 生成 Logo 项目
- 百度网盘威联通专属套件正式上线:极速下载 支持自动上传下载
- Phoenix高度灵活且可配置的开源监控平台
- 123云盘如何创建内容打赏?
- 详解 SSL(一):网址栏的小绿锁有什么意义?
- 微软年中审核了,国内企业能从中学到什么?
- “离职后,前老板让我回去改代码......”
- 网安强中强 | 悬镜安全周幸:开源治理实践如何自动化和智能化落地
- 历史上的今天:首届图灵奖的获得者诞生;苹果电脑公司成立;Gmail 问世
- 【疯狂盲盒】9.9 狂欢节,让你提前嗨!
- 那些“不顾一切”要搞开源的人,现在怎样了?
- “火星人”马斯克推论:世界或是被编码而成,上帝可能是个程序员!
赞助链接