准备工具:
1. adb
2. bootimg
部分安卓机型获取root权限比较难,刷supersu卡刷包和各种刷机工具都不见效;
作为一名移动安全工程师,经常需要对各种APK进行调试,通常调试APK需要满足的条件是apk的配置文件androidmanifest.xml中android:debuggable="true"或者安卓default.prop文件中的ro.debuggable=1。以往,我们都是先将apk反编译,然后手动修改Androidmanifest.xml中的android:debuggable然后重新打包签名,但是随着梆梆、乐固、360等各种“壳”的出现,手动修改Androidmanifest.xml再重打包的方式已经行不通了。
特别是SELinux机制加入安卓以后,我们想要获取所需要的权限变得更加困难。现在有一种一劳永逸的方法,如下。
在使用adb连接手机的情况下,可以看到手机根目录下有一个default.prop文件:
直接使用cat default.prop命令查看内容可以看到ro.secure、ro.adb.secure和ro.debuggable等属性:
正常情况下,该文件中的ro.debuggable的值应该是0,表示不可调试。我已经手动修改为1。ro.secure表示root权限,如果为0则表示启用root权限,1则相反;ro.adb.secure表示adb的root权限,同样0表示启用adb的root权限,1则相反。
----------------------------------------------
下面开始正式介绍修改这些值的方法。
首先我们看看安卓系统rom包的结构:
安卓系统rom包是一个压缩文件,我们可以直接用winrar、7z等工具打开。如上图,我们需要改动的就是boot.img,我们将其解压出来。
修改boot.img需要先将其完全解开,解包boot.img的工具网上有很多,可自行搜索。再此处我推荐使用bootimg。此工具比较方便且文件很小。有exe、java、python等各种版本。我使用的是python版本,其他版本使用方法基本相同
为了方便,将bootimg.py与要修改的boot.img放在同一目录下,首先使用
将boot.img解开,可以获得 kernel 和 ramdisk.gz。此时,我们还看不到需要修改的default.prop,要修改,我们还要继续解开ramdisk.gz。使用命令
现在,文件夹中出现了initrd,我们需要的default.prop就在这里面了。进入initrd目录,使用notepad、sublime等工具直接修改,比如我需要开启所有应用的调试权限,我将default.prop中的ro.debuggable修改成了1。如果你是需要开启root权限,则将ro.secure的值改为0,要永久开启adb的root权限,可将ro.adb.secure修改为0。。。各个参数都可以按照自己的需求修改。(注意只修改自己需要的参数,不要随意更改,否则可能造成手机无法开机)
修改完成后,开始重新打包,我们先对ramdisk.gz打包,然后对整个boot.img重打包。命令分别如下:
打包完成后,会出现一个boot_repack.img,这就是重新打包完成的boot.img。到这儿,boot.img已经修改完成,接下来有多种方式将其刷入我们的手机。
1. 可以重新将文件名改回boot.img打包到系统rom包中,重新签名,刷入整个rom包。
2.使用fastboot工具刷入手机。
3.使用第三方recovery工具比如TWRP等,手动刷入此boot_repack.img。
重启之后,我们使用adb shell命令查看,可看到,此属性已经被永久修改,不需要每次重启都修改一遍。