2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 三星手机语音测试软件 三星语音助手隐藏功能的分析与hook

三星手机语音测试软件 三星语音助手隐藏功能的分析与hook

时间:2022-04-18 01:17:42

相关推荐

三星手机语音测试软件 三星语音助手隐藏功能的分析与hook

本帖最后由 回不去的时光 于 -3-23 22:06 编辑

明明是原创,纯手打,也被移动到分享区,吾爱管理员的脑袋是不是都被门卡过。。。目的:实现三星Bixby在播放音乐时,也可以唤醒语音助手

三星手机软件都是通用的,也就是说三星软件都是一样的,只是在代码里判断机型,隐藏掉一些功能罢了

我今晚要实现一个功能就是: S10在播放音乐时,Bixby语音助手也可以黑屏语音唤醒

分析过程很漫长:

1.首先是拿到三个关键包(一般语音助手也就一个,想不懂三星搞那么多干啥)

Bixby 服务_2.3.02.0

Bixby 语音_2.3.02.0

语音唤醒_2.1.16.16

2.搜索关键词【唤醒】

在res里搜到【即使手机扬声器正在播放铃声、闹钟或媒体音乐,您依旧可以使用语音唤醒 Bixby】

进一步分析到【settings_voice_wakeup_allow_media_option】然后搜索id(没结果)、只能跟踪布局来定位位置

布局:settings_wakeup_preferences.xml

这里布局也没啥给力的button等有关的id可以分析,只能搜关键词【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是否支持自定义唤醒词

我要的播放音乐时,也可以唤醒语音助手就是isMediaSupported

反编译改包是有验证的,不只是签名验证(过掉了),改包后包都起不来,有其他验证,没再去深究

直接写xposed模块,hook这里,顺便实现自定义唤醒词

重启手机,验证效果

4.你以为成功了?

不是的,我们还是太天真了。ui选项是出来了,出现了【在手机扬声器播放时使用】的选项,但是勾选后,退出进来又是没勾选的状态。

来吧,继续跟踪代码分析呗,一直分析这个函数到机型,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,这是个Feature特征

SemFloatingFeature这个是三星自己的framework的jar包

跟踪无结果,想到以前搞过中兴ZTE语音助手,想起来有个词:双麦克风降噪

在其他bibxy两个包里搜关键词【SEC_FLOATING_FEATURE_BIXBY_CONFIG_BARGEIN_FUNCTION】

在语音唤醒这个包里搜到很关键的函数com.samsung.android.voicewakeup.VoiceWakeupInfoisAecWakeupEnabled 这是回声消除的判断函数了,TAG是VoiceWakeupInfo

如果不支持回声消除的机型,是不能在播放音乐时语音唤醒的,hook,打印原返回值,果然是不支持,强制返真,搞定,测试成功

很晚了,该睡觉了,

其他隐藏功能比如自定义语音唤醒词,甚至别人的语音,直接唤醒解锁手机都可以实现

今晚主要是为了想要一个听音乐可以直接语音换歌,Bixby只支持网易云音乐的操作,明晚再把网易云音乐搞搞,广告太多了,下载还收费。。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。