挂载img文件到linux文件夹下
parted xxx.img
(parted) unit b
(parted) print
使用parted命令查看文件的分区情况
sudo mount -o loop,offset=46137344 imx6ull-lubancat-carp-console-armhf-2021-04-08.img ./dir_img/
把文件的指定分区挂载到dir_img文件夹下
sudo umount ./dir_img
取消挂载
挂载中涉及到的较详细的步骤以及解析(以三星为例)
解压得到的三星.zip刷机包 – 得到
BL_A505USQS3ASL4_CL16561534_QB27874851_REV00_user_low_ship.tar.md5
AP_A505USQS3ASL4_CL16561534_QB27874851_REV00_user_low_ship_meta_OS9.tar.md5
CP_A505USQS3ASL4_CP14622435_CL16561534_QB27874851_REV00_user_low_ship.tar.md5
HOME_CSC_OMC_OYN_A505UOYN3ASL4_CL16561534_QB27874851_REV00_user_low_ship.tar.md5
CSC_OMC_OYN_A505UOYN3ASL4_CL16561534_QB27874851_REV00_user_low_ship.tar.md5
USERDATA_CCT_A505USQS3ASL4_CL16561534_QB27874851_REV00_user_low_ship.tar.md5
用tar的解压命令,解压AP文件:
tar xvf AP_A505USQS…–.md5
把system.img.lz4文件解压
lz4 -d system.img.lz4
file system.img
file命令检查文件,可能会有以下结果:
system.img: Android sparse image, version: 1.0, Total of 1510400 4096-byte output blocks in 33 input chunks.
system.img: Linux rev 1.0 ext2 filesystem data, UUID=873a602a-a04c-5918-94d6-e1f574def67e (extents) (large files) (huge files)
上面两个比较常见,还有这种不常见:
VMS Alpha executable
类型分别为:ext 文件、raw 文件和yaffs2 文件。
ext文件
先用 simg2img 工具把 system.img 转为为 ext4 文件格式
再使用以下命令进行转换
simg2img system.img system_new.img
会得到一个 system_new.img,它是 raw 格式的完整镜像
yaffs2文件
unyaffs system.img
raw文件
可以直接挂载
挂载命令
sudo mount -t ext4 system_new.img system
把system_new.img挂载到创建的system文件夹下
ext文件和raw文件区别
raw 其特点是完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载,因此比较大
ext 就是一个非常普通的dat文件。由于它将raw ext4进行稀疏描述,因此尺寸比较小(没有全零的无效填充区)
所以,我们只需要用脚本(simg2img),进行一次编译操作,就可以把ext文件编译、转换成raw文件了。
再次把修改好的system.img文件转换成原先的版本
sudo make_ext4fs -s -l 5120M -a system system.img.ext4 ~/workspace/myadb/sm/dir_img/
使用make_ext4fs把挂载到dir_img目录下的所有文件制作成spare文件
-s:生成Spare格式的镜像
-l : 镜像的尺寸
-a: 指定挂载点,这里是system
-S file_contexts:表示sepolicy的file_contexts,5.0及以上安卓系统存在file_contexts文件,该文件是对selinux文件系统的说明,在手机root目录下能找到。
make_ext4fs会根据private/android_filesystem_config.h里定义好的权限来给文件夹里的所有文件重新设置权限
img2simg system_new.img system.img
system.img由raw文件转换成sparse文件
# lz4 system.img
lz4 -B6 --content-size system.img.ext4 system.img.ext4.lz4
使用lz4再次压缩system.img
tar -cf AP_G960U1UES9FUG2_CL21635681_QB41996425_REV01_user_low_ship_MULTI_CERT_meta_OS10.tar boot.img.lz4 recovery.img.lz4 vendor.img.ext4.lz4 system.img.ext4.lz4 persist.img.ext4.lz4 userdata.img.ext4.lz4 dqmdbg.img.ext4.lz4 meta-data/
把原先解压出来的文件/文件夹重新压缩到.tar文件中
md5sum -b AP_G960U1UES4CSD4_CL15611914_QB23162251_REV01_user_low_ship_MULTI_CERT_meta_OS9.tar >> AP_G960U1UES4CSD4_CL15611914_QB23162251_REV01_user_low_ship_MULTI_CERT_meta_OS9.tar
-b: 二进制模式读取文件;
-t或–text: 把输入的文件作为文本文件看待;
-c: 从指定文件中读取MD5校验和,并进行校验;
–status: 验证成功时不输出任何信息;
-w: 当校验不正确时给出警告信息。
mv AP_G960U1UES4CSD4_CL15611914_QB23162251_REV01_user_low_ship_MULTI_CERT_meta_OS9.tar AP_G960U1UES4CSD4_CL15611914_QB23162251_REV01_user_low_ship_MULTI_CERT_meta_OS9.tar.md5
最后2步只是MD5校验,变成官方格式。可以忽略。
创建, 读取,修改img文件 (以ext4 为例)
1. 创建 (10M 空文件)
dd if=/dev/zero of=XXX.img bs=1024 count=10240
2. 格式化
-关联loop设备
sudo losetup /dev/loop1 XXX.img
-建立分区:
sudo fdisk /dev/loop1
…
-格式化
sudo mkfs -t ext4 /dev/loop1
-loop 设备卸载
sudo losetup -d /dev/loop1
-补充:
losetup -h 有对loop 命令的解释。
3. 修改 (挂载img)
mount -t ext4 -o loop XXX.img /mnt/img
然后就可以想修改什么就修改什么了
fastboot操作
进入fastboot界面
adb reboot fastboot
adb reboot bootloader
或者
同时按住 增加音量 和 电源 键开机
fastboot查看手机是否解锁
fastboot oem get-bootinfo
or fastboot oem device-info
查看fastboot模式下的手机
fastboot devices
fastboot模式下重启手机
fastboot reboot
在设备进入到 fastboot 环境后,根据需求执行下面的命令进行刷机:
fastboot flashing unlock
设备解锁,开始刷机
fastboot flash boot boot.img
刷入 boot 分区。如果修改了 kernel 代码,则应该刷入此分区以生效
fastboot flash recovery recovery.img
刷入 recovery 分区
fastboot flash country country.img
刷入 country 分区。这个分区是开发组自己划分的,别的 Android 设备上不一定有
fastboot flash system system.img
刷入 system 分区。如果修改的代码会影响 out/system/ 路径下生成的文件,则应该刷入此分区以生效
fastboot flash bootloader bootloader
刷入 bootloader
fastboot erase frp
擦除 frp 分区,frp 即 Factory Reset Protection,用于防止用户信息在手机丢失后外泄
fastboot format data
格式化 data 分区
fastboot flashing lock
设备上锁,刷机完毕
fastboot continue
自动重启设备
三星手机开启开发者模式
设置 -> 关于手机 -> 软件信息 -> 连续点击 编译编号 7次 -> 已开启开发者模式
android的解锁/加锁
1.进入fastboot模式
adb reboot bootloader
2.解锁bootbloader
fastboot flashing unlock
3.加锁bootloader
fastboot flashing lock
Bootloader锁的解锁原理
在某处存放一个标志,标识有没有解锁,如果解锁了,就放开以上限制。存放这个标志的位置在解锁前第三方app是没有权限读写的,所以不可能绕过官方解锁流程。
正常的解锁过程一般跟电脑软件的注册码
实现原理相当,解锁软件根据手机硬件特征生成中间码,把中间码发给服务器,服务器进行某种加密传回来写入特定位置,bootloader会在这个位置检查解锁信息是否合法,合法就写入已解锁的标志,就可以刷入并加载第三方镜像了。解锁码的生成过程一般会用到非对称加密外加私有算法,几乎不可破解,即使拿到原代码也做不到。
解锁和上锁实质上是修改 /dev/block/steady 文件。
BootLoader启动链流程
PBL -> SBL(XBL) -> ABL
PBL 的主要功能是上电自检并启动下一个组件 SBL(Secondary Boot Loader)。这个 SBL 主要是初始化一些硬件环境(如DDR, clocks 和 USB 等)和代码安全环境 (TrustZone),当然,最重要的还是验证并加载下一个组件——ABL(Android Boot Loader,也叫 aboot)。
我们通常所说的解锁 BootLoader 特指让 ABL(aboot) 在加载 bootimage 时不进行验证。
三星手机拨号
*#197328640#
进入工程模式
检查img文件的块
tune2fs -l system.img | grep "Block size\\|Block count"
得到块大小和计数
echo $((1553064 * 4096))
将两个数相乘
从手机中获取镜像
adb shell "ls -l /dev/block/platform/*/*/by-name"
查询分区的路径
开机状态:
adb shell su -c "dd if=/dev/block/mmcblk0p23" of=/sdcard/system.img
recovery模式:
adb shell "dd if=/dev/block/mmcblk0p23" of=/sdcard/system.img
手机使用magisk获取root权限
1 手机中安装magisk
2 获取手机中的boot.img
3 使用magisk修补boot.img文件
4 把boot.img刷入手机
手机无法启动的时候获取手机的日志
- 无法启动的时候,重启到recovery界面
- 获取/proc/last_kmsg文件,就是启动的日志文件
使用adb查看手机版本
adb shell "getprop | grep version"
使用adb给软件授予系统权限
adb shell pm grant com.morelocale.languages2 android.permission.CHANGE_CONFIGURATION
其他的一些刷机工具和方法
adb sideload
刷入一个支持adb sideload的recovry或者有的三星手机可以找到这个adb sideload的工具接口(整个方法的老旧性和实用性有待考量)
adb sideload 刷机包