service.jar删除APP校验
miui6版本修改方法:
反编译framework/services.jar,
定位到 \smali\com\miui\server\SecurityManagerService.smali文件,
搜索校验的包名”com.xiaomi.market“,
把以下语句删除,记得把:cond_0对应上下文逻辑修改。
.line 243
const-string v1, "android"
##############################
const-string v2, "com.xiaomi.market"
invoke-virtual {v0, v1, v2}, Landroid/content/pm/PackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
move-result v1
if-eqz v1, :cond_0
.line 244
new-instance v1, Ljava/lang/RuntimeException;
const-string v2, "System error : cannot find system app : com.xiaomi.market"
invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v1
.line 248
########################
:cond_0
return-void
.end method
miui7版本修改方法:
反编译framework/services.jar,
定位到 \smali\com\miui\server\SecurityManagerService.smali文件,
搜索
.method private checkSystemSelfProtection(Z)V
.method private checkSystemSelfProtection(Z)V
.locals 1
.param p1, "onlyCore" # Z
.prologue
########################################
.line 307
new-instance v0, Lcom/miui/server/SecurityManagerService$2;
invoke-direct {v0, p0, p1}, Lcom/miui/server/SecurityManagerService$2;-><init>(Lcom/miui/server/SecurityManagerService;Z)V
invoke-virtual {v0}, Lcom/miui/server/SecurityManagerService$2;->start()V
.line 341
#############################
return-void
.end method
####号之间的代码删除,并且删除framework下的
services.odex文件。
通用方案(去除所有校验):
打开SecurityManagerService.smali文件搜索checksystem定位到
然后删除
小米修改updater.apk屏蔽升级
实现效果:
点击【设置】-【关于手机】-【系统更新】选项:屏蔽升级提示,点击检查升级提示已经最新版,屏蔽下载完整包,选择本地升级包重启到recovery后提示刷机包校验失败。
实现方法:
反编译Updater.apk中的Updater2.smali,
第一步:屏蔽升级:
Updater2.smali找到onCheckFinish处,
增加如下代码,如上图红色框所示:
const/4 p3, 0x6
const/4 p2, 0x0
第二步:修改本地升级包路径:
根据选本地刷机包后logcat看到installInternalLocked中的p1是刷机包在recovery下的路径,修改之:
增加如下代码,如下图所示:
const-string p1, "/sd-card/base.zip"
注意:framework/services.jar有校验updater.apk,所以需要去掉校验,否则会无法进入系统,反编译之:
SecurityManagerService$2.smali找到