首页
社区
课程
招聘
[原创]简单分析华为emui10对第三方桌面的禁用逻辑(华为手机管家app) + 求助新rom的分析入手思路
发表于: 2020-3-7 17:20 5595

[原创]简单分析华为emui10对第三方桌面的禁用逻辑(华为手机管家app) + 求助新rom的分析入手思路

2020-3-7 17:20
5595

华为开启emui10的公测后, 之前一直禁止切换默认launcher的情况有了新的解决办法 : 冻结 手机管家 即可设置 第三方launcher

 

这里简单分析华为手机管家中 相关逻辑

  • 求助: 在 最新版本 emui10 中 , 此方法已被修复 , 无法使用adb或冰箱冻结华为手机管家
    1. 有没有大佬知道 更彻底 禁用 或冻结app的方案 .
    2. 关于 新版 rom 中 进行了什么操作 实现 无法冻结 的效果 , 求 大佬们指点 思路 , 可以从什么 角度 去分析 , 非常感谢

分析过程

获取apk

1
2
3
4
pm list packages -f | grep com.huawei.systemmanager
package:/system/priv-app/HwSystemManager/HwSystemManager.apk=com.huawei.systemmanager
 
adb pull /system/priv-app/HwSystemManager/HwSystemManager.apk
  1. jadx-gui 搜索 launcher

    • 3 类名:
      • LauncherAnalyze implements IMalConditionAnalyzer
        package com.huawei.securitycenter.antimal;
      • LauncherPredicate implements Predicate<ProcessAppItem>
        package com.huawei.systemmanager.optimize.process.Predicate;
        主要是 判断当前 launcher
      • LauncherStringPredicate implements Predicate<String>
  2. 搜索 LauncherAnalyze
    2结果 , 实现 和调用

    • 实现

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      IMalConditionAnalyzer detectEachCondition(ConditionType type) {
            switch (type) {
                case BATCH_INSTALL:
                    return new BatchInstallationAnalyze(this.mContext);
       
                case THIRD_DESKTOP:
                    return new LauncherAnalyze(this.mContext);
       
                case KEY_APP_DISABLED:
                    return new SystemAppAnalyze(this.mContext);
                case DEVICE_MGR_OVERFLOW:
                    return new DeviceManagerAppAnalyze(this.mContext);
                case CONFIGS_MAL_MODIFIED:
                    return new SystemSettingsAnalyze(this.mContext);
                case DEVICE_OWNER_APP_INSTALLED:
                    return new DeviceOwnerAppAnalyze(this.mContext);
                default:
                    HwLog.e(TAG, "detectEachCondition: unknown type");
                    return null;
            }
        }
    • 一个调用处
      package com.huawei.securitycenter.antimal
      class MalDetectManager : startAnalyze()

      其中 循环一次 分析 多种情况 , type 循环累加 的序号
      只出现一次
      87行

      1
      2
      3
      4
      5
      6
      IMalConditionAnalyzer malConditionAnalyzer = this.mMalConditionDetector.detectEachCondition(type);
      if (malConditionAnalyzer == null || !malConditionAnalyzer.isMeetMalCondition(configManager)) {
          res = false;
      } else {
          res = true;
      }
1
2
3
4
5
6
7
8
9
10
11
12
com.huawei.securitycenter.antimal.MalDetectManager: starAnalyze()
-> com.huawei.securitycenter.antimal.MalConditionDetector :detectEachCondition()
-> com.huawei.securitycenter.antimal.LauncherAnalyze.LauncherAnalyze ->  this.mMalBaseData.setThirdLauncher(true);
-> void setThirdLauncher(boolean thirdLauncher) {
        this.mMalDetectInfo.isThirdLauncher = thirdLauncher;
        writeMalDetectDataToFile();
    }
