中移动定制终端,具体型号隐去。开机只有定制的APP,无法安装apk,通过开发者模式也不行。adb install XXX.apk 显示“禁止安装第三方应用”。
一、信息收集:
1.可以进开发者模式,adb shell 是普通用户$,没有root权限。
2.无法安装apk,通过开发者模式也不行。adb install XXX.apk 显示“禁止安装第三方应用”。
3.经测试,data/local/tmp 目录可读可写可执行(Android系统均如此),用ndk 编译了一个二进制程序,上传至该目录,可以在 shell 中执行
4.开一个命令行,列出所有安装的apk:
adb shell pm list packages
从以上回显中找到想要的APK,记下包名(例如 com.android.abc ),然后查找该apk的路径:
adb shell pm path com.android.abc
这里就回显出包名所在路径了(/data/app/com.android.abc-1.apk)。然后pull 到本地(命名为abc.apk):
adb pull /data/app/com.android.abc-1.apk abc.apk
二、漏洞利用提升权限,dump出系统镜像
这里利用了一个漏洞,(CVE-2020-0069),通过mtk-su实现获取联发科设备Root权限:
adb push d:mtk-su data/local/tmp
adb shell ./data/local/tmp/mtk-su
会返回一个root权限的shell,df命令查看各分区情况:
ZhongDuanSheBei:/ $ df
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 470612 620 469992 1% /dev
/dev/block/mmcblk0p31 1515376 788544 694720 54% /system
/dev/block/mmcblk0p30 483528 184024 284024 40% /vendor
tmpfs 470612 0 470612 0% /mnt
/dev/block/mmcblk0p33 4970476 142324 4533240 4% /data
/dev/block/mmcblk0p32 189920 484 183052 1% /cache
/dev/block/mmcblk0p9 3824 76 3508 3% /vendor/protect_f
/dev/block/mmcblk0p10 5280 76 4916 2% /vendor/protect_s
/dev/block/mmcblk0p7 27632 2928 23728 11% /vendor/nvdata
/dev/block/mmcblk0p6 3824 48 3536 2% /vendor/nvcfg
/data/media 4970476 142324 4533240 4% /storage/emulated
由上可知:
boot分区(Linux内核) -> /dev/block/mmcblk0p25
recovery分区 (Recovery恢复) -> /dev/block/mmcblk0p2
system分区(Android系统框架及应用) -> /dev/block/mmcblk0p31
然后将以上分区分别提取到手机的内置存储中,以boot分区为例:
dd if=/dev/block/mmcblk0p25 of=/sdcard/boot.img
这样 boot.img 就放到了sdcard,使用
adb pull /sdcard/boot.img
将 boot.img recovery.img system.img 分别 pull 到电脑中.
三、修改镜像:
以 system.img 为例,
先用file命令查看system.img的文件类型
file system.img
显示如下:
system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (needs journal recovery) (extents) (large files)
说明是 ext4 filesystem data,可以采用挂载分区的方式来打开system.img文件:
mount -t ext4 -o loop system.img system_img //此命令的意思将system.img镜像文件挂载到同级别下的system_img目录
cd system_img //此时这个目录里面就是system 镜像的内容,切到这个目录进行修改即可。比如更换apk,增加superSU 和 bin/su 以获得root等
然后用 make_ext4fs 这个工具对 system_img 修改后的镜像文件进行打包:
./make_ext4fs -l 1536M -s -a system system_new.img system_img
参数解析:1536M代表你要打包的system.img大小,这个值等于挂载前 的那个system.img 的大小,也可写成字节数,我的 system.img 是 1,610,612,736 字节,除以1024是 1572864 K ,再除以1024 是1536M
"-a system",是指这个img用于android系统,挂载点是/system,使用这个参数,make_ext4fs会根据private/android_filesystem_config.h里定义好的权限来给文件夹里的所有文件重新设置权限,如果你刷机以后发现有文件权限不对,可以手工修改android_filesystem_config.h来添加权限,重新编译make_ext4fs,也可以不使用 “-a system”参数,这样就会使用文件的默认权限。system_new.img 代表新生成的img, system_img 就是上面挂载后的目录.
一般很多人认为这样生成的system_new.img就可以用了,其实不然.再次用file命令查看文件类型:
file system_new.img
显示如下:
system_new.img: data
跟之前的输出截然不同,这显然不是ext4文件类型。这里继续使用 simg2img 工具将其转换成真正的ext4文件:
./simg2img system_new.img system_out.img
得到system_out.img,我们再“file system_out.img”看一下:
system_out.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)。
这就和最初的system.img一样的格式了。
四、将修改后的镜像写入设备中:
首先要解锁,不然受到保护,无法写入:
adb reboot bootloader //重启进入fastboot
fastboot oem unlock //解锁BL
此时有提示,按提示解锁后手机会重启,并清空所有内容!然后将新镜像 system_out.img 写入手机system分区:
fastboot flash system system_out.img
待所有进度完成,“fastboot reboot ” 重启手机即可。
-------------------------------------------------------------------------------------
附:文中提到的程序下载地址
make_ext4fs:https://blog.cofface.com/archives/2681.html
simg2img :https://blog.csdn.net/u010285974/article/details/105268744
参考资料:
https://blog.csdn.net/zhangbijun1230/article/details/80864263
https://www.52pojie.cn/thread-1123037-1-1.html