Introduction
You probably know already that starting from Android 5.x (Lollipop) compiled roms (aosp,cm,stock) are not compressed anymore the way they used to be on previous android versions. On previous versions all content inside /system folder that has to be extracted within our device was either uncompressed (simple /system folder inside our flashable zip) or compressed in a system.img file, which it is a ext4 compressed file; both of these, anyway, were readable and we could see all system files (app,framework, etc).
The problem comes in >=5.0 versions, this method is not used anymore. Why? Because roms started to be always larger, so it is necessary to compress them even more.
What does new Android zips (full roms, but also otas) contain?
New Android flashable zips are made this way:
boot.img (kernel)
file_contexts (selinux related)
META-INF (folder containing scripts)
system.new.dat (compressed /system partition)
system.patch.dat (for OTAs)
system.transfer.list (see explanation below)
What does updater-script contains then?
The updater-script uses a brand new function: block_image_update(), this method basically decompresses necessary files inside the device. Let's study it.
From google git source code, if we go inside the new file /bootable/recovery/updater/blockimg.c, we find at the end of it the registration of the function block_image_update() as the method BlockImageUpdateFn() which starts at line 254. Here finally we find all information we need to know about the decompression of the .dat file(s). First file we analyze is system.transfer.list which Google tells us:
The transfer list is a text file containing commands to transfer data from one place to another on the target partition.
Click to expand...
Click to collapse
But what each line means?:
First line is the version number of the transfer list; 1 for android 5.0.x, 2 for android 5.1.x, 3 for android 6.0.x, 4 for android 7.x/8.x
Second line is the total number of blocks being written
Third line is how many stash entries are needed simultaneously (only on versions >= 2)
Fourth line is the maximum number of blocks that will be stashed simultaneously (only on versions >= 2)
Fifth line and subsequent lines are all individual transfer commands.
Click to expand...
Click to collapse
Ok, but how to decompress the system.new.dat file?
All instructions are below. sdat2img, rimg2sdat and img2sdat binaries are involved. Please read carefully step by step.
NOTE for OTAs
If you are looking on decompressing system.patch.dat file or .p files, therefore reproduce the patching system on your PC, check imgpatchtools out by @erfanoabdi.
You can use/modify these files and/or include them in your work as long as proper credits and a link to this thread are given.
If you have questions or problems write here
Are you building from source and want to revert to the old flashing method without DAT files?
Do this (thx @Elluel):
1 - Delete this line
2 - Make sure you have this commit
Thanks
- howellzhu & luxi78 - for initial source codes
- all contributors from github
Ubuntu
Ubuntu 64-bit - Guide
Step 1 - Decompressing = DAT (sparse data) -> EXT4 (raw image)
We're now using sdat2img binary, the usage is very simple (make sure you have python 2.7+ installed):
./sdat2img.py <transfer_list> <system_new_file> [system_img]- <transfer_list> = input, system.transfer.list from rom zip
- <system_new_file> = input, system.new.dat from rom zip
- [system_img] = output ext4 raw image file
and a quick example:
./sdat2img.py system.transfer.list system.new.dat system.imgby running this command you will get as output the file my_new_system.img which is the raw ext4 image.
Step 2 - Decompress EXT4 (raw image) -> OUTPUT folder -> Compress EXT4 (raw image)
Now we need to mount or ext4 raw image into an output folder so we can see apks/jars etc.
To do this we need to type this command:
sudo mount -t ext4 -o loop system.img output/As you can see there is a new folder called output which we can edit/modify/delete your files (not able to? see here)
Now we need to compress it back to a raw ext4 image, to do this we need the make_ext4fs binary. Make sure you have the file_contexts file (taken from the Rom zip) inside the make_ext4fs path. Then type this (got issues? see here)
./make_ext4fs -T 0 -S file_contexts -l 1073741824 -a system system_new.img output/You will get the new raw ext4 image called 'system_new.img' ready for the next step.
Step 3 - Converting = EXT4 (raw image) -> IMG (sparse image)
Now we need to convert the ext4 raw image into a sparse image. For this you need img2simg binary you can find here (thx to @A.S._id).
The usage is simple:
img2simg <raw_image_file> <sparse_image_file>Pretty self-explanatory, the output will be a new sparse image (.img).
Step 4 - Converting = IMG (sparse image) -> DAT (sparse data)
Now we need the img2sdat binary, the usage is very simple (make sure you have python 2.7+ installed):
./img2sdat.py <system_img>- <system_img> = name of input sparse image file (from step 3)
As you can see the output is composed by system.transfer.list, (system.patch.dat) & system.new.dat, ready to be replaced inside your Rom zip.
DOWNLOADs
sdat2img.py
- github.com
make_ext4fs
- mega.co.nz
img2sdat.py
- github.com
Source - Changelog
sdat2img
Repo: https://github.com/xpirt/sdat2img
Changelog: https://github.com/xpirt/sdat2img/commits/master
Source: https://github.com/xpirt/sdat2img/blob/master/sdat2img.py
img2sdat
Repo: https://github.com/xpirt/img2sdat
Changelog: https://github.com/xpirt/img2sdat/commits/master
Source: https://github.com/xpirt/img2sdat/blob/master/img2sdat.py
Windows
Windows 32/64 bit - Guide
Step 1 - Decompressing = DAT (sparse data) -> EXT4 (raw image)
We're now using sdat2img.py binary, the usage is very simple (make sure you have python 3.x installed):
sdat2img.py <transfer_list> <system_new_file> <system_ext4>- <transfer_list> = input, system.transfer.list from rom zip
- <system_new_file> = input, system.new.dat from rom zip
- <system_ext4> = output ext4 raw image file
and a quick example:
sdat2img.py system.transfer.list system.new.dat system.imgby running this command you will get as output the file my_new_system.img which is the raw ext4 image.
Step 2 - Decompress EXT4 (raw image) -> OUTPUT folder -> Compress EXT4 (raw image)
Now you should either move to Ubuntu x64/x86 or follow the 2nd step from the Ubuntu guide on cygwin 32 bit.
Step 3 - Converting = EXT4 (raw image) -> IMG (sparse image)
Now we need to convert the ext4 raw image into a sparse image. For this you need img2simg binary you can find here (thx to @A.S._id).
The usage is simple:
img2simg.exe <raw_image_file> <sparse_image_file>Pretty self-explanatory, the output will be a new sparse image (.img).
Step 4 - Converting = IMG (sparse image) -> DAT (sparse data)
Now we need the img2sdat binary, the usage is very simple (make sure you have python 2.7+ installed):
img2sdat.py <system_img>- <system_img> = name of input sparse image file (from step 3)
As you can see the output is composed by system.transfer.list, (system.patch.dat) & system.new.dat, ready to be replaced inside your Rom zip.
DOWNLOADs
sdat2img.py
- github.com
make_ext4fs
- mega.co.nz
img2sdat.py
- github.com
Is there any tool to browse (and/or manipulate) these .dat files in Windows?
01 Vlatce said:
Is there any tool to browse (and/or manipulate) these .dat files in Windows?
Click to expand...
Click to collapse
i don't think so, though you can install ubuntu in a virtual machine as 64-bit and decompress there without problems.
edit: windows binaries added to OP.
xpirt said:
i don't think so, though you can install ubuntu in a virtual machine as 64-bit and decompress there without problems.
Click to expand...
Click to collapse
I found one, Ext2Explore, it can browse and extract lollipop .dat files
01 Vlatce said:
I found one, Ext2Explore, it can browse and extract lollipop .dat files
Click to expand...
Click to collapse
Can you explain how to work in more detail ? Thanks.
chihliouma said:
Can you explain how to work in more detail ? Thanks.
Click to expand...
Click to collapse
With that application you can open the system.new.dat file like a zip archive
Sent from my Nexus 5
xpirt said:
i don't think so, though you can install ubuntu in a virtual machine as 64-bit and decompress there without problems.
Click to expand...
Click to collapse
01 Vlatce said:
I found one, Ext2Explore, it can browse and extract lollipop .dat files
Click to expand...
Click to collapse
Confirmed.
Works perfectly..
Thanks a lot! This will save a lot of time theming.. (pulling the system, settings, framework without having to flash the rom first)
Oh, just for s&g's i extracted ("decompiled") the system.new file, the files (app, prive-app, framework, media, etc) all got placed on my desktop -- i deleted the system.new file from the rom -- i then placed the folders and files that got extracted and placed them in the rom -- i flashed it -- it booted! lol.. didnt think it would... but anyways, there's that.
For those who want to try:
--- > its basically self explanatory.
- once downloaded (the link above) extract the contents from the zip (i just went ahead and extracted to my desktop)
- right click the linux penguin
- run as administrator - the window will pop up
- go to file > open image > find your system.new image (should already be extracted from the rom and placed on your desktop)
- click open
- you should now see your image (or path) in the windows -- double click them (i doubled clicked both the right and left side)
- now you should be able to see all the folders
---> if you want to extract those folders
- just go up to the top
- click save and choose an extraction (i chose Desktop)
Hoped i helped -- any questions or confusion, dont be shy to ask -- i probably went too fast, idk lol
Enjoy!
Incredible_Culp said:
Confirmed.
Works perfectly..
Thanks a lot! This will save a lot of time theming.. (pulling the system, settings, framework without having to flash the rom first)
Oh, just for s&g's i extracted ("decompiled") the system.new file, the files (app, prive-app, framework, media, etc) all got placed on my desktop -- i deleted the system.new file from the rom -- i then placed the folders and files that got extracted and placed them in the rom -- i flashed it -- it booted! lol.. didnt think it would... but anyways, there's that.
For those who want to try:
--- > its basically self explanatory.
- once downloaded (the link above) extract the contents from the zip (i just went ahead and extracted to my desktop)
- right click the linux penguin
- run as administrator - the window will pop up
- go to file > open image > find your system.new image (should already be extracted from the rom and placed on your desktop)
- click open
- you should now see your image (or path) in the windows -- double click them (i doubled clicked both the right and left side)
- now you should be able to see all the folders
---> if you want to extract those folders
- just go up to the top
- click save and choose an extraction (i chose Desktop)
Hoped i helped -- any questions or confusion, dont be shy to ask -- i probably went too fast, idk lol
Enjoy!
Click to expand...
Click to collapse
I can't get this to work at all. I'm using Win 7 Pro and I've actually used this app before with stock Nexus 7 factory images and it worked fine.. What file did you actually download? I d/l 2 different versions, one was beta 2.0 and the other was a zip that said 2.2.71 but the about on the exe says 2.1, which is the version I've been using for quite a while.
With the beta 2.0, there's not even an option to open a file and with the 2.1, it errors out every time. After opening system.new.dat image and double clicking, it just hangs and the program stops responding. If I try clicking on it and selecting save, it allows me to select a folder to save it in but I just get a dialog box that says saving files and then hangs at 24% every time, finally crashing with a Microsoft C++ runtime error.
Oh btw, you didn't go too fast LOL, this is really a simple app to use but it's just not working for me with these block image files. Maybe I'm missing something but it's got me scratching my head. :laugh: If you have any ideas, I'm all ears.
Thanks,
Mike T
webdroidmt said:
I can't get this to work at all. I'm using Win 7 Pro and I've actually used this app before with stock Nexus 7 factory images and it worked fine.. What file did you actually download? I d/l 2 different versions, one was beta 2.0 and the other was a zip that said 2.2.71 but the about on the exe says 2.1, which is the version I've been using for quite a while.
With the beta 2.0, there's not even an option to open a file and with the 2.1, it errors out every time. After opening system.new.dat image and double clicking, it just hangs and the program stops responding. If I try clicking on it and selecting save, it allows me to select a folder to save it in but I just get a dialog box that says saving files and then hangs at 24% every time, finally crashing with a Microsoft C++ runtime error.
Oh btw, you didn't go too fast LOL, this is really a simple app to use but it's just not working for me with these block image files. Maybe I'm missing something but it's got me scratching my head. :laugh: If you have any ideas, I'm all ears.
Thanks,
Mike T
Click to expand...
Click to collapse
hmm interesting..
im using windows 8.1
idk how much help i can be because i just downloded the first option (provided by the link above) and went from there.
like you said, theres two.. the .exe and the .zip.. i downloaded the .exe
Incredible_Culp said:
hmm interesting..
im using windows 8.1
idk how much help i can be because i just downloded the first option (provided by the link above) and went from there.
like you said, theres two.. the .exe and the .zip.. i downloaded the .exe
Click to expand...
Click to collapse
So, did you d/l the zip that was modified 2006-8-26, which is version 2.0 beta, or did you click the link which said download latest release?
Mike T
webdroidmt said:
So, did you d/l the zip that was modified 2006-8-26, which is version 2.0 beta, or did you click the link which said download latest release?
Mike T
Click to expand...
Click to collapse
ha! didnt even see there was a latest release..
i downloaded the 2006-8-26 apparently -- didnt even look at that date either LOL
i dont want to try the latest now -- this one works fine for me lmao -- dont want to ruin it.. ah, screw it, im downloading the latest now
EDIT: Ok, i lied.. i just checked my trash.. i did download the lastest release .zip .. the 2271..
@webdroidmt @Incredible_Culp Download from here lol: http://sourceforge.net/projects/ext2read/
Maybe something with my PC setup or Win 7 because the 2006-8-26 version doesn't even give me an option for opening a file image. It actually loads up looking like an incomplete application, it's also a very small filesize. Did you just d/l the ext2explore exe, or did you also d/l ext2read2 beta zip?
Mike T
webdroidmt said:
Maybe something with my PC setup or Win 7 because the 2006-8-26 version doesn't even give me an option for opening a file image. It actually loads up looking like an incomplete application, it's also a very small filesize. Did you just d/l the ext2explore exe, or did you also d/l ext2read2 beta zip?
Mike T
Click to expand...
Click to collapse
Use the download link in the above post and click the green download button, and it should be the correct version, from 2012 rather than 2006.
Lethargy said:
@webdroidmt @Incredible_Culp Download from here lol: http://sourceforge.net/projects/ext2read/
Click to expand...
Click to collapse
That's the one I've been using for quite some time. As mentioned in my previous post, the system.new.dat file just "appears" to be saving but hangs at 24%, then eventually crashes. I'm stumped, should be so easy but it doesn't want to cooperate. LOL
Thanks anyway,
Mike T
webdroidmt said:
That's the one I've been using for quite some time. As mentioned in my previous post, the system.new.dat files just "appear" to be saving but hangs at 24%, then eventually crashes. I'm stumped, should be so easy but it doesn't want to cooperate. LOL
Thanks anyway,
Mike T
Click to expand...
Click to collapse
Weird. Try redownloading the ROM you're trying to extract?
Lethargy said:
Use the download link in the above post and click the green download button, and it should be the correct version, from 2012 rather than 2006.
Click to expand...
Click to collapse
Thanks for trying guys, that is exactly the one I've been using. I downloaded it again a few seconds ago and still getting the same result. :laugh:
Thanks.
Mike T
---------- Post added at 01:09 AM ---------- Previous post was at 01:08 AM ----------
Lethargy said:
Weird. Try redownloading the ROM you're trying to extract?
Click to expand...
Click to collapse
I've actually tried with images from 3 different roms and they all give me the same result. It's cool, I just won't be able to play around as much as I used to porting stuff.
Mike T
---------- Post added at 01:15 AM ---------- Previous post was at 01:09 AM ----------
Lethargy said:
Weird. Try redownloading the ROM you're trying to extract?
Click to expand...
Click to collapse
Just curious, you guys aren't changing the file extension to something other than .dat, right?
Mike T
Hello,
I have an ASUS K01A tablet with a blank system partition and unusable recovery. I can flash img files to their respective partitions just fine (boot.img, droidboot.img) in fastboot, but 'system' in the stock firmware zip is a directory instead of a flashable image. Of course, this (and other reasons) means I can't just flash the stock firmware in fastboot, nor flash over the entire 'system' directory.
I need a system.img to recover my tablet from softbrick, but I can't for the life of me compile one. I've exhausted every method and tool I could find in both Windows and Ubuntu.
I beseech the community; if there is anyone reading this who could build such a file for me, I would be eternally grateful. I believe I only need the system.img to recover the tablet.
The stock firmware is at the ASUS website. Here is the download link: UL-K01A-WW-12.8.1.41-user.zip.
Thanks in advance!
Why not extract the system folder of the ZIP linked to, then pack it into a ZIP what you then convert to IMG using an online-convertor that does the job?
jwoegerbauer said:
Why not extract the system folder of the ZIP linked to, then pack it into a ZIP what you then convert to IMG using an online-convertor that does the job?
Click to expand...
Click to collapse
"Why not" indeed; that sounds like it would more than suffice. Can you please recommend one?
Anyone? I have been unable to find this "online-converter" despite days of searching; still at square one.
Only as example ( found via Google search !!! )
Archive Converter - Convert your a7z, rar, zip, gzip, bzip2, tar archives to another format online
Free Archive Converter. Convert your archive files to a7z, rar, zip, gzip, bzip2, tar format online for free using OnlineConvertFree.
onlineconvertfree.com
jwoegerbauer said:
Only as example ( found via Google search !!! )
Archive Converter - Convert your a7z, rar, zip, gzip, bzip2, tar archives to another format online
Free Archive Converter. Convert your archive files to a7z, rar, zip, gzip, bzip2, tar format online for free using OnlineConvertFree.
onlineconvertfree.com
Click to expand...
Click to collapse
Thank you, but I've tried this one and all the others on Google, and none will handle the filesize (~650 MB). It must be purpose-made for Android .img files it seems, which I've been unable to find.
Kehkou said:
Hello,
I have an ASUS K01A tablet with a blank system partition and unusable recovery. I can flash img files to their respective partitions just fine (boot.img, droidboot.img) in fastboot, but 'system' in the stock firmware zip is a directory instead of a flashable image. Of course, this (and other reasons) means I can't just flash the stock firmware in fastboot, nor flash over the entire 'system' directory.
I need a system.img to recover my tablet from softbrick, but I can't for the life of me compile one. I've exhausted every method and tool I could find in both Windows and Ubuntu.
I beseech the community; if there is anyone reading this who could build such a file for me, I would be eternally grateful. I believe I only need the system.img to recover the tablet.
The stock firmware is at the ASUS website. Here is the download link: UL-K01A-WW-12.8.1.41-user.zip.
Thanks in advance!
Click to expand...
Click to collapse
maybe that video helps you...
good luck
solong
speedson
I built it finally using IMGBurn to create the raw img and Sparse Converter to convert it to sparse img fragments.
But now the tab has formatting error, and with -u option, flashing errors (all partitions and imgs now). Ah, well.
Thank you to everyone! Hopefully someone else reading this will have better luck than me.
Kehkou said:
I built it finally using IMGBurn to create the raw img and Sparse Converter to convert it to sparse img fragments.
But now the tab has formatting error, and with -u option, flashing errors (all partitions and imgs now). Ah, well.
Thank you to everyone! Hopefully someone else reading this will have better luck than me.
Click to expand...
Click to collapse
Download the attached file from the link at the bottom of this post and unzip it somewhere on your PC. It is a temporary recovery launcher. We'll come back to it in a moment. Based on your original post I'm assuming you already have your stock firmware downloaded as well as ADB and Fastboot setup. From your stock firmware unpack the following files: fastboot.img, splashscreen.img, and boot.img and place them in your ADB/Fastboot folder. Copy the stock firmware to your sd card (in its original, unzipped form...the way it was when you first downloaded it). Put the tablet in fastboot mode. Run the following fastboot commands from a command prompt.
- fastboot flash fastboot fastboot.img
- fastboot flash boot boot.img
- fastboot flash splashscreen splashscreen.img
Reboot back to fastboot mode. Go to wherever you unzipped the temp recovery that you downloaded earlier. Double click on launcher.bat. Type accept in the window, then type T2 and your device should boot into CWM recovery. Now choose install zip>install from se card>and choose the stock firmware.zip that you previously copied to your sd card then let it do its thing. Once its finished go back to the first page of the CWM recovery that you're in and select reboot system now>no>no. You should be golden now. Post back if you have any issues.
Download Disposable Recovery