Advertisement
Guest User

1_unpack_firmware.sh

a guest
Feb 20th, 2021
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.41 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # create enviroment
  4. rm -r working_dir
  5. mkdir working_dir
  6.  
  7. extract_part() {
  8.         echo -e "\nExtract $2 from $1 (offset $3, size $4)"
  9.         dd if=$1 of=$2 bs=1 skip=$(($3)) count=$(($4))
  10. }
  11.  
  12. extract_part "firmware.bin" "working_dir/u-boot.bin" 0 0x50000
  13. extract_part "firmware.bin" "working_dir/uimage.bin" 0x50000 0x50040
  14. # need to know full file size: 'wc -c < FILENAME' -> 0x400000
  15. extract_part "firmware.bin" "working_dir/main_container.lzma" 0x50040 4194304-0x50040
  16.  
  17. # extract compressed main_container
  18. lzma -d < working_dir/main_container.lzma > working_dir/main_container_extracted.bin
  19.  
  20. # divide main_container into parts
  21. extract_part "working_dir/main_container_extracted.bin" "working_dir/main_container_header.bin" 0 0x47A000
  22. extract_part "working_dir/main_container_extracted.bin" "working_dir/main_container_filesystem.xz" 0x47A000 2122764 # value found manually by removing byte after byte till getting no error from 7z
  23.  
  24. # decompress root of main_container
  25. cd working_dir/
  26. 7z e -y main_container_filesystem.xz
  27. cd ..
  28.  
  29. # unpack root CPIO
  30. rm -r extracted_root
  31. mkdir extracted_root
  32. cd extracted_root
  33. cpio --extract --make-directories --preserve-modification-time --no-absolute-filenames < ../working_dir/main_container_filesystem
  34. #cpio --extract --make-directories --pass-through --preserve-modification-time --no-absolute-filenames < ../working_dir/main_container_filesystem
  35. cd ..
  36.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement