-
-
[原创]简单分析华为emui10对第三方桌面的禁用逻辑(华为手机管家app) + 求助新rom的分析入手思路
-
发表于: 2020-3-7 17:20 5595
-
华为开启emui10的公测后, 之前一直禁止切换默认launcher的情况有了新的解决办法 : 冻结 手机管家 即可设置 第三方launcher
这里简单分析华为手机管家中 相关逻辑
- 求助: 在 最新版本 emui10 中 , 此方法已被修复 , 无法使用adb或冰箱冻结华为手机管家
- 有没有大佬知道 更彻底 禁用 或冻结app的方案 .
- 关于 新版 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 |
jadx-gui 搜索 launcher
- 3 类名:
LauncherAnalyze
implements IMalConditionAnalyzer
package com.huawei.securitycenter.antimal;LauncherPredicate
implements Predicate<ProcessAppItem>
package com.huawei.systemmanager.optimize.process.Predicate;
主要是 判断当前 launcherLauncherStringPredicate
implements Predicate<String>
- 3 类名:
搜索
LauncherAnalyze
2结果 , 实现 和调用实现
123456789101112131415161718192021IMalConditionAnalyzer 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行123456IMalConditionAnalyzer 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编辑
,原因: 格式错误
赞赏
赞赏
雪币:
留言: