libdo

Untitled

Sep 17th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. root@epsybox:/git# cat /usr/local/bin/extract_initramfs_cpio.sh
  2. #!/bin/bash
  3. zImage=$1
  4. #========================================================
  5. # find start of gziped kernel object in the zImage file:
  6. #========================================================
  7. pos=`grep -P -a -b -m 1 --only-matching $'\x1F\x8B\x08' $zImage | cut -f 1 -d :`
  8.  
  9. #========================================================================
  10. # the cpio archive might be gzipped too, so two gunzips could be needed:
  11. #========================================================================
  12. if [ "$pos" = "" ]; then
  13.         cp $zImage /tmp/kernel.img
  14. else
  15.         echo "-I- Extracting kernel image from $zImage (start = $pos)"
  16.         dd if=$zImage bs=1 skip=$pos | gunzip > /tmp/kernel.img
  17. fi
  18. pos=`grep -P -a -b -m 1 --only-matching $'\x1F\x8B\x08' /tmp/kernel.img | cut -f 1 -d :`
  19. #===========================================================================
  20. # find start and end of the "cpio" initramfs image inside the kernel object:
  21. # ASCII cpio header starts with '070701'
  22. # The end of the cpio archive is marked with an empty file named TRAILER!!!
  23. #===========================================================================
  24. if [ ! "$pos" = "" ]; then
  25.    echo "-I- Extracting compressed cpio image from kernel image (start = $pos)"
  26.    dd if=/tmp/kernel.img bs=1 skip=$pos | gunzip > /tmp/cpio.img
  27.    start=`grep -a -b -m 1 --only-matching '070701' /tmp/cpio.img | head -1 | cut -f 1 -d :`
  28.    end=`grep -a -b -m 1 --only-matching 'TRAILER!!!' /tmp/cpio.img | head -1 | cut -f 1 -d :`
  29.    inputfile=/tmp/cpio.img
  30. else
  31.    echo "-I- Already uncompressed cpio.img, not decompressing"
  32.    start=`grep -a -b -m 1 --only-matching '070701' /tmp/kernel.img | head -1 | cut -f 1 -d :`
  33.    end=`grep -a -b -m 1 --only-matching 'TRAILER!!!' /tmp/kernel.img | head -1 | cut -f 1 -d :`
  34.    inputfile=/tmp/kernel.img
  35. fi
  36.  
  37. end=$((end + 10))
  38. count=$((end - start))
  39. if (($count < 0)); then
  40.    echo "-E- Couldn't match start/end of the initramfs image."
  41.    exit
  42. fi
  43. echo "-I- Extracting initramfs image from $inputfile (start = $start, end = $end)"
  44. dd if=$inputfile bs=1 skip=$start count=$count > initramfs.cpio
  45.  
  46. #to unpack...  cpio
Add Comment
Please, Sign In to add comment