@matteo.pisani.91Matteo Pisani
Disassembling toys since ’91
“Hitting and kicking” the bundled App of their widest European distribution company.
PREFACE
Indisputavelmente, Vending Machines are objects of cult. Deliciosos pedacinhos de Hackers, sempre. No início eles trabalhavam offline apenas com moedas, então, os modelos de chaves/cartões NFC- começaram a se espalhar. Se eu disser “COGES” tenho a certeza de que tempos melhores virão à mente de alguém. Mas… Num monte de anos as coisas mudaram radicalmente. Você se distrai e um momento depois, descobre que o mundo foi substituído por coisas ligadas à internet…
STORY
Um dia decidi interromper o tempero no bat-cave e ir direto para a minha cidade natal para pegar um pouco de sol, então fui para a Universidade para saudar um velho professor.
“Vá tomar um café!” – ele disse – e começamos a conversar enquanto andávamos pelo corredor principal.
Agora chegou…
Mim: “Deixa-me pagar, eu tenho moedas!”.
Him: “Espera, espera! Deixa-me usar a aplicação da máquina automática para pagar, o café será mais barato”.
BLE + NFC
Cérebro: “Mmm… Carteiras virtuais são coisas legais…”.
Excellent.
HOT-POT
Soul: “Eu te desafio a Hackear isso!”
~$ Voz interior do chapéu branco: “apenas palmadinhas no ombro se não houver recompensa de recompensa de insecto”.
~$ Voz interior do chapéu cinzento: “ok, vou fazer isso apenas para fins educativos”.
~$ Voz interior do chapéu preto: “Vá lá meu, vamos lixar aquele HEAP, grande Júpiter!”.
Mais tarde nesse dia…
Pwnie express.
ANÁLISE
Needless para dizer que peguei no meu smartphone Android sujo enraizado (com USB Debugging Enabled), instalei o aplicativo alvo a partir da Play Store e despejei o original *.apk para o meu laptop via adb.
# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk
Descompilei o *.apk com apktool
# apktool d ./Argenta.apk -o ./Argenta
e extraí fontes Java com jadx
# jadx ./Argenta.apk
Primeiro, eu fiz o *.apk debuggable editando o arquivo AndroidManifest.xml adicionando a propriedade android:debuggable="true"
ao arquivo application <tag>
Então, eu reconstruí o *.apk
# apktool b ./Argenta
crevi uma nova chave com o keytool
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
assinei o *.apk com o jarsigner usando a chave gerada
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta
lastly, eu alinhei o zip para torná-lo executável
# zipalign -v 4 Argenta.apk Argenta-signed.apk
e instalei o final *.apk
Fiz a aplicação no smartphone e comecei a procurar logs com logcat, filtrando-os através do nome do pacote
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`
Nada especial encontrada, então comecei a pentear através dos códigos fonte procurando por informações suculentas.
>
Localizando melhor em AndroidManifest.xml
arquivo, encontrei referências a RushOrm
Então, a primeira palavra-chave pesquisada foi db_name
Cool. Iniciei o Root Explorer no telefone procurando por argenta.db
Found. Então eu puxei para o meu laptop com o adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
e tentei abri-lo com um Navegador DB para SQLite
obviamente, foi protegido por senha
REVERSE-ENGINEERING
Passar para trás para os códigos-fonte, olhou para RushAndroidConfig.java
onde encontrei os métodos usados para configurar a base de dados.
A minha atenção foi capturada por this.encryptionKey = getDeviceId(context);
Mudei para a sua definição e…
>
Fundei que o aplicativo alvo usou o IMEI do telefone (*#06#)
como chave de criptografia para a base de dados SQLite.
Abracadabra.
Boom baby.
Após alguns segundos de inspecção, Abri para UserWallets
tabela
e editei o campo walletCredit
mudanças de escrita