@matteo.pisani.91Matteo Pisani
Speelgoed ontmantelen sinds ’91
“Hitting and kicking” de gebundelde App van hun breedste Europese distributiebedrijf.
PREFACE
Onmiskenbaar zijn Automaten objecten van cult. Heerlijke hapjes van Hackers, altijd. In het begin werkten ze alleen offline met munten, daarna begonnen NFC-sleutels/kaarten modellen zich te verspreiden. Als ik “COGES” zeg, weet ik zeker dat iemand aan betere tijden zal denken. Maar… in een paar jaar tijd zijn de dingen radicaal veranderd. Je leidt af en even later, vind je de wereld verdrongen door dingen verbonden met het internet…
Verhaal
Op een dag besloot ik mezelf te onderbreken in de vleermuizengrot en rechtstreeks naar mijn geboortestad te gaan om wat zonlicht te krijgen, dus ging ik naar de universiteit om een oude professor te begroeten.
“Ga een koffie drinken!” – zei hij- en we begonnen te kletsen terwijl we door de hoofdgang liepen.
Eenmaal aangekomen…
Ik: “laat me betalen, ik heb munten!”.
Hij: “wacht wacht! Laat me de App van de automaat gebruiken om te betalen, de koffie zal goedkoper zijn”.
BLE + NFC
Brein: “Mmm… Virtuele portefeuilles zijn cool spul…”.
Uitmuntend.
HOT-POT
Ziel: “Ik daag je uit om daar in te hacken!”
~$ White Hat innerlijke stem: “gewoon schouderklopjes als er geen bug bounty beloning is”.
~$ Grey Hat innerlijke stem: “ok, ik doe dat alleen voor educatieve doeleinden”.
~$ Black Hat innerlijke stem: “kom op man, laten we die HEAP naaien, geweldige Jupiter!”.
Later op de dag…
Pwnie express.
ANALYSE
Nadeloos te zeggen dat ik mijn vuile geroot Android-smartphone (met USB Debugging Enabled) heb opgehaald, de beoogde app uit de Play Store heb geïnstalleerd en de originele *.apk via adb.
# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk
Ik heb de *.apk gedecompileerd met apktool
# apktool d ./Argenta.apk -o ./Argenta
en de Java-bronnen uitgepakt met jadx
# jadx ./Argenta.apk
Vooreerst heb ik de *.apk debuggable gemaakt door het AndroidManifest.xml bestand te bewerken door android:debuggable="true"
property toe te voegen aan de application <tag>
Daarna heb ik de *.apk
# apktool b ./Argenta
een nieuwe sleutel gemaakt met keytool
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
ondertekend de *.apk met jarsigner met de gegenereerde sleutel
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta
tot slot heb ik het zip-aligned om het runnable te maken
# zipalign -v 4 Argenta.apk Argenta-signed.apk
en installeerde ik de uiteindelijke *.apk
# adb install ./Argenta-signed.apk
Ik draaide de app op de smartphone en ik begon logs te bekijken met logcat door ze te filteren via de pakketnaam
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`
Niets speciaals gevonden, dus begon ik de broncodes uit te kammen op zoek naar sappige informatie.
Beter kijkend naar AndroidManifest.xml
bestand, vond ik verwijzingen naar RushOrm
Dus, eerste zoekterm was db_name
Cool. Ik startte de Root Explorer op de telefoon op zoek naar argenta.db
Gevonden. Dus haalde ik het naar mijn laptop met adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
en probeerde het te openen met een DB Browser voor SQLite
, was het beveiligd met een wachtwoord
REVERSE-ENGINEERING
Teruggegaan naar de broncodes, gekeken naar RushAndroidConfig.java