MIUI8 ROM Deodex 去广告 精简系统 破解主题 教程

这篇是适配MIUI8的教程 ?代码和工具都更新了
自己先安装JRE或JDK ?配置java运行时环境变量

基本步骤

ROM下载
http://www.miui.com/download.html
从这里下载对应机型的开发版或者稳定版
然后用winrar解压卡刷包
高版本的rom已经使用new.dat的形式封装system分区了
所以需要下载SystemExtractor解压system.new.dat
解包后将vendor\app下的文件夹扔到app文件夹里面
解压工具下载地址:?
http://forum.xda-developers.com/android/software-hacking/tool-tool-unpack-repack-imgsystem-dat-t3280740
*需要安装py和jre

MIUI8 ROM Deodex 去广告  精简系统  破解主题 教程-我的技术分享

 

解压后使用SVADeodexerForArtx32_v4进行deodex操作
过程中会报几个错误,无视掉.然后删除框架里的miui-update.jar
deodex工具下载地址:
http://pan.baidu.com/s/1bo3zT6Z

MIUI8 ROM Deodex 去广告  精简系统  破解主题 教程-我的技术分享

到此 系统解包好了 也deodex完毕了 可以开始你的修改计划了
比如删除不需要的app 删除系统里的recovery等等。
 

扩展修改

下面提供一些反编译修改的例子供参考
 

基础:反编译步骤

所需工具:
工具 apkdb
编辑工具 ?nptepad++
相关函数请使用文件夹搜索功能 搜索整个反编译后smali文件夹
 
下面的内容说明:
红色表示修改的文件
黄色表示修改的smali的路径(反编译后的)
灰绿色表示smali文件的文件名
绿色表示修改的内容 :修改前字符串 -> 修改后的字符串,如果是方法 则是修改后的方法
如果是函数的话 ?直接替换原来的函数就好了 注意下入参 可能有重载
提示:仅修改代码可直接反编译

services.jar

