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

一
前言

二
硬件分析


三
音频分析

音频处理
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/

随时掌握互联网精彩
- AList 支持多存储的文件列表程序和私人网盘
- 微信小店助手APP上线:商家可在移动端管理店铺、查看数据
- 太无奈!微软停售 AI 情绪识别等技术,直言:“法律跟不上 AI 的发展”
- TikTok 宣布将数据存储于 Oracle 服务器!
- 开源应该野蛮生长,还是开放治理?
- 前方高萌!带你领略未曾见过的珍稀物种
- Mandiant称白俄罗斯要对北约的网络攻击负责
- Nginx服务器证书部署
- JavaScript ES2021 最值得期待的 5 个新特性解析
- 没有特斯拉的 3·15 都曝了些什么?
- 银行金融机构为什么会首选增强型EV SSL证书?
- 实力彰显!亚洲诚信上榜《CCSIP 2020中国网络安全产业全景图》
赞助链接