吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5861|回复: 23
收起左侧

[Android 原创] 三星语音助手隐藏功能的分析与hook

[复制链接]
回不去的时光 发表于 2020-3-22 02:40
本帖最后由 回不去的时光 于 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
    <android.support.v7.preference.PreferenceCategory android:layout="@layout/settings_preference_separator_category" android:key="key_category_wakeup_option">
        <android.support.v7.preference.SwitchPreferenceCompat android:persistent="false" android:title="@string/settings_voice_wakeup_allow_media_option" android:key="key_set_media_option_voice_command" android:summary="@string/settings_voice_wakeup_allow_media_option_message" />
        <com.samsung.android.bixby.settings.customview.CustomSeekBarPreference android:persistent="false" android:key="key_sensitivity" />
        <android.support.v7.preference.Preference android:persistent="false" android:title="@string/settings_voice_wakeup_train_bixby" android:key="key_set_voice_command" android:summary="@string/settings_voice_wakeup_train_bixby_summary" />
    </android.support.v7.preference.PreferenceCategory>
这里布局也没啥给力的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只支持网易云音乐的操作,明晚再把网易云音乐搞搞,广告太多了,下载还收费。。。



        

免费评分

参与人数 5吾爱币 +4 热心值 +5 收起 理由
xielque + 1 我很赞同!
bobodh22 + 1 + 1 我很赞同!
t3x + 1 + 1 我很赞同!
dahu1221 + 1 + 1 小白看不懂,但是看你打字多分给你了
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lXSATANXt 发表于 2020-3-23 15:12
可以找找以前的bixby程序,以前是支持同时识别的。后来三星发现用户挺喜欢就砍了
xuhoor 发表于 2020-3-23 11:17
double易 发表于 2020-3-22 09:34
三星手机你都root熔断了啊?是原来的系统不好用吗

如果是韩版,root是必须的
逆劫古修 发表于 2020-3-22 07:09
QQ大会员 发表于 2020-3-22 07:21
支持原创
wy7414 发表于 2020-3-22 07:35
这个可以  虽然对我没什么用
头像被屏蔽
mokson 发表于 2020-3-22 08:28
提示: 作者被禁止或删除 内容自动屏蔽
sheensh 发表于 2020-3-22 08:40
感谢分享三星语音助手隐藏功能的分析与hook
hyoulin68 发表于 2020-3-22 08:42
大神级别,支持原创!
kevin67890 发表于 2020-3-22 08:55
三星路过支持一下!
zpwz 发表于 2020-3-22 09:25
能提取出来,就好了
double易 发表于 2020-3-22 09:34
三星手机你都root熔断了啊?是原来的系统不好用吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表