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

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

基本步骤

ROM下载
从这里下载对应机型的开发版或者稳定版
然后用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

f8cbeeb1851-47a0-b214-bd1ea3760653

 

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

3b58d213-cf2a-4d83-9e69-e78fbe33beb4

到此 系统解包好了 也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,然后编辑文件文件?fstab.qcom
删除第八行的字符串“,verify” //去除system分区验证
修改第九行的字符串“forceencrypt=footer”为“encryptable=footer”//去除强制加密分区
具体如图
QQ截图20160507194547

打包rom

论机型而定吧

点赞
  1. anyway说道:

    请问一下MIUI8增加高级设置,是不是要修改service.jar,发现仅仅改setting.apk虽然增加了高级设置这个按钮,但是点不开,请大神解答一下?

    1. anyway说道:

      我已经把包名和类名都填写了,就是不能触发软件启动,这是什么原因呢?难道还需要其他的更改吗?

      1. 油炸包子说道:

        不清楚你是怎么修改的 不好评价

  2. anysoft说道:

    你好 问一下 我想修改 setting.apk 但是用 apkdb 或者 APKIDE 载入framework.apk 后反编译 失败 请问一下需要导入哪些 库?从哪获得?谢啦

      1. anysoft说道:

        你好 我想 把4C刷机包自己解压后去BL和SYSTEM锁定 然后加入xposed和supersu 再 在设置菜单添加链接目前已经解压然后deodex setting也可以反编译了 请问 我要加入xposed的zip刷机包怎么加入到ROM里边 直接解压? 还有supersu.ZIP怎么放入ROM 设置 界面的菜单是怎么修改?必须反编译后修改smail文件么? 谢谢啦

          1. anysoft说道:

            谢啦 又近一步了 知道 用 updater-script 来合并刷机包了 目前还3个问题 1、我不清楚小米系统的验证和锁BL 是不是 修改不刷入aboot 和abootbak就不锁BL了 然后卡米 是必须反编译修改service.jar?分区验证 怎么弄也是service.jar ?还有分区权限 2、大概怎么精简system分区?不用原来system文件夹 还是用 SVADeodexerForArtx64_v4.1 合并后的分区文件夹? 3、settings.apk修改 因为没看到菜单中文在哪 不知道怎么修改十分感谢啦~我会java 但是对反编译不熟 勉强能看懂都

          2. 油炸包子说道:

            1.改boot 卡米看具体情况 2合并后替换原来的文件夹 3.smali里面肯定看不到啊

          3. anysoft说道:

            1 2 解决了 那修改设置里边菜单怎么改?smail 直接加代码?那菜单中的中文呢?u码?

          4. 油炸包子说道:

            教程里不是写了怎么操作了么 管那什么中文什么事情

          5. anysoft说道:

            好的我先试试 谢谢啦

  3. Stride丶说道:

    大神你好,看了你的教程获益良多,但是现在有一个小疑问,就是基于6.0的miui8和基于5.1的miui8修改方法是一样的吗?如果一样的话,为什么我修改完刷进去无限重启,设备是MI5

      1. Stride丶说道:

        我是用的以前的刷机脚本,然后直接ZIP 刷入的

        1. 油炸包子说道:

          小米5有刷机脚本?

  4. zjns说道:

    MIUI8 ThemeManager.apk不是应该修改ThemeOperationHander.smali吗?

  5. 西瓜说道:

    主题会反弹,miuisystem照着改的......大神怎么办 包是这周五的包

    1. 这个是xp插件的源码 自己照着改下试试 https://github.com/coderstory/toolkit

      1. 西瓜说道:

        ThemePather.java、2.java、3.java看了半天没看出所以然QAQ。还是用模块吧,主题和谐(通用模式)确实好用,谢谢大神

      2. 西瓜说道:

        刚刚又研究了下,添加了isTrialable返回false什么的,还是没用,放一段时间就反弹。看源码hook的函数返回就只有这些呀......模块就可以不反弹,xposed真神奇

          1. 西瓜说道:

            谢谢大神。除了DrmManager.smali,看了这文后,还改了ThemeReceiver.smali、ThemeReceiver$1.smali、DrmBroadcast.smali,也都没用,我放弃了.....

  6. 西瓜说道:

    找到了const-string v1, "oldman_mode_settings",果然查包名有用呀

    1. 西瓜说道:

      把包含oldman关键词的smali文件改了个遍没用,才发现要改xml.....

  7. 西瓜说道:

    照着1月的那篇改完,才发现有新的了 很有用,感谢大神。另外请教下,大神您们怎么找到这些函数的呀?为了删除Settings里的极简模式选项,眼睛看花了都没找到

  8. angongzi说道:

    大神怎么不做包啊?做点Deodex过的官方rom吧,我是小米max……

    1. coderstory说道:

      没这机型 有xp 感觉没必要了

    2. 没意思。。。而且我也没max