OPPO.1107刷机笔记

手动 转移任意APP为系统APP的方法流程简述

宗旨: 保持和系统原本同目录下的文件各种设置(权限,所有者,SE上下文),目录结构保持一致即可!

  1. 从 /data/app/里将对应的APP文件移动到 /system/app 里.

    Android 5.0 之后的系统在APP目录里可能存在 AppName/AppName.apk 目录等,都需要全部移动走.

  2. 设置APP的文件权限为(0644)
  3. 所有者为(0:0,root:root)
  4. SE上下文为u:object_r:system_file:s0(部分系统开启了SELinux子系统时才需要设置)
  5. 重启即可

将任意APP转换为OPPO的Color OS 系统APP方法步骤:

由于OPPO的ColorOS系统定制了系统底层,使之无法识别在系统目录里的非OPPO应用.

所以需要将需要转换的APP包名增加到OPPO应用白名单里才能保证转移后开机识别到.

  1. 使用 加密文件 **pl.fs** 生成算法 将任意APP的PackageName包名增加进去得到新pl.fs
  2. 将新pl.fs文件替换老的/system/etc/security/pl.fs文件
  3. 使用钛备份幸运破解器手动将任意APP - 转换为系统应用即可.

包含Oppo所有APP应用程序包名列表的 加密文件 pl.fs 生成算法

try
{
        //生成加密文件
        mOppoApkList.add("cn.asiontang.launcher");
        StringBuilder stringBuilder = new StringBuilder();
        for (String p : mOppoApkList)
            stringBuilder.append(p).append("\n");
        final byte[] bytes = stringBuilder.toString().getBytes("UTF-8");
        for (int i = 0; i < bytes.length; i++)
        {
            bytes[i] = (byte) (~bytes[i]);
            bytes[i] = (byte) (bytes[i] ^ a);
        }
        new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "pl.fs")).write(bytes);
}
catch (Exception e)
{
    e.printStackTrace();
}

ReadEncryptFile 读取 mOppoApkList 关键的解密函数(翻译为JAVA代码)

try
{
    final InputStream open = getResources().getAssets().open("pl.fs");
    byte[] pl = new byte[open.available()];
    final byte[] a = "a".getBytes("UTF-8");
    final int read = open.read(pl);
    for (int i = 0; i < read; i++)
    {
        pl[i] = (byte) (pl[i] ^ a[0]);
        pl[i] = (byte) (~pl[i]);
    }
    final String s = new String(pl, 0, read);
    final String[] split = s.split("\n");
    mOppoApkList.addAll(Arrays.asList(split));
}
catch (Exception e)
{
    e.printStackTrace();
}

ReadEncryptFile 读取 mOppoApkList 关键的解密函数(反编译为 .smali 代码)

.method public static ReadEncryptFile()I
          .registers 15
00000000  const/4             v12, 0
00000002  const/4             v11, -1
00000004  const/4             v3, 0
:6
00000006  const-string        v13, "ColorPackageManager"
0000000A  const-string        v14, "ReadEncryptFile!!!"
0000000E  invoke-static       Slog->d(String, String)I, v13, v14
00000014  new-instance        v9, File
00000018  const-string        v13, "/system/etc/security/pl.fs"
0000001C  invoke-direct       File-><init>(String)V, v9, v13
00000022  invoke-virtual-quick [email protected], v9
:28
00000028  move-result         v13
0000002A  if-nez              v13, :3A
:2E
0000002E  if-eqz              v3, :38
:32
00000032  invoke-virtual-quick [email protected], v3
:38
00000038  return              v11
:3A
0000003A  invoke-virtual-quick [email protected], v9
00000040  move-result-wide    v13
00000042  long-to-int         v7, v13
00000044  new-array           v1, v7, [B
00000048  const-string        v13, "a"
0000004C  const-string        v14, "UTF-8"
00000050  invoke-virtual-quick [email protected], v13, v14
00000056  move-result-object  v0
00000058  new-instance        v4, FileInputStream
0000005C  invoke-direct       FileInputStream-><init>(File)V, v4, v9
:62
00000062  invoke-virtual-quick [email protected], v4, v1
00000068  const/4             v5, 0
:6A
0000006A  if-ge               v5, v7, :94
:6E
0000006E  aget-byte           v13, v1, v5
00000072  const/4             v14, 0
00000074  aget-byte           v14, v0, v14
00000078  xor-int/2addr       v13, v14
0000007A  int-to-byte         v13, v13
0000007C  aput-byte           v13, v1, v5
00000080  aget-byte           v13, v1, v5
00000084  xor-int/lit8        v13, v13, -0x01
00000088  int-to-byte         v13, v13
0000008A  aput-byte           v13, v1, v5
0000008E  add-int/lit8        v5, v5, 0x01
00000092  goto                :6A
:94
00000094  new-instance        v10, String
00000098  const/4             v13, 0
0000009A  invoke-direct       String-><init>([B, I, I)V, v10, v1, v13, v7
000000A0  const-string        v13, "\n"
000000A4  invoke-virtual-quick [email protected], v10, v13
000000AA  move-result-object  v8
000000AC  const/4             v6, 0
:AE
000000AE  array-length        v13, v8
000000B0  if-ge               v6, v13, :10C
:B4
000000B4  sget-object         v13, ColorPackageManagerHelper->mOppoApkList:ArrayList
000000B8  aget-object         v14, v8, v6
000000BC  invoke-virtual-quick [email protected], v13, v14
:C2
000000C2  add-int/lit8        v6, v6, 0x01
000000C6  goto                :AE
:C8
000000C8  move-exception      v2
:CA
000000CA  invoke-virtual-quick [email protected], v2
:D0
000000D0  if-eqz              v3, :38
:D4
000000D4  invoke-virtual-quick [email protected], v3
:DA
000000DA  goto                :38
:DC
000000DC  move-exception      v2
:DE
000000DE  invoke-virtual-quick [email protected], v2
000000E4  goto                :38
:E6
000000E6  move-exception      v2
:E8
000000E8  invoke-virtual-quick [email protected], v2
:EE
000000EE  if-eqz              v3, :38
:F2
000000F2  invoke-virtual-quick [email protected], v3
:F8
000000F8  goto                :38
:FA
000000FA  move-exception      v2
000000FC  goto                :DE
:FE
000000FE  move-exception      v11
:100
00000100  if-eqz              v3, :10A
:104
00000104  invoke-virtual-quick [email protected], v3
:10A
0000010A  throw               v11
:10C
0000010C  if-eqz              v4, :116
:110
00000110  invoke-virtual-quick [email protected], v4
:116
00000116  move                v11, v12
00000118  goto                :38
:11A
0000011A  move-exception      v2
0000011C  invoke-virtual-quick [email protected], v2
00000122  goto                :10A
:124
00000124  move-exception      v2
00000126  goto                :DE
:128
00000128  move-exception      v2
0000012A  invoke-virtual-quick [email protected], v2
00000130  goto                :116
:132
00000132  move-exception      v11
00000134  move-object         v3, v4
00000136  goto                :100
:138
00000138  move-exception      v2
0000013A  move-object         v3, v4
0000013C  goto                :E8
:13E
0000013E  move-exception      v2
00000140  move-object         v3, v4
00000142  goto                :CA
          .catch FileNotFoundException {:6 .. :28} :C8
          .catch IOException {:6 .. :28} :E6
          .catchall {:6 .. :28} :FE
          .catch IOException {:32 .. :38} :124
          .catch FileNotFoundException {:3A .. :62} :C8
          .catch IOException {:3A .. :62} :E6
          .catchall {:3A .. :62} :FE
          .catch FileNotFoundException {:62 .. :C2} :13E
          .catch IOException {:62 .. :C2} :138
          .catchall {:62 .. :C2} :132
          .catchall {:CA .. :D0} :FE
          .catch IOException {:D4 .. :DA} :DC
          .catchall {:E8 .. :EE} :FE
          .catch IOException {:F2 .. :F8} :FA
          .catch IOException {:104 .. :10A} :11A
          .catch IOException {:110 .. :116} :128
.end method

为啥无论是通过软件还是手动移植APP到系统System APP目录下都无法生效?同样的手法别的手机却可以.

费尽千辛万苦终于找到原因为:

PackageManager: This is not oppo app, so skip it :/system/app/cn.xx.launcher-1.apk

反编译ROM里的 services.odex - PackageManagerService.java - ColorPackageManagerHelper.java - IsOppoApkListReadEncryptFile - 加密的"/system/etc/security/pl.fs"文件

OPPO 1107 移动定制版本的区别 和 刷机包的选择

原来的系统开机启动时会有移动 4G LTE 的LOGO,刷了 1107_11_A.20_OTA_020_all_201512151836.zip 版本(OPPO 论坛官网下载的)之后,就没有了。功能则基本测试都正常。

移动定制版本 1107_11_B.03_XXXXXX ROM版本没公开的市场版本ROM新.就没测试.

SELinux 如何修改权限

  1. 使用 ls -Z 可以查看文件的 各种权限
  2. 使用 chcon u:object_r:system_file:s0 XX.APK 修改SE上下文
  3. 使用 Root Explorer 可以修改所有者,权限,SE上下文.

Root 后卸载 KingRoot 换用 SuperSu 的方法

  1. 通过刷机精灵 或者 RootGenius Root精灵 成功 Root 掉 OPPO 1107 设备
  2. 此时系统里安装的是 KingRoot APP来管理 Root权限
  3. 然后安装第三方 Recovery

    如可通过 ‘Official TWRP App‘ APP 即可刷入 第三方Recovery镜像.

  4. 然后进入 Recovery 卡刷完整 ROM包 1107_11_A.20_OTA_020_all_201512151836.zip
  5. 在重启时,会提示"是否禁止还原到官方Recovery" 选择 "否"

    如果选择是,则第三方 Recovery 还将保留,但是 无法进入下一个选择"是否Root"的界面了.

  6. 然后弹出"是否Root" 选择 "是"
  7. 重启之后,安装 SuperSu APP即可.

支持将APK软件 ODEX 化的APP有:

  1. 幸运破解器

    点击指定APP - 工具箱 - Odex化此应用

  2. 钛备份

    点击指定APP - 转换为系统程序

  3. Link2SD ??

    点击指定APP - ??

时间: 2024-08-28 00:40:40

OPPO.1107刷机笔记的相关文章

oppo X907刷机包 COLOROS 1.0 正式版发布 安卓4.2.2

ROM介绍 本版本将是X907史上最好的一版本 全新COLOROS的UI 更新全局手势板操作 优化快速启动应用 安全保障中心也是一直采用COLOROS组成的 COLOROS 1.0给用户带来在线音乐.视频等娱乐各种特别用了你就知道 更多的自己测试 ________________________________________________________________ Rom下载地址:http://www.shuajizhijia.com/oppo/x907/3507/ 更多OPPO X9

OPPO A7X 刷机小结

OPPO A7X 刷机小结: 概述:根据网上找到的教程(MTK模式刷机教程),没有成功.在QQ上询问一位提供刷机服务的大神,说是只有老版本才能刷. 操作步骤: 刷机工具: MediaTek SP Flash Tool v5.1812.00 (智能手机下载工具)刷机包:OPPO-A7x_PBBM00_11_A.06_180926 官方线刷包 在安装驱动时就不顺利.为此我把系统换成了Windows7 X64 (笔记本的Win7X32也尝试过).但换了系统还是不行,最后自己找的 QcomMtk_Dri

Sony Z1 flashtool 刷机笔记

第一次硬刷,(相较于recovery的卡刷)差点变成无限重启..记录一些关键步骤: 1 unlock bootloader http://developer.sonymobile.com/unlockbootloader/unlock-yourboot-loader/ 2 下rom http://xperiafirmware.com/8-firmware/42-sony-xperia-z1-c6902 (.tft),不同于卡刷(.zip文件) 3 硬刷工具 flashtool http://ww

Ye.云狐J2刷机笔记 | 完美切换内部存储卡和SD卡的改法.vold.fstab

================================================================================Ye.完美切换内部存储卡和SD卡成功.vold.fstab================================================================================原文件: dev_mount sdcard /storage/sdcard0 [email protected] /dev

Nexus 5 LG&quot;hammerhead&quot;刷机(刷原厂系统镜像)

Nexus 5到手是4.x的系统,系统通知有升级到5.0的包,就直接在后台下载安装了.平面的风格相当喜欢,但是系统占内存貌似比4.x要多,chrome也时常卡顿.然而最无法忍受的是——我用的AnyConnect的客户端只支持到4.x.有一款Openconnect的第三方客户端可以用,但是经常断线,而且这两天貌似全部停止服务,除了连接不上,豌豆荚和play市场也都无法下载.AnyConnect连接不上,系统自带的vpn居然也不行,因此只能刷机. ——现已刷回4.4,对5.x的界面非常不舍.希望下半

从CM刷机过程和原理分析Android系统结构

前面101篇文章都是分析Android系统源代码,似乎不够接地气. 假设能让Android系统源代码在真实设备上跑跑看效果,那该多好.这不就是传说中的刷ROM吗?刷ROM这个话题是老罗曾经一直避免谈的,由于认为没有全面了解Android系统前就谈ROM是不完整的.写完了101篇文章后.老罗认为第102篇文章该谈谈这个话题了,而且选择CM这个有代表性的ROM来谈.目标是加深大家对Android系统的了解. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! <A

华硕zenfone2 ze551ml刷机

以下内容为记事,供自己以后可能需要的参考. 购买时间:    2016年12月买的asus zenfone2 ze551ml,性能不错,配置高,使用流畅,支持NFC,双开双待,有快充,像素也不错,比我之前买的OPPO X9077强多了,系统流畅上很明显的差别. 使用体验(CM-5.0): 买回来是CM-5.0的系统,推送了一次升级到0.197版本,有很多不错的应用,比如华硕的pc link上班时候可以不用看手机,remote link可是在需要时代替鼠标,还要很喜欢的用户模式,可以建立隐私模式使

Android刷机教程

我的机器是Nexus 5 一. 安装驱动 如何进入fastboot模式 1. 拔掉数据线,将手机关机 2. 关机后同时按住[音量减小键]和[开关机键]即可进入Fastboot模式 开启usb调试  --> 勾选usb调试 adb devices可以看到设备名即可 二. 下载刷机包 这是Android 4.4的刷机包,大家可以根据需求自己寻找指定的版本的刷机包 https://dl.google.com/dl/android/aosp/hammerhead-kot49h-factory-02006

酷派8150S(移动定制版)可用的第三方Recovery备份数据、刷机并精简系统内置APK经验

希望使用的第三方Recovery下载地址: ClockworkMod ROM Manager - Recoveries http://clockworkmod.com/rommanager 适配的型号很多,版本也很多,但是不知道哪个版本的Recovery在酷派8150S上能正常使用,于是只能使用最笨的办法一个个移植后刷试试. 移植的方法是网上搜的: 1.准备要移植的其他第三方recovery,注:最好是和你的机器是相同平台的,比如要我的T910是MTK6577的,我移植的是夏新N820也是MT6