Created
February 28, 2018 00:24
-
-
Save cryptolok/6916aee059c0b8317ed7078adaa7a226 to your computer and use it in GitHub Desktop.
Firmware Automatic Dumping & Extraction Tool
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# this tool will automate firmware extraction and unpacking using FT232R-type adaptors (like BusPirate) and a SOIC clip placed on a chip to dump | |
# install the necessary software: | |
#$ sudo apt install flashrom binwalk || echo 'git clone?' | |
# pump up binwalk with additional packages and libraries | |
#$ bash <(curl -s https://raw.githubusercontent.com/devttys0/binwalk/master/deps.sh) | |
# place the clip on the chip, connect it to the adaptor, which sould be connected to your PC (with drivers installed) and launch the script: | |
# chip => clip => adaptor => PC => script | |
# the placement for clips may wary, but in most cases it should be like this: | |
# 5Vorange purple grey | |
# VCC _ CLK MOSI | |
# | | | | | |
# *------------* | |
# | ModelName | | |
# | o | | |
# *------------* | |
# | | | | | |
# CS MISO _ GND | |
# white black brown | |
# for 16-24 SOIC pins, just skip the middle pins and invert connections: | |
# CLK MOSI ... GND _ | |
# | | ... | | | |
# *------ ... ------* | |
# | ModelName | | |
# | o | | |
# *------ ... ------* | |
# | | ... | | | |
# _ VCC ... CS MISO | |
FILE=firmware.bin | |
FILES=_$FILE.extracted | |
FS=filesystem | |
DEVICE=/dev/serial/by-id/usb-FTDI_FT232R_USB* | |
DEVICE=$(ls $DEVICE) &>/dev/null | |
echo -e "\033[01;32m" | |
echo ' .---------------------------------.' | |
echo ' | .---------------------------. |' | |
echo ' |[]| |[]|' | |
echo ' | | | |' | |
echo ' | | | |' | |
echo ' | | ╔═╗┬┬─┐┌┬┐╔═╗╔╦╗ | |' | |
echo ' | | ╠╣ │├┬┘│││╠═╣ ║║ | |' | |
echo ' | | ╚ ┴┴└─┴ ┴╩ ╩═╩╝ | |' | |
echo ' | | | |' | |
echo ' | | | |' | |
echo ' | | | |' | |
echo ' | `---------------------------'' |' | |
echo ' | __________________ _____ |' | |
echo ' | | ___ | | |' | |
echo ' | | | | | | |' | |
echo ' | | | | | | |' | |
echo ' | | | | | | |' | |
echo ' | | |___| | | |' | |
echo ' \_____|__________________|_____|__|' | |
echo '' | |
echo ' Firmware Automatic Dumping & Extraction Tool' | |
echo '' | |
echo -e "\e[0m" | |
echo 'VERIFYING ROOT PERMISSIONS ...' | |
if [[ $UID -ne 0 ]] | |
then | |
echo 'sudo !!' | |
exit 1 | |
fi | |
echo 'SEARCHING FOR DEVICES ...' | |
if [[ ! "$DEVICE" ]] | |
then | |
echo '!!! NO DEVICE FOUND !!!' | |
echo 'ENSURE THAT THE DEVICE IS PLUGGED IN AND THE KERNEL HAS THE APPROPRIATE DRIVERS' | |
exit 2 | |
fi | |
echo "*** FOUND $DEVICE ***" | |
echo 'SEARCHING FOR SERIAL FLASH EEPROM CHIP ...' | |
CHIP=$(flashrom -p buspirate_spi:dev=$DEVICE | grep Found | cut -d ')' -f -2) | |
echo $CHIP | grep -v '0 kB' | |
if [ $? -ne 0 ] || [ "$CHIP" = "" ] | |
then | |
echo '!!! NO CHIPSET FOUND !!!' | |
echo 'ENSURE THAT THE CLIP IS PLACED PROPERLY AND THE CABLES ARE CONNECTED CORRECTLY ACCORDING TO THE SERIAL PROTOCOL' | |
echo 'YOU CAN ALSO SPECIFY THE MODEL MANUALLY : (blank to quit)' | |
read CHIP | |
if [[ ! "$CHIP" ]] | |
then | |
exit 3 | |
fi | |
fi | |
CHIP=$(echo $CHIP | cut -d '.' -f 2) | |
if [[ ! "$CHIP" ]] | |
then | |
CHIP=$(echo $CHIP | cut -d '.' -f 1) | |
fi | |
echo "*** ${CHIP^^}) ***" | |
CHIP=$(echo $CHIP | cut -d '"' -f 2) | |
echo "DUMPING THE FIRMWARE TO $FILE (<10 minutes) ..." | |
#flashrom -p buspirate_spi:dev=$DEVICE -c $CHIP -r $FILE 2>&1 >/dev/null | tr [[:lower:]] [[:upper:]] | |
flashrom -p buspirate_spi:dev=$DEVICE -c $CHIP -r $FILE >/dev/null | |
# TODO timeout | |
if [[ $? -ne 0 ]] | |
then | |
echo "!!! ERROR WHILE DUMPING !!!" | |
echo 'ENSURE THAT THE CONTACTS WERENT DISRUPTED AND THE CHIP MODEL IS CORRECT' | |
exit 4 | |
fi | |
echo "*** DUMPED TO $FILE ***" | |
echo "EXTRACTING FILE SYSTEM TO $FS ..." | |
binwalk -Me -d 256 $FILE >/dev/null | |
if [[ $? -ne 0 ]] | |
then | |
echo "!!! ERROR WHILE EXTRACTING !!!" | |
echo 'ENSURE THAT THE DEPENDENCIES WERE PROPERLY INSTALLED AND FUNCTIONAL' | |
exit 5 | |
fi | |
mv $FILES/squashfs-root $FS || mv $FILES/_*.extracted $FS 2>/dev/null | |
rm -r $FILES | |
ls -F1 $FS | |
echo "*** EXTRACTED TO $FS ***" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment