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

本帖最后由 回不去的时光 于 2020-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.VoiceWakeupInfo  isAecWakeupEnabled 这是回声消除的判断函数了,TAG是VoiceWakeupInfo

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

很晚了,该睡觉了,

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值