summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-09-22 08:06:19 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-09-22 08:06:19 (GMT)
commit0081d76ba15b08be04cd2a7c7c65a7c0e6e7a6fe (patch)
tree2ac28e2746861dd76bd54dca5642cbd54b61f50a
parent3c5bdffd74d21f6c156730a91d3c78b59eb83b42 (diff)
Created a Chrysalide based unpackbootimg Python tool.
-rw-r--r--python/unpackbootimg.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/python/unpackbootimg.py b/python/unpackbootimg.py
new file mode 100644
index 0000000..addc408
--- /dev/null
+++ b/python/unpackbootimg.py
@@ -0,0 +1,79 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+import argparse
+import sys
+import pychrysalide
+from pychrysalide.analysis.contents import FileContent
+from pychrysalide.format.bootimg import BootimgFormat
+
+
+if __name__ == '__main__':
+ """Script entry point."""
+
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument('bootimg', help='path to the Android boot imgage to process')
+
+ args = parser.parse_args()
+
+ cnt = FileContent(args.bootimg)
+
+ if cnt is None:
+ sys.exit('No content to load!')
+
+ fmt = BootimgFormat(cnt)
+
+ if fmt is None:
+ sys.exit('Failed to load the boot image!')
+
+ oattribs = [
+ 'magic',
+ 'kernel_size',
+ 'kernel_addr',
+ 'ramdisk_size',
+ 'ramdisk_addr',
+ 'second_size',
+ 'second_addr',
+ 'tags_addr',
+ 'page_size',
+ 'header_version',
+ 'os_version',
+ 'name',
+ 'cmdline',
+ 'extra_cmdline'
+ ]
+
+ maxlen = 0
+
+ for a in oattribs:
+ if len(a) > maxlen:
+ maxlen = len(a)
+
+ name = ' {0:<%u}' % (maxlen + 1)
+
+ header = fmt.get_header()
+
+ for a in oattribs:
+
+ v = getattr(header, a)
+
+ value = '0x%x' % v if type(v) == int else v
+
+ print(name.format(a + ':'), value)
+
+ with open(args.bootimg + '-' + a, 'w') as out:
+ out.write(value)
+ out.write('\n')
+
+ contents = {
+ 'kernel': fmt.get_kernel(),
+ 'ramdisk': fmt.get_ramdisk(),
+ 'second_stage': fmt.get_second_stage(),
+ 'recovery_dtbo': fmt.get_recovery_dtbo()
+ }
+
+ for k, v in contents.items():
+ if v:
+ with open(args.bootimg + '-' + k, 'wb') as out:
+ out.write(v.data)