Skip to content

Instantly share code, notes, and snippets.

@merces
Created March 6, 2015 06:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save merces/eb73556139a770443756 to your computer and use it in GitHub Desktop.
Save merces/eb73556139a770443756 to your computer and use it in GitHub Desktop.
A stenography challenge solution
#!/bin/bash
#
# Solução do desafio da Clavis, publicado em
# http://www.seginfo.com.br/challenge-3-blog-seginfo-esteganografia/
#
# Uso: ./steg-clavis.sh DesafioEsteg.jpg
#
# Fernando Mercês (fernando@mentebinaria.com.br)
# just4fun! :)
verde='\e[0;32m'
amar='\e[0;33m'
verm='\e[0;31m'
def='\e[0m'
ok() { echo -e "$verde[OK]$def"; }
fail() { echo -e "$verm[FAIL]$def"; exit 1; }
md5ori="a5d78511149bcf68afddd82a1ed6db29"
md5=$(md5sum $1 | cut -d" " -f1)
echo -ne "Checando MD5 da imagem...\t\t"
test "$md5" = "$md5ori" && ok || fail
# Tem uma string com vários 0s e 1s dentro do arquivo
echo -ne "Buscando string dentro da imagem...\t"
binstr=$(strings $1 | grep 01010110) && ok || fail
# Tomando os caracteres em grupos de 8 e convertendo pra ASCII
# sai outra string interessante...
echo -ne "Convertendo os binários para ASCII...\t"
for ((i=0; i < ${#binstr}; i+=8))
do
valor=$(echo "obase=16;ibase=2;${binstr:$i:8}" | bc)
b64str=$b64str$(echo -ne "\x$valor")
done
test -n "$b64str" && ok || fail
# ...que está em base64. Se tirarmos, outra string interessante...
echo -ne "Revertendo BASE64...\t\t\t"
rot5str=$(echo $b64str | base64 -d) && ok || fail
# Perceba o "bbb." com cara de "www". Se rodarmos o 'b' para trás
# 5 vezes, ficaria "www", então suspeita-se de um ROT5 (mas nas letras)
echo -ne "Aplicando o ROT5 nas letras...\t\t"
test -n "$rot5str" && ok || fail
# o maldito tr resolve o ROT a voilà!
echo -ne "\n$amar"
echo $rot5str | tr a-zA-Z v-za-zA-ZE-ZZ
echo -ne "$def"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment