三星手机语音测试软件,三星语音助手隐藏功能的分析与hook
本帖最后由 回不去的時(shí)光 于 2020-3-23 22:06 編輯
明明是原創(chuàng),純手打,也被移動到分享區(qū),吾愛管理員的腦袋是不是都被門卡過。。。目的:實(shí)現(xiàn)三星Bixby在播放音樂時(shí),也可以喚醒語音助手
三星手機(jī)軟件都是通用的,也就是說三星軟件都是一樣的,只是在代碼里判斷機(jī)型,隱藏掉一些功能罷了
我今晚要實(shí)現(xiàn)一個(gè)功能就是: S10在播放音樂時(shí),Bixby語音助手也可以黑屏語音喚醒
分析過程很漫長:
1.首先是拿到三個(gè)關(guān)鍵包(一般語音助手也就一個(gè),想不懂三星搞那么多干啥)
Bixby 服務(wù)_2.3.02.0
Bixby 語音_2.3.02.0
語音喚醒_2.1.16.16
2.搜索關(guān)鍵詞【喚醒】
在res里搜到【即使手機(jī)揚(yáng)聲器正在播放鈴聲、鬧鐘或媒體音樂,您依舊可以使用語音喚醒 Bixby】
進(jìn)一步分析到【settings_voice_wakeup_allow_media_option】然后搜索id(沒結(jié)果)、只能跟蹤布局來定位位置
布局:settings_wakeup_preferences.xml
這里布局也沒啥給力的button等有關(guān)的id可以分析,只能搜關(guān)鍵詞【key_set_media_option_voice_command】
3.在Bixby 語音包里來到了
com.samsung.android.bixby.settings.wakeup.VoiceWakeupOptionsFragment
上下文分析下,得到一些比較有用的東西
if (WakeupUtil.isTablet()) {
this.mSetMediaOptionVoiceCommand.setTitle(R.string.settings_use_when_tablet_speaker_playing_title);
description = getString(R.string.settings_use_when_tablet_speaker_playing_summary);
}
this.mSetMediaOptionVoiceCommand.setSummary((CharSequence) description + " " + getString(R.string.settings_voice_wakeup_allow_media_option_message_2));
if (WakeupUtil.isMediaSupported()) {
this.mSetMediaOptionVoiceCommand.setOnPreferenceChangeListener(this);
} else {
removePreference(this.mSetMediaOptionVoiceCommand);
this.mSetMediaOptionVoiceCommand = null;
}
this.mChangeVoiceCommand = findPreference("key_change_voice_command");
if (WakeupUtil.isCustomWakeupSupported(getContext())) {
this.mChangeVoiceCommand.setOnPreferenceClickListener(this);
} else {
Preference pc = findPreference("key_category_wakeup_command");
removePreference(this.mChangeVoiceCommand);
removePreference(pc);
this.mChangeVoiceCommand = null;
}
this.mSetVoiceUnlock = (SwitchPreferenceCompat) findPreference("key_set_unlock_phone_option_voice_command");
setVoiceUnlockSummary();
if (WakeupUtil.isVoiceUnlockSupported(getContext())) {
this.mSetVoiceUnlock.setOnPreferenceChangeListener(this);
return;
}
isVoiceUnlockSupported是否支持語音解鎖
isCustomWakeupSupported是否支持自定義喚醒詞
我要的播放音樂時(shí),也可以喚醒語音助手就是isMediaSupported
反編譯改包是有驗(yàn)證的,不只是簽名驗(yàn)證(過掉了),改包后包都起不來,有其他驗(yàn)證,沒再去深究
直接寫xposed模塊,hook這里,順便實(shí)現(xiàn)自定義喚醒詞
重啟手機(jī),驗(yàn)證效果
4.你以為成功了?
不是的,我們還是太天真了。ui選項(xiàng)是出來了,出現(xiàn)了【在手機(jī)揚(yáng)聲器播放時(shí)使用】的選項(xiàng),但是勾選后,退出進(jìn)來又是沒勾選的狀態(tài)。
來吧,繼續(xù)跟蹤代碼分析唄,一直分析這個(gè)函數(shù)到機(jī)型,SM-A505
public static boolean isMediaSupported() {
return 1 != getBargeInConfig();
}
public static int getBargeInConfig() {
int config = SemFloatingFeature.getInstance().getInt("SEC_FLOATING_FEATURE_BIXBY_CONFIG_BARGEIN_FUNCTION", 0);
if (isA50Device()) {
config = 1;
}
LogVoiceFw.d(TAG, "getBargeInConfig:" + config, new Object[0]);
return config;
}
private static boolean isA50Device() {
return Build.MODEL.contains("SM-A505");
}
最終是看到 SEC_FLOATING_FEATURE_BIXBY_CONFIG_BARGEIN_FUNCTION,這是個(gè)Feature特征
SemFloatingFeature這個(gè)是三星自己的framework的jar包
跟蹤無結(jié)果,想到以前搞過中興ZTE語音助手,想起來有個(gè)詞:雙麥克風(fēng)降噪
在其他bibxy兩個(gè)包里搜關(guān)鍵詞【SEC_FLOATING_FEATURE_BIXBY_CONFIG_BARGEIN_FUNCTION】
在語音喚醒這個(gè)包里搜到很關(guān)鍵的函數(shù)com.samsung.android.voicewakeup.VoiceWakeupInfo??isAecWakeupEnabled 這是回聲消除的判斷函數(shù)了,TAG是VoiceWakeupInfo
如果不支持回聲消除的機(jī)型,是不能在播放音樂時(shí)語音喚醒的,hook,打印原返回值,果然是不支持,強(qiáng)制返真,搞定,測試成功
很晚了,該睡覺了,
其他隱藏功能比如自定義語音喚醒詞,甚至別人的語音,直接喚醒解鎖手機(jī)都可以實(shí)現(xiàn)
今晚主要是為了想要一個(gè)聽音樂可以直接語音換歌,Bixby只支持網(wǎng)易云音樂的操作,明晚再把網(wǎng)易云音樂搞搞,廣告太多了,下載還收費(fèi)。。。
總結(jié)
以上是生活随笔為你收集整理的三星手机语音测试软件,三星语音助手隐藏功能的分析与hook的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java gdal_2、JAVA集成GD
- 下一篇: 迅雷导入未完成下载失败