binwalk 提取bootimg_boot.img的解包与打包
Android 产品中,内核格式是Linux标准的zImage,根文件系统采用ramdisk格式。这两者在Android下是直接合并在一起取名为boot.img,会放在一个独立分区当中。这个分区格式是Android自行制定的格式。
Android开发时,最标准的做法是重新编译于内核和根文件系统,然后调用Android给的命令行文件mkbootimg(out/host/linux-x86/bin/)来打包。
在制作手机ROM时,有时会单独编译内核或抽出根文件进行修改内容,比如我只编译内核,其余的地方不变。这样重新安装巨大的Android开发环境实在不划算。因此很多boot.img解包工具被人开发出来,这一些工具都是把内核和根文件系统从一个现成的boot.img抽取出来,修发后再次打包还原。
一.常见的解包工具
因为boot.img的格式比较简单,它主要分为三大块(有的可能有四块)
+—————–+
| boot header | 1 page
+—————–+
|kernel | n pages
+—————–+
|ramdisk| m pages
+—————–+
| second stage |o pages
+—————–+
n = (kernel_size + page_size – 1) / page_size
m = (ramdisk_size + page_size – 1) / page_size
o = (second_size + page_size – 1) / page_size
0. all entities are page_size aligned in flash
1. kernel and ramdisk are required (size != 0)
2. second is optional (second_size == 0 -> no second)
因此很多人开发分析工具,有是linux shell脚本,比如repack-zImage,也有人采用perl,还有C语言编写的 unbootimg,
我使用的是在源码位置system/core/mkbootimg/ 下的 mkbootimg。为了简化,蓝点工坊把与mkbootimg中打包工具和解包工具以及所包含的libmincrpty库抽出来,并且重写一个Makefile,作为开源项目。
使用者只需要在linux(需安装gcc,make,一般是标配)或windows(需要安装mingw)的命令行执行make,即可产生可执行文件 mkbootimg ,unpackbootimg。
二.解/打包工具使用
解包工具:unpackbootimg
usage: unpackbootimg
-i|–input boot.img
[ -o|--output output_directory]
[ -p|--pagesize ]
常见格式
unpackbootimg -i .\tmp\boot.img -o .\out
这一句命令行表示把boot.img解包,所有文件输出到out目录下
它会解压出如下文件:
boot.img-zImage (内核文件)
boot.img-ramdisk.gz (根文件系统打包文件)
boot.img-cmdline (mkbootimg cmdline参数)
boot.img-pagesize (mkbootimg pagesize参数)
boot.img-base (mkbootimg base参数)
打包工具:mkbootimg (Android自带)
H:\ttt>mkbootimg.exe
error: no output filename specified
usage: mkbootimg
--kernel
--ramdisk
[ --second <2ndbootloader-filename> ]
[ --cmdline ]
[ --board ]
[ --base
][ --pagesize ]
-o|--output
常见的命令格式:
./mkbootimg--cmdline 'no_console_suspend=1 console=null' --kernel zImage --ramdisk boot/boot.img-ramdisk.gz -o boot.img --base 02e00000
这句含义是把内核文件zImage和boot目录下的根文件压缩包 boot.img-ramdisk.gz打包成boot.img.
其中cmdline和base的值均来源于unpackbootimg的结果
binwalk 提取bootimg_boot.img的解包与打包相关推荐
- 记一次修改DiyBox的经历(openwrt固件解包与打包)
吐槽几句 做技术的有无私造福人类的,也有耍流氓坑人的.说的不是DiyBox,而是"信利".信利就是一家犯贱.祸害大学生.助纣为虐的流氓公司,其所谓的"防私接"技 ...
- 使用apktool解包和打包apk
使用apktool解包和打包apk 下载apktool工具 解包 apktool d xxx.apk -f 植入代码 使用apktool解包要植入代码的apk(以下称为A), 使用apktool解包包 ...
- firmware linux 解包_路由器固件的解包与打包
路由器固件的解包与打包 一.概述 当前大学生都被校园网的客户端困扰, 然而南京工程学院公布了 Linux 客户度解决方案, 或 者 Mentohust 解决方案, 可以在 Ubuntu 系统的计算机上 ...
- linux 解包与打包
解包: tar xvf FileName.tar打包: tar cvf FileName.tar DirName
- apktool解包和打包apk
下载apktool工具 解包 apktool d xxx.apk -f 或者 java -jar apktools.jar decode xxx.apk 植入代码 修改smali代码 重新打包 apk ...
- 如何查看apk安装包源代码??Android反编译apk,解包,打包,签名一体化实测 ,修改图片音频软件名称版本号等入门
首先下载反编译工具包 下载地址 链接: https://zly520.lanzoui.com/ibtuxhf7rab 一.反编译工具介绍 首先 如果你想改动图片音频之类的,见末尾! 1.apktoo ...
- python解包exe_Pyinstaller打包的EXE之解包
1.EXE解包为文件 把pyinstxtractor.py和exe文件放在同个目录下 python pyinstxtractor.py xx.exe pyinstxtractor.py 内容--下载的 ...
- c语言 udp 解包_UDP打包及解包问题
UDP打包及解包问题 (2012-04-11 00:12:39) 标签: 打包 包 杂谈 UDP打包及解包问题第一个问题: 想问下在VC++开发平台下,是否提供了UDP协议打包和解包的接口函数?通常所 ...
- 破解卡米 刷机包(ROM)的解包与打包过程
解决:系统删除系统自带应用(以及改官方刷机包)不开机问题. 环境:Ubuntu,Python,Java: $ python3 --version Python 3.8.5$ java --versio ...
最新文章
- 简单JS实现走马灯效果的文字(无需jQuery)
- oracle中导出的sql文件转入mysql中的工作记录
- 【NLP】使用Google的T5提取文本特征
- Resource接口,及资源
- SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题
- python字符串创建_在Python上创建完整的字符串
- initrd的启动过程
- 三十七、【获取相机权限】
- Win10怎么把登录密码去掉
- 导数、偏导数、梯度、方向导数、梯度下降、二阶导数、二阶方向导数
- 蒟蒻的笔记本二、tarjan
- Codeforces Round #362 (Div. 2) B 模拟
- 关于柔性显示器工作原理及发展前景的探究
- mac系统下,vm虚拟机打不开/dev/vmmon,如何解决?
- 软著代办一般需要多少钱?
- 买蓝牙耳机什么牌子好用?国产蓝牙耳机十大排名
- virtualbox虚拟机窗口大小调整
- 英语自我介绍资料及范文
- Mongoose disconnected. Mongoose connection error: MongoError: Authentication failed. (node:1532) Unh
- IDEA中DEBUG时断点变成灰色
热门文章
- oracle rman备份 归档模式,Oracle RMAN备份归档与非归档模式
- 乐橙等待登录返回超时_等待登录返回超时什么意思
- epoll哪些触发模式_epoll的内部实现 百万级别句柄监听 lt和et模式非常好的解释...
- android 条码扫描控件,Android Zxing条码扫描自定义控件(附代码)
- springboot初始化逻辑_详解Spring Boot中初始化资源的几种方式
- Kotlin入门(28)Application单例化
- Android开发笔记(一百零一)滑出式菜单
- apimodel 可以重复吗_Web API是否需要有ViewModels层类?
- spring 相关框架面试题
- 使用git上传项目到github