com/miui/server -->
SecurityManagerService$1.smali (也可能是SecurityManagerService$2.smali)-> ? ?(解决删除app导致卡米的问题)
?修改验证函数run 直接返回空 (我是通过logcat和包名找到这个位置的)
?# virtual methods
.method public run()V
.registers 9
.prologue
return-void
.end method
SecurityManagerService.smali-> ? (去除验证 必改)
思路是删除函数主体的校验代码直接返回空 ?强迫症的全局搜索这个函数的调用 ?把调用全删了 然后删除这个函数
?这个是app签名校验函数
.method private checkAppSignature([Landroid/content/pm/Signature;Ljava/lang/String;Z)V
.registers 13
.param p1, "validSignatures" # [Landroid/content/pm/Signature;
.param p2, "pkgName" # Ljava/lang/String;
.param p3, "checkEnabled" # Z
.prologue
return-void
.end method
?这个是平台签名校验
.method private checkPlatformSignature([Landroid/content/pm/Signature;)V
.registers 9
.param p1, "signatures" # [Landroid/content/pm/Signature;
.prologue
return-void
.end method
ThemeManager.apk (主题破解)
思路是删除函数主体的校验代码直接返回空 ?强迫症的全局搜索这个函数的调用 ?把调用全删了 然后删除这个函数
com/android/thememanager/util
ResourceOperationHandler.smali
这个函数大概是验证主题是否被篡改吧
.method public isAuthorizedResource()Z
.locals 1
.prologue
const/4 v0, 0x1
return v0
.end method
?
?验证是否有权使用:是否免费,收费的是否付费
.method public isPermanentRights()Z
? ? .registers 3
? ? .prologue
? ? const/4 v0, 0x1
? ? return v0
.end method
?
.method protected isLegal()Z
.registers 2
.prologue
? ? const/4 v0, 0x1
? ? return v0
.end method
com/android/thememanager/controller/online
drmservice.smali
.method public isLegal(Lcom/android/thememanager/model/Resource;)Lmiui/drm/DrmManager$DrmResult;
.registers 17
.param p1, "origin" # Lcom/android/thememanager/model/Resource;
.prologue

sget-object v0, Lmiui/drm/DrmManager$DrmResult;->DRM_SUCCESS:Lmiui/drm/DrmManager$DrmResult;
? return-object v0
.end method
 
Settings.apk ?(去除设置里的更新菜单)?
com\android\settings
MiuiDeviceInfoSettings.smali
.method public onCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V
? ? .locals 3
? ? .prologue
? ? return-void
.end method
?

miuisystem.apk

小米主题的DRM 不改的话 随时还原默认主题
这几个方法变了好几次了
说下思路
方法的主体代码改成创建一个DRM_SUCCESS 然后return
例如:sget-object v8, Lmiui/drm/DrmManager$DrmResult;->DRM_SUCCESS:Lmiui/drm/DrmManager$DrmResult;
? ? ? ? ? ?return-object v8
miui\drm
DrmManager.smali
?
.method public static isLegal(Landroid/content/Context;Ljava/io/File;Ljava/io/File;)Lmiui/drm/DrmManager$DrmResult;
? ? .registers 5
? ? .param p0, "context" ? ?# Landroid/content/Context;
? ? .param p1, "contentFile" ? ?# Ljava/io/File;
? ? .param p2, "rightsFile" ? ?# Ljava/io/File;
? ? .prologue
? ? .line 185
? ? sget-object v0, Lmiui/drm/DrmManager$DrmResult;->DRM_SUCCESS:Lmiui/drm/DrmManager$DrmResult;
? ? return-object v0
.end method
?
.method public static isLegal(Landroid/content/Context;Ljava/lang/String;Ljava/io/File;)Lmiui/drm/DrmManager$DrmResult;
? ? .registers 13
? ? .param p0, "context" ? ?# Landroid/content/Context;
? ? .param p1, "hash" ? ?# Ljava/lang/String;
? ? .param p2, "rightsFile" ? ?# Ljava/io/File;
? ? .prologue
? ? .line 190
? ? sget-object v0, Lmiui/drm/DrmManager$DrmResult;->DRM_SUCCESS:Lmiui/drm/DrmManager$DrmResult;
?
? ? return-object v0
.end method
?
.method private static isLegal(Landroid/content/Context;Ljava/lang/String;Lmiui/drm/DrmManager$RightObject;)Lmiui/drm/DrmManager$DrmResult;
? ? .registers 15
? ? .param p0, "context" ? ?# Landroid/content/Context;
? ? .param p1, "targetAsset" ? ?# Ljava/lang/String;
? ? .param p2, "ro" ? ?# Lmiui/drm/DrmManager$RightObject;
? ? .prologue
? ? sget-object v0, Lmiui/drm/DrmManager$DrmResult;->DRM_SUCCESS:Lmiui/drm/DrmManager$DrmResult;
? ? return-object v0
.end method
?
下面2个返回类型是boolean 所以直接返回true (0x1)
.method public static isPermanentRights(Ljava/io/File;)Z
? ? .registers 2
? ? .param p0, "rightsFile" ? ?# Ljava/io/File;
? ? .prologue
? ? .line 258
? ? const/4 v0, 0x1
? ? return v0
.end method
?
.method private static isPermanentRights(Lmiui/drm/DrmManager$RightObject;)Z
? ? .registers 5
? ? .param p0, "ro" ? ?# Lmiui/drm/DrmManager$RightObject;
? ? .prologue
? ? const/4 v0, 0x1
? ? return v0
.end method

boot修改

使用如下工具解包boot
boot修改工具
自己解包boot,然后编辑文件文件?fstab.qcom
删除第八行的字符串“,verify” //去除system分区验证
修改第九行的字符串“forceencrypt=footer”为“encryptable=footer”//去除强制加密分区
具体如图
MIUI8 ROM Deodex 去广告  精简系统  破解主题 教程-我的技术分享

打包rom

论机型而定吧