-> AntiMalUtils.writeJsonObjectToFile(this.mMalDetectInfo.malDetectDataToJson(), this.mMalDetectDataPath);
-> MalBaseDataCenter  : initFilePath()
    String antimalPath = MalwareConst.DATA_HSM_MANAGER_PATH_EMUI5 + "antimal";
    // class MalwareConst :  static final String DATA_HSM_MANAGER_PATH_EMUI5 = (Environment.getDataDirectory() + "/misc/hsm/files/");
    this.mMalDetectDataPath = antimalPath + File.separator + "maldetectdata.json";

-> 存储到 /data/misc/hsm/files/maldetectdata.json

 

总结 :
此功能 流程 仅为 探测 是否存在 第三方桌面

恢复 华为桌面

搜索 thirdlauncher

 

com.huawei.securitycenter.antimal.MalRecoveryManager;

1
2
3
4
5
6
7
8
9
10
11
12
private void resetDefaultConfigs() {
        if (this.mMalBaseData.isThirdLauncher()) {
            recoverHwDesktop();
            this.mMalBaseData.setThirdLauncher(false);
        }
 
 
private void recoverHwDesktop() {
        if (!AntiMalUtils.isNowLauncher(this.mContext, "com.huawei.android.launcher")) {
            AntiMalUtils.setDefaultLauncher(this.mContext);
        }
    }

package com.huawei.securitycenter.antimal;
class AntiMalUtils

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
static boolean isNowLauncher(Context context, String pkgName) {
        if (context == null || TextUtils.isEmpty(pkgName)) {
            HwLog.e(TAG, "isNowLauncher param is null.");
            return false;
        }
        PackageManager packageManager = context.getPackageManager();
        if (packageManager == null) {
            return false;
        }
        ResolveInfo res = packageManager.resolveActivity(getMainIntent(), 0);
        if (res != null && res.activityInfo != null) {
            return pkgName.equals(res.activityInfo.packageName);
        }
        HwLog.e(TAG, "resolveInfo param is null.");
        return false;
    }
 
 
static void setDefaultLauncher(Context context) {
        if (context != null) {
            boolean isFromLauncher = isLauncherOnForeground(context);
            HwLog.i(TAG, "isFromLauncher = " + isFromLauncher);
            PackageManager packageManager = context.getPackageManager();
            if (packageManager != null) {
                List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(getMainIntent(), 0);
                if (resolveInfoList != null && !resolveInfoList.isEmpty()) {
                    ActivityInfo activityInfo;
                    for (ResolveInfo resolveInfo : resolveInfoList) {
                        if (resolveInfo != null) {
                            activityInfo = resolveInfo.activityInfo;
                            if (!(activityInfo == null || activityInfo.packageName == null)) {
                                packageManager.clearPackagePreferredActivities(activityInfo.packageName);
                            }
                        }
                    }
                    int length = resolveInfoList.size();
                    int findDex = -1;
                    ComponentName[] set = new ComponentName[length];
                    for (int i = 0; i < length; i++) {
                        activityInfo = ((ResolveInfo) resolveInfoList.get(i)).activityInfo;
                        if (!(activityInfo == null || activityInfo.packageName == null || activityInfo.name == null)) {
                            set[i] = new ComponentName(activityInfo.packageName, activityInfo.name);
                            if ("com.huawei.android.launcher".equals(activityInfo.packageName)) {
                                findDex = i;
                                break;
                            }
                        }
                    }
                    if (findDex != -1) {
                        IntentFilter inf = new IntentFilter("android.intent.action.MAIN");
                        inf.addCategory("android.intent.category.HOME");
                        inf.addCategory("android.intent.category.DEFAULT");
                        packageManager.addPreferredActivity(inf, 1048576, set, set[findDex]);
                    }
                    if (isFromLauncher) {
                        try {
                            context.startActivity(getMainIntent());
                        } catch (ActivityNotFoundException e) {
                            HwLog.e(TAG, "set defaultLauncher to start activity found an exception: " + e.getMessage());
                        }
                    }
                }
            }
        }
    }

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

最后于 2020-3-7 17:24 被ShdHrzn编辑 ,原因: 格式错误
收藏
免费
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册