越狱 发表于 2014-12-26 17:20:00

Android 5.0 system.new.dat解包工具及方法[Windows\Linux]

感谢以下人员:
sdat2img 二进制文件最初作者Howellzhu
python脚本代码作者luxi78
Windows x86/x64 作者xpirt
sdat2img 源码地址
以下文字引用作者Howellzhu
从Android 5.0开始,即使是update.zip包,也是仿照增量包的方式进行打包了。使用make otapackage得到一个zip文件,查看内容:
boot.img
file_contexts
META-INF
system.new.dat
system.patch.dat
system.transfer.list

显然system.img不再提供,而是提供了三个文件,利用这三个文件的脚本在/META-INF/com/google/android/updater-script文件中:
block_image_update("/dev/block/platform/msm_sdcc.1/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"); 而该函数定义在:
bootable/recovery/updater/blockimg.c:BlockImageUpdateFn()中。

代码中有一段注释用于描述transfer list文件的内容,它支持如下命令:
1) 文件的第一行是版本号,当前是1;
2) 文件的第二行是总共需要写入的block数量(后面new命令的range加起来应该等于该值);
3) erase : 将目标分区的range清除;
4) zero :将目标分区的range使用0填充;
5) new : 将目标分区的range使用new_data文件填充;

比如如下的一个system.transfer.list文件:
1
90270
erase 2,0,262144
new 28,0,32767,32768,32770,32833,32835,33347,65535,65536,65538,98304,98306,98369,98371,98883,124176,131072,131074,163840,163842,163905,163907,196608,196610,229376,229378,229441,229443
第一行1表示该transfer文件的版本为1;
第二行表示new命令总共要写入90270个block;
第三行表示删除的range是从0到262144,2表示range的区间描述数目是2个数值,即0和262144;
第四行表示从system.new.dat文件中读取block,然后依次写入如下14个区间:[0, 32767), [32768, 32770) ...这个区间的block总数刚好是前面描述的90270个。

这样的做法实际上是一个稀疏数组的区间描述,用以降低update.zip文件的大小和写入的数据量。
Linux 使用方法:(sdat2img 文件暂时只支持 Linux-64位系统)
sdat2img <transfer_list> <system_new_file> <system_img>
解包之后可以直接在 Linux 进行挂载
sudo mount -t ext4 -o loop,ro,noexec,noload system_img system_folder
http://ww3.sinaimg.cn/large/63fea267jw1enf5gtytuij20p80odwmw.jpg
http://ww3.sinaimg.cn/large/63fea267jw1enf5h05kawj20lt06cgp9.jpg

Windows 使用方法:
sdat2img <transfer_list> <system_new_file> <system_img>
解包完成后可以直接使用ext2explore.exe打开进行提取(ext2explore.exe在厨房里面有或自己搜索下载)


工具下载地址:
Windows x86/x64:http://pan.baidu.com/s/1hqqvIhm

Linux 64:链接: http://pan.baidu.com/s/1pJyUJvd 密码: 3zyp

听鬼哥说故事 发表于 2014-12-26 17:22:05

必须顶~~~~~~~~~

JackIO 发表于 2014-12-26 17:50:21

这个必须顶一下。

单翅的天使ylj 发表于 2014-12-26 20:44:53

好东西{:2_26:}

sndncel 发表于 2014-12-26 20:56:57

谢谢分享呀。支持一下呀。

沐小悠 发表于 2015-7-30 13:10:58

我是大条づ 发表于 2015-8-2 11:21:43

页: [1]
查看完整版本: Android 5.0 system.new.dat解包工具及方法[Windows\Linux]