İşlerimizi biraz kolaylaştımrak için şöyle bi script yazdım, s uzantılı dosyayı veriyoz bir de badchar kontrolü yapılacak bytei \xbb formatında veriyoz hallediyo, badchari vermezsek otomatik \x00 kontrol ediyor.
Çıktı olarak filename-raw, filename-elf üretiyor. -d verirseniz çıktıları siliy.
Örnek:
./runner.sh -f benimkucukshellcodeum.s
./runner.sh -f benimkucukshellcodeum.s -b '\x48'
./runner.sh -f benimkucukshellcodeum.s -b '\x48' -d
pwntools ve nasm kurulu olmalı
while getopts f:b:d flag
do
case "${flag}" in
f) filename=${OPTARG};;
b) badchar=${OPTARG};;
d) delete="yes";;
esac
done
if [ -z "$badchar" ]
then
badchar='\x00'
fi
name=$(echo "$filename" | cut -f 1 -d '.')
gcc -nostdlib -static $filename -o $name-elf;
objcopy --dump-section .text=$name-raw $name-elf;
printf "Checking badchar in $name-raw\n"
python3 -c "bd=r'$badchar';print(f'isContains {bd} ?:',b'$badchar' in open('$name-raw','rb').read())"
printf "\nHexdumping $name-raw\n"
python3 -c "from pwn import hexdump;print(hexdump(open('$name-raw','rb').read()))"
printf "\nndisasm -b 64 $name-raw\n"
ndisasm -b 64 $name-raw
printf "\nRunning shelcode $name-elf\n"
./$name-elf
if [ ! -z "$delete" ]
then
rm $name-elf
rm $name-raw
fi