对某嵌入式设备声波配网的研究
一
前言
二
硬件分析
三
音频分析
音频处理
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/
关注KnowSafe微信公众号
随时掌握互联网精彩
随时掌握互联网精彩
- PDFPatcher PDF编辑起来so easy
- TinyVue:华为开源 轻量级 Vue 组件库
- 2023 英特尔On技术创新大会:让AI无处不在!
- 华为前三季研发费用超1100亿;微软CEO纳德拉获得10%的加薪,年薪近4亿元;PHP 8.1.12 发布|极客头条
- HarmonyOS 3.0 将于7月底发布;Twitter出现全球性大规模宕机;Rocky Linux 9.0 发布|极客头条
- 又又叒更新,Win 12要来了?
- BCTF之DEF CON 29 Contest |自动驾驶Adversarial NPC热身赛题已开放!
- 亚马逊力推以太坊,微软谷歌准备跟进!
- 程序员拒带电脑回家被开除获赔 19.4 万;库克称,很多功能来自中国消费者反馈;谷歌开源1.6万亿参数语言模型 | 极客头条
- 打开数“智”化之门,一字之差带来的思考
- 怎么判断网站使用的是EV SSL证书?TrustAsia 的EV SSL证书怎么样?
- 网站使用SSL证书有什么好处?
赞助链接