安装JRE或JDK 配置java运行时环境变量
ROM下载
从这里下载对应机型的开发版或者稳定版
然后用winrar解压卡刷包
高版本的rom已经使用new.dat的形式封装system分区了
所以需要下载SystemExtractor解压system.new.dat

f8cbeeb1-1851-47a0-b214-bd1ea3760653

解压后使用SVADeodexerForArtx32_v4进行deodex操作
过程中会报几个错误,无视掉.然后删除框架里的miui-update.jar

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

刷机脚本替换成旧版本的:
(这个脚本已处理 刷了不会再次锁BL)
这个时候,你制作成卡刷包 一般是OK了,对system.new.dat解压并deodex操作.
然后修改smali完成你的自定义处理.
但事实上还需要对代码做一些修改 去除验证才能完成开机进入系统
反编译步骤
工具 apkdb
编辑工具 nptepad++
相关函数请使用文件夹搜索功能 搜索整个反编译后smali文件夹
下面的东西的说明:
红色表示修改的文件
黄色表示修改的smali的路径(反编译后的)
灰绿色表示smali文件的文件名
绿色表示修改的内容 :修改前字符串 -> 修改后的字符串
如果是函数的话 直接替换原来的函数就好了 注意下入参个数
apk仅反编译dex文件

services.jar

com/miui/server -->
SecurityManagerService$2.smali (或者是SecurityManagerService$1.smali)-> (精简系统更新和商店需要修改的)
修改验证函数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
这个是平台签名校验(对付雷电os用的 你刷了雷电就等着卡米吧)
.method private checkPlatformSignature([Landroid/content/pm/Signature;)V
.registers 9
.param p1, "signatures" # [Landroid/content/pm/Signature;
.prologue
return-void
.end method
ThemeManager.apk (主题破解)提示:直接反编译dex文件即可
思路是删除函数主体的校验代码直接返回空 强迫症的全局搜索这个函数的调用 把调用全删了 然后删除这个函数
miui/resourcebrowser/view
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
Settings.apk (去除设置里的更新菜单) 提示:直接反编译dex文件即可
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
fstab