











.





@matteo.pisani.91Matteo Pisani
Demontaż zabawek od ’91


„Hitting and kicking” the bundled App of their widest European distribution company.
PREFACE
Indisputably, Vending Machines are objects of cult. Pyszne kąski Hakerów, zawsze. Na początku działały offline tylko z monetami, potem zaczęły się upowszechniać modele NFC – klucze/karty. Jak powiem „COGES” to na pewno komuś przyjdą do głowy lepsze czasy. Ale… W ciągu kilku lat wszystko zmieniło się diametralnie. Rozproszyłeś się i chwilę potem zastałeś świat wyparty przez rzeczy podłączone do internetu…
STORIA
Pewnego dnia postanowiłem przerwać sezonowanie się w bat-jaskini i skierować się do rodzinnego miasta, by zaczerpnąć trochę słońca, więc poszedłem na Uniwersytet, by pozdrowić starego profesora.
„Idź na kawę!” – powiedział- i zaczęliśmy gawędzić idąc głównym korytarzem.
Kiedy dotarliśmy na miejsce…
Ja: „pozwól mi zapłacić, mam monety!”.
On: „czekaj czekaj! pozwól mi użyć aplikacji automatu do płacenia, kawa będzie tańsza”.

BLE + NFC
Mózg: „Mmm… Wirtualne portfele to fajna sprawa…”.
Doskonale.

HOT-POT
Dusza: „Śmiem Ci się w to włamać!”

~$ Wewnętrzny głos Białego Kapelusza: „tylko poklepywanie po ramieniu, jeśli nie będzie nagrody bug bounty”.
~$ Wewnętrzny głos Szarego Kapelusza: „ok, zrobię to tylko w celach edukacyjnych”.
~$ Wewnętrzny głos Czarnego Kapelusza: „c’mon man, let’s screw that HEAP, great Jupiter!”.
Później tego samego dnia…

Pwnie express.

ANALIZA
Nie trzeba dodawać, że podniosłem mój brudny, zrootowany smartfon z Androidem (z włączonym debugowaniem USB), zainstalowałem docelową aplikację ze Sklepu Play i zrzuciłem oryginalną *.apk do mojego laptopa przez adb.
# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk
Dekompilowałem *.apk za pomocą apktool
# apktool d ./Argenta.apk -o ./Argenta
i wyodrębniłem źródła Java za pomocą jadx
# jadx ./Argenta.apk
Po pierwsze, uczyniłem *.apk debuggable poprzez edycję pliku AndroidManifest.xml poprzez dodanie właściwości android:debuggable="true"
do application <tag>

Następnie przebudowałem *.apk
# apktool b ./Argenta
utworzyłem nowy klucz za pomocą keytool
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
podpisałem *.apk z jarsigner używając wygenerowanego klucza
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta
na koniec, zrównałem go zipem, aby można było go uruchomić
# zipalign -v 4 Argenta.apk Argenta-signed.apk
i zainstalowałem ostateczną wersję *.apk
# adb install ./Argenta-signed.apk
Uruchomiłem aplikację na smartfonie i zacząłem przeglądać logi za pomocą logcat, filtrując je przez nazwę pakietu
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`

Nic specjalnego nie znalazłem, więc zacząłem przeczesywać kody źródłowe w poszukiwaniu soczystych informacji.
Spoglądając lepiej na plik AndroidManifest.xml
, znalazłem odniesienia do RushOrm

Więc, pierwszym słowem kluczowym było db_name

Cool. I uruchomił Root Explorer na telefonie szuka argenta.db

Found. Ściągnąłem go więc do laptopa za pomocą adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
i próbowałem otworzyć za pomocą DB Browser dla SQLite

oczywiście, był chroniony hasłem

REVERSE-ENGINEERING
Powróciłem do kodów źródłowych, spojrzałem na RushAndroidConfig.java

gdzie znalazłem metody używane do konfiguracji bazy danych.
Moją uwagę przykuł this.encryptionKey = getDeviceId(context);
Przejrzałem do jego definicji i…

Znalazłem, że docelowa aplikacja używała IMEI telefonu (*#06#)
jako klucza szyfrującego dla bazy danych SQLite.
Abrakadabra.

Boom baby.


Po kilku sekundach oględzin, otworzyłem tabelę UserWallets

i edytowałem pole walletCredit
zapisując zmiany

po czym wypchnąłem bazę danych z pompowanym kredytem z powrotem do telefonu
# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
VERDICT
W międzyczasie, podczas gdy czułem się jak „Robin Hood” (nostalgiczne i wyraźne odniesienie do Age Of Empires cheat code for +1000 gold), stworzyłem narzędzie Android do szybkiego zrzucania/odtwarzania/przerabiania bazy danych docelowej aplikacji w locie.

wróciłem ponownie na mój uniwersytet, aby w końcu przetestować Hack
Drogi pamiętniku…

KONKLUZJA
Z konta z zerowym kredytem, mogłem:
> Napompować kredyt App.
> Kupić rzeczy.
> Zaktualizować pozostały kredyt.
> Wrócić do stanu zerowego kredytu.
> Ponownie napompować kredyt.
> Zacznij od nowa.
Poprzez inspekcję makro wszystkich odwróconych źródeł znalazłem ogromną porcję czystego kodu – bez obfuscacji – który oznaczał brak większych środków zaradczych przyjętych w celu ochrony danych użytkownika i uczynienia aplikacji bezpieczną w ogóle.
Miesiąc temu…
Wewnętrzny głos White Hat we mnie podniósł słuchawkę i zadzwonił do firmy stojącej za tym wstydem, aby zgłosić podatność. Delikatnie zasugerowałem im, aby wyrzucili obecną architekturę i opracowali lepszą i bezpieczniejszą od podstaw.
Hocus bogus.

















Tagi
Załóż darmowe konto, aby odblokować niestandardowe doświadczenie czytelnicze.