From Gracious Cheetah, 3 Months ago, written in Plain Text.
  1. #!/bin/bash
  2. set -x
  3.  
  4. trap 'exit' INT
  5.  
  6. while (($#)); do
  7.   [[ "$1" =~ (-k|--kind) ]] \
  8.    && shift \
  9.       && [[ ! -f "$1" ]] \
  10.         && kind="$1" && shift && continue
  11.   [[ ! "$1" == -* ]] \
  12.     && [[ -f "$1" ]] \
  13.     && f="$1" && shift && continue
  14.   [[ "$1" == -* ]] \
  15.     && argv+=("$1") && shift \
  16.       && [[ ! -f "$1" ]] \
  17.         && argv+=("$1") && shift && continue \
  18.       || { argv+=("$1"); shift; continue; }
  19. done
  20.  
  21. [[ -z "$f" ]] && printf -- "E!: no file specified\n" >&2 && exit 1
  22.  
  23. if [[ -z "$kind" ]]; then
  24.   for t in arch img crypt enc exe doc; do
  25.     "$0" -k "$t" --directory="./$f.$t" "${argv[@]}" "$f"
  26.   done
  27. else
  28.   case "$kind" in
  29.      arch*|comp*) binwalk \
  30.                   -D 'zip archive data:zip:unzip %e' \
  31.                   -D 'tar archive:tar:tar -xf %e' \
  32.                   -D 'jar archive:jar:jar -xf %e' \
  33.                   -D 'rar archive data:rar:unrar %e' \
  34.                   -D 'cpio archive:cpio:bsdcpio i < %e' \
  35.                   -D '7-zip archive data:7z:7z x %e' \
  36.                   -D 'xz compressed data:xz:xz -d %e' \
  37.                   -D 'bzip* compressed data:bz2:bzip2 -d %e' \
  38.                   -D 'gzip compressed data:bz2:gzip -d %e' \
  39.                   -D '*sql*:sql' \
  40.                   "${argv[@]}" "$f"
  41.                   ;;
  42.      img*|png|jpg) binwalk \
  43.                   -D 'png image:png' \
  44.                   -D 'gif image:gif' \
  45.                   -D 'bitmap:bmp' \
  46.                   -D 'jpeg image:jpg' \
  47.                   "${argv[@]}" "$f"
  48.                   ;;
  49.      *crypt*)    binwalk \
  50.                   -D 'mcrypt:mcrypt' \
  51.                   -D 'crc32 poly:crc' \
  52.                   -D 'md5 hash:sha1' \
  53.                   -D 'sha1 hash:sha1' \
  54.                   -D 'sha224 hash:sha224' \
  55.                   -D 'sha384 hash:sha384' \
  56.                   -D 'sha512 hash:sha512' \
  57.                   "${argv[@]}" "$f"
  58.                   ;;
  59.      *enc*)      binwalk \
  60.                   -D 'base64:b64:base64 -d <%e >%e.out' \
  61.                   -D 'base32:b32:base32 -d <%e >%e.out' \
  62.                   -D 'uuencoded data:uu' \
  63.                   "${argv[@]}" "$f"
  64.                   ;;
  65.      *exe*)      binwalk \
  66.                   -D 'ELF:elf:objdump -C -l -S -s -z -x -g -D --prefix-addresses %e >%e.out' \
  67.                   -D 'compiled java:java' \
  68.                   -D 'executable script:script' \
  69.                   -D '9660 cd-rom:iso' \
  70.                   -D 'vmware disk:vmware' \
  71.                   -D 'qcow:qcow' \
  72.                   "${argv[@]}" "$f"
  73.                   ;;
  74.      *pdf*|htm*|*ml|doc)binwalk \
  75.                   -D 'pdf document:pdf' \
  76.                   -D 'html document:html' \
  77.                   -D 'xml document:xml' \
  78.                   -D 'unix path:dir:mkdir -p "%e"' \
  79.                   -D 'text:txt' \
  80.                   "${argv[@]}" "$f"
  81.                   ;;
  82.   esac
  83. fi
captcha