

















@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

então empurrei a base de dados com o crédito bombeado de volta para o telefone
# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
VERDICT
Entretanto, Enquanto eu me sentia como “Robin Hood” (referência nostálgica e explícita ao código de fraude do Age Of Empires para +1000 ouro) eu desenvolvi um utilitário Android para rapidamente despejar/restaurar/violar a base de dados do aplicativo alvo na mosca.

Então voltei à minha Universidade novamente para finalmente testar o Hack
Dear diário…

CONCLUSÃO
De zero conta de crédito, eu poderia:
> Insuflar o crédito do aplicativo.
> Comprar coisas.
> Actualizar o crédito restante.
> Voltar ao estado de crédito zero.
> Inflar novamente o crédito.
> Começar de novo.
Com uma inspecção macro de todas as fontes invertidas encontrei uma enorme porção de código limpo – sem ofuscação – que não significou grandes contramedidas adoptadas para proteger os dados dos utilizadores e tornar a aplicação segura.
Um mês atrás…
A voz interior do White Hat de mim pegou no telefone e ligou para a empresa por detrás desta vergonha para reportar a vulnerabilidade. Eu gentilmente sugeri que eles jogassem fora a arquitetura atual e desenvolvessem uma melhor e segura do zero.
Falsa de Hocus.

















Tags
Crie sua conta gratuita para desbloquear sua experiência de leitura personalizada.