AI手机网,短视频直播 硬改改机 一键新机 群控软件 刷机定制

 找回密码
 立即注册
搜索
查看: 2707|回复: 6

给boot.img 打补丁 内置boot.img制作内置root权限

[复制链接]
发表于 2021-2-2 11:56:06 | 显示全部楼层 |阅读模式
给boot.img 打补丁 内置boot.img制作内置root权限

准备工作:

  • 下载 官方Full-OTA update.zip。从这里找 pro-teammt.ru/firmware-database/?firmware_model=&firmware_page=1 ,搜搜自己的手机型号(可从“关于手机/型号”中查看),比如 荣耀V10高配版为BKL-AL20。下载大于1G甚至2G的FULL-OTA的update.zip文件。下载完成后解压,得到update.app文件
  • Huawei update extrator,下载地址:forum.xda-developers.com/showthread.php?t=2433454 ,该软件可解包上述update.app文件,提取出ramdisk.img和vendor.img
  • Bootimg.exe,下载地址:github.com/cofface/android_bootimg 这个工具用来解包ramdisk.img
  • ROM助手,rom大师,随便什么,能打开vendor.img的。
  • 下载supersu beta版,到xda-developor论坛自行下载,本文编写是的版本为supersu beta 2.82 sr5。

开始动手:
6. 解压update.zip得到update.app
7. 用Huawei update extrator解包update.app(解包前,先到设置中,去掉 verify header checksum,否则打不开)
8. 把ramdisk.img和vendor.img提取出来
9. 把ramdisk.img改名为boot.img,并与bootimg.exe放到同一个文件夹
10. 在该文件夹启动cmd(文件→打开命令行提示符),输入bootimg.exe --unpack-bootimg,解包
11. 解包后,编辑initrd文件夹下的init.rc文件,在import /init.${ro.zygote}.rc下添加一行import init.supersu.rc
12. 删除verity_key
13. 解压supersu,把supersu的文件按照这个文件树重新组织,并打包成root.tar (注意,是tar,用tar cvf 命令)


  1. #  压缩文件 C:\android_bootimg-master\root.tar
  2. SuperSU.apk
  3. supersu_install
  4. supersu_install\bin
  5. supersu_install\bin\su
  6. supersu_install\bin\daemonsu
  7. supersu_install\bin\supolicy
  8. supersu_install\bin\supolicy_wrapped
  9. supersu_install\bin\sukernel
  10. supersu_install\xbin
  11. supersu_install\lib
  12. supersu_install\lib\libsupol.so
  13. supersu_install\etc
  14. supersu_install\su.d
  15. supersu_install\file_contexts
  16. supersu_install\supersu_is_here
复制代码





root.tar与supersu压缩包中文件的对应关系为:
bin/su = bin/daemon=arm64/su
bin/sukernel=arm64/sukernel
bin/supolicy_wrapped=arm64/supolicy
bin/supolicy=arm64/supolicy
lib/libsupol = arm64/libsupol
file_contexts=common/file_contexts
supersu_is_here=common/supersu_is_here

复制完,别忘了chmod +x supolicy 等等




  • 复制上面打包好的root.tar到/res/.su下
  • 复制fbe_bypass.sh,launch_daemonsu.sh,tar三个文件到/sbin下,修改launch_daemonsu.sh文件,判断/data/adb/su/bin是否存在,如果不存在则解压root.tar到指定目录。【注意,下方的各种代码,英文单引号 ´ 论坛里会自动变掉,请自己复制代码后,把英文引号改正确】
[color=rgba(0, 0, 0, 0.749019607843137)]




  1. # copy boot image backups
  2. log_print "copying boot image backups from /cache to /data"
  3. cp -f /cache/stock_boot_* /data/. 2>/dev/null

  4. if ($SBIN); then
  5.   if [ ! -d "/data/adb/su/bin" ]; then
  6.     /sbin/tar xvf /res/.su/root.tar -C /data
  7.   fi
复制代码



上方代码片段的最后三行为需要新增的。

  • 给init打补丁:找一台使用supersu2.6以上版本root过的手机,之后在cmd里输入
[color=rgba(0, 0, 0, 0.749019607843137)]



  1. adb push init /sdcard/init
  2. adb shell
  3. su
复制代码






在手机上允许root权限,继续输入
【注意,下方的各种代码,英文单引号 ´ 论坛里会自动变掉,请自己复制代码后,把英文引号改正确】
  1. sed -i ´s/\/system\/etc\/selinux\/plat_sepolicy.cil/\/system\/etc\/selinux\/plat_sepolicy.xxx/g´ /sdcard/init
复制代码
init文件就打好补丁了,把init文件复制出来,可以使用adb pull
  1. adb pull /sdcard/init init
复制代码






init文件就拉取到与电脑上adb的同目录了。
用打好补丁的init复制到initrd下,替换官方的init。
12. 给sepolicy打补丁,由于EMUI8使用了split sepolicy,所以ramdisk下没有sepolicy文件,不过你可以从vendor.img中找到他,用ROM助手打开vendor.img,复制/etc/selinux/precompiled_sepolicy出来,改名为sepolicy。之后同样,用已使用supersu2.6版本以上root过的手机,继续操作如下:




  1. adb push sepolicy /sdcard/sepolicy
  2. adb shell
  3. su
  4. supolicy --file /sdcard/sepolicy /sdcard/sepolicy_out --sdk=26
复制代码
注意,注意!!!千万不要忘记后面的–sdk=26,这是网上各种教程,无论国内国外都没提及的,这里让我踩了好几天的坑!!
这样,sepolicy文件也打好补丁了。把sepolicy_out文件复制出来,改名为sepolicy,放到initrd目录下。
13. 更改 cpiolist.txt 文件,把我们新增的几个文件和文件夹加到里面,这个请参考如下:


  1. compress_level:6
  2. dir . 0755
  3. dir acct 0755
  4. slink bugreports /data/user_de/0/com.android.shell/files/bugreports 0644
  5. dir cache 0770
  6. slink charger /sbin/charger 0644
  7. dir config 0500
  8. slink d /sys/kernel/debug 0644
  9. dir data 0771
  10. slink default.prop system/etc/prop.default 0600
  11. dir dev 0755
  12. dir dload 0755
  13. file dload/update_huawei_dload.zip initrd/dload\update_huawei_dload.zip 0644
  14. slink etc /system/etc 0644
  15. file fstab.zram1024m initrd/fstab.zram1024m 0640
  16. file fstab.zram1280m initrd/fstab.zram1280m 0640
  17. file fstab.zram1536m initrd/fstab.zram1536m 0640
  18. file fstab.zram2240m initrd/fstab.zram2240m 0640
  19. file fstab.zram256m initrd/fstab.zram256m 0640
  20. file fstab.zram512m initrd/fstab.zram512m 0640
  21. file fstab.zram768m initrd/fstab.zram768m 0640
  22. file init initrd/init 0750
  23. file init.environ.rc initrd/init.environ.rc 0750
  24. file init.rc initrd/init.rc 0750
  25. file init.supersu.rc initrd/init.supersu.rc 0750
  26. file init.usb.configfs.rc initrd/init.usb.configfs.rc 0750
  27. file init.usb.rc initrd/init.usb.rc 0750
  28. file init.zygote32.rc initrd/init.zygote32.rc 0750
  29. file init.zygote64_32.rc initrd/init.zygote64_32.rc 0750
  30. dir mnt 0755
  31. dir oem 0755
  32. dir patch 0755
  33. dir patch/cust 0755
  34. dir patch/cust/upper 0755
  35. dir patch/cust/work 0755
  36. dir patch/product 0755
  37. dir patch/product/upper 0755
  38. dir patch/product/work 0755
  39. dir patch/system 0755
  40. dir patch/system/upper 0755
  41. dir patch/system/work 0755
  42. dir patch/vendor 0755
  43. dir patch/vendor/upper 0755
  44. dir patch/vendor/work 0755
  45. dir patch_hw 0755
  46. dir proc 0755
  47. dir res 0755
  48. file res/keys initrd/res\keys 0644
  49. file res/native_packages.xml initrd/res\native_packages.xml 0644
  50. file resetFactory.cfg initrd/resetFactory.cfg 0644
  51. dir res/.su 0750
  52. file res/.su/root.tar initrd/res\.su\root.tar 0750
  53. file rootscan.conf initrd/rootscan.conf 0644
  54. dir sbin 0750
  55. file sbin/adbd initrd/sbin\adbd 0750
  56. file sbin/charger initrd/sbin\charger 0750
  57. file sbin/cota initrd/sbin\cota 0750
  58. file sbin/cust initrd/sbin\cust 0750
  59. file sbin/cust_init initrd/sbin\cust_init 0750
  60. file sbin/factory_reset initrd/sbin\factory_reset 0750
  61. file sbin/fbe_bypass.sh initrd/sbin\fbe_bypass.sh 0700
  62. file sbin/fsck.f2fs_s initrd/sbin\fsck.f2fs_s 0750
  63. file sbin/hdbd initrd/sbin\hdbd 0750
  64. file sbin/huawei_dload initrd/sbin\huawei_dload 0750
  65. file sbin/hw_ueventd initrd/sbin\hw_ueventd 0750
  66. file sbin/kmsgcat initrd/sbin\kmsgcat 0750
  67. file sbin/launch_daemonsu.sh initrd/sbin\launch_daemonsu.sh 0700
  68. file sbin/logctl_service initrd/sbin\logctl_service 0750
  69. file sbin/ntfs-3gd initrd/sbin\ntfs-3gd 0750
  70. file sbin/oeminfo_nvm_server initrd/sbin\oeminfo_nvm_server 0750
  71. file sbin/resize.f2fs_s initrd/sbin\resize.f2fs_s 0750
  72. file sbin/tar initrd/sbin\tar 0750
  73. slink sbin/ueventd ../init 0750
  74. file sbin/volisnotd initrd/sbin\volisnotd 0750
  75. slink sbin/watchdogd ../init 0750
  76. file sbin/xlogcat-early initrd/sbin\xlogcat-early 0750
  77. slink sdcard /storage/self/primary 0644
  78. file sepolicy initrd/sepolicy 0644
  79. dir storage 0751
  80. dir .subackup 0
  81. file .subackup/0000_fstab.zram1024m initrd/.subackup\0000_fstab.zram1024m 0640
  82. file .subackup/0001_fstab.zram1280m initrd/.subackup\0001_fstab.zram1280m 0640
  83. file .subackup/0002_fstab.zram1536m initrd/.subackup\0002_fstab.zram1536m 0640
  84. file .subackup/0003_fstab.zram2240m initrd/.subackup\0003_fstab.zram2240m 0640
  85. file .subackup/0004_fstab.zram256m initrd/.subackup\0004_fstab.zram256m 0640
  86. file .subackup/0005_fstab.zram512m initrd/.subackup\0005_fstab.zram512m 0640
  87. file .subackup/0006_fstab.zram768m initrd/.subackup\0006_fstab.zram768m 0640
  88. file .subackup/0007_init initrd/.subackup\0007_init 0750
  89. file .subackup/0008_init.rc initrd/.subackup\0008_init.rc 0750
  90. file .subackup/0009_verity_key initrd/.subackup\0009_verity_key 0644
  91. file .subackup/index initrd/.subackup\index 0644
  92. dir sys 0755
  93. dir system 0755
  94. file ueventd.rc initrd/ueventd.rc 0644
  95. dir vendor 0755
  96. file version.prop initrd/version.prop 0644
复制代码
  • 最后,重新打包,输入bootimg.exe --repack-ramdisk,看看有没有报错,如果没有,再输入bootimg --repack-bootimg,会生成一个boot-new.img文件。

你就得到了一个内置root权限的boot.img,使用fastboot flash ramdisk boot-new.img 刷到手机里吧。

题外话,你可以不看,仅供部分同学需要:
对于SpilitSepolicy设备,除提取vendor下的precompiled_sepolicy外,还可以自己使用官方文件编译,很简单。
首先找到如下几个文件:
PLAT_CIL="/system/etc/selinux/plat_sepolicy.cil"
MAPPING_CIL=KaTeX parse error: Can't use function '\.' in math mode at position 55: …g | grep -m 1 "\̲.̲cil")
NONPLAT_CIL="/vendor/etc/selinux/nonplat_sepolicy.cil"
POLICY_VERSION=$(cat /sys/fs/selinux/policyvers)

其中MAPPING_CIL在荣耀V10上B132版本上,是/system/etc/selinux/mapping/26.0.cil
之后,使用系统中已经内置的secilc编译,编译格式:
secilc “P L A T C I L " − M t r u e − c " PLAT_CIL" -M true -c "PLATC​IL"−Mtrue−c"POLICY_VERSION” “M A P P I N G C I L " " MAPPING_CIL" "MAPPINGC​IL""NONPLAT_CIL” -o /sdcard/sepolicy -f /dev/null
如果提示没有权限,你可以先把这些文件都adb pull 出来,之后复制到sdcard上,之后再编译,比如:
【注意,下方的各种代码,英文单引号 ´ 论坛里会自动变掉,请自己复制代码后,把英文引号改正确】


  1. secilc "/sdcard/sepolicy/system/etc/selinux/plat_sepolicy.cil" -M true -c "30" "/sdcard/sepolicy/system/etc/selinux/mapping/26.0.cil" "/sdcard/sepolicy/vendor/etc/selinux/nonplat_sepolicy.cil" -o /sdcard/sepolicy/sepolicy -f /dev/null
复制代码

这样同样可以得到sepolicy文件,之后再把这个文件用上文所说的方法用supolicy去patch一下,同样可正常使用。

文章转自:https://club.huawei.com/thread-14889191-1-1.html

以下是原文


  1. 华为和荣耀的新机器一向twrp适配的非常慢,如果要获取root,最简便的办法就是做一个内置root权限的ramdisk.img包。
  2. 授人以鱼不如授人以渔,如果你有耐心,希望本文能帮到你。

  3. 本文大致讲一下如何制作,毕竟无论国内还是国外,关于这个的内容少之又少,我走了很多弯路才摸索出来,所以分享出来,希望各位如果有心能帮助大家少走一些弯路,省一点精力和时间。
  4. PS:伸手党专用,我已做好的内置supersu的ramdisk.img: http://club.huawei.com/forum.php ... extra=#pid335885190
  5. 或者使用magisk root:http://club.huawei.com/forum.php ... extra=#pid341388051


  6. 准备工作:
  7. 1. 下载 官方Full-OTA update.zip。从这里找 pro-teammt.ru/firmware-database/?firmware_model=&firmware_page=1 ,搜搜自己的手机型号(可从“关于手机/型号”中查看),比如 荣耀V10高配版为BKL-AL20。下载大于1G甚至2G的FULL-OTA的update.zip文件。下载完成后解压,得到update.app文件
  8. 2. Huawei update extrator,下载地址:forum.xda-developers.com/showthread.php?t=2433454  ,该软件可解包上述update.app文件,提取出ramdisk.img和vendor.img
  9. 3. Bootimg.exe,下载地址:github.com/cofface/android_bootimg  这个工具用来解包ramdisk.img
  10. 4. ROM助手,rom大师,随便什么,能打开vendor.img的。
  11. 5. 下载supersu beta版,到xda-developor论坛自行下载,本文编写是的版本为supersu beta 2.82 sr5。

  12. 开始动手:
  13. 1. 解压update.zip得到update.app
  14. 2. 用Huawei update extrator解包update.app(解包前,先到设置中,去掉 verify header checksum,否则打不开)
  15. 3. 把ramdisk.img和vendor.img提取出来
  16. 4. 把ramdisk.img改名为boot.img,并与bootimg.exe放到同一个文件夹
  17. 5. 在该文件夹启动cmd(文件→打开命令行提示符),输入bootimg.exe --unpack-bootimg,解包
  18. 6. 解包后,编辑initrd文件夹下的init.rc文件,在import /init.${ro.zygote}.rc下添加一行import init.supersu.rc
  19. 7. 删除verity_key
  20. 8. 解压supersu,把supersu的文件按照这个文件树重新组织,并打包成root.tar (注意,是tar,用tar cvf 命令)
  21. <
  22. root.tar与supersu压缩包中文件的对应关系为:
  23. bin/su = bin/daemon=arm64/su
  24. bin/sukernel=arm64/sukernel
  25. bin/supolicy_wrapped=arm64/supolicy
  26. bin/supolicy=arm64/supolicy
  27. lib/libsupol = arm64/libsupol
  28. file_contexts=common/file_contexts
  29. supersu_is_here=common/supersu_is_here


  30. 复制完,别忘了chmod +x supolicy 等等

  31. 9. 复制上面打包好的root.tar到/res/.su下
  32. 10. 复制fbe_bypass.sh,launch_daemonsu.sh,tar三个文件到/sbin下,修改launch_daemonsu.sh文件,判断/data/adb/su/bin是否存在,如果不存在则解压root.tar到指定目录。【注意,下方的各种代码,英文单引号  ´  论坛里会自动变掉,请自己复制代码后,把英文引号改正确】
  33. <上方代码片段的最后三行为需要新增的。

  34. 11. 给init打补丁:找一台使用supersu2.6以上版本root过的手机,之后在cmd里输入:<

  35. 在手机上允许root权限,继续输入
  36. 【注意,下方的各种代码,英文单引号  ´  论坛里会自动变掉,请自己复制代码后,把英文引号改正确】
  37. 用打好补丁的init复制到initrd下,替换官方的init。
  38. 12. 给sepolicy打补丁,由于EMUI8使用了split sepolicy,所以ramdisk下没有sepolicy文件,不过你可以从vendor.img中找到他,用ROM助手打开vendor.img,复制/etc/selinux/precompiled_sepolicy出来,改名为sepolicy。之后同样,用已使用supersu2.6版本以上root过的手机,继续操作如下:
  39. <注意,注意!!!千万不要忘记后面的--sdk=26,这是网上各种教程,无论国内国外都没提及的,这里让我踩了好几天的坑!!
  40. 这样,sepolicy文件也打好补丁了。把sepolicy_out文件复制出来,改名为sepolicy,放到initrd目录下。
  41. 13. 更改 cpiolist.txt 文件,把我们新增的几个文件和文件夹加到里面,这个请参考如下:
  42. <14. 最后,重新打包,输入bootimg.exe --repack-ramdisk,看看有没有报错,如果没有,再输入bootimg --repack-bootimg,会生成一个boot-new.img文件。

  43. 你就得到了一个内置root权限的boot.img,使用fastboot flash ramdisk boot-new.img 刷到手机里吧。

  44. 题外话,你可以不看,仅供部分同学需要:
  45. 对于SpilitSepolicy设备,除提取vendor下的precompiled_sepolicy外,还可以自己使用官方文件编译,很简单。
  46. 首先找到如下几个文件:
  47. PLAT_CIL="/system/etc/selinux/plat_sepolicy.cil"
  48. MAPPING_CIL=$(find /system/etc/selinux | grep mapping | grep -m 1 "\.cil$")
  49. NONPLAT_CIL="/vendor/etc/selinux/nonplat_sepolicy.cil"
  50. POLICY_VERSION=$(cat /sys/fs/selinux/policyvers)

  51. 其中MAPPING_CIL在荣耀V10上B132版本上,是/system/etc/selinux/mapping/26.0.cil
  52. 之后,使用系统中已经内置的secilc编译,编译格式:
  53. secilc "$PLAT_CIL" -M true -c "$POLICY_VERSION" "$MAPPING_CIL" "$NONPLAT_CIL" -o /sdcard/sepolicy -f /dev/null
  54. 如果提示没有权限,你可以先把这些文件都adb pull 出来,之后复制到sdcard上,之后再编译,比如:
  55. 【注意,下方的各种代码,英文单引号  ´  论坛里会自动变掉,请自己复制代码后,把英文引号改正确】
  56. <这样同样可以得到sepolicy文件,之后再把这个文件用上文所说的方法用supolicy去patch一下,同样可正常使用。
复制代码



发表于 2021-2-2 11:56:21 | 显示全部楼层
盖了帽了,厉害
发表于 2021-2-2 11:56:32 | 显示全部楼层
支持-感谢提供
发表于 2021-2-2 11:56:45 | 显示全部楼层
这网站可以哦
发表于 2021-2-2 11:57:06 | 显示全部楼层
感谢远程协助
发表于 2021-2-2 11:57:11 | 显示全部楼层
感谢客服指导
发表于 2021-2-2 11:57:24 | 显示全部楼层
顶一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术交流售后群

QQ|小黑屋|手机版|站点找错-建议|AI手机网 |Sitemap



GMT+8, 2024-5-9 05:22 , Processed in 0.156781 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表