






















@matteo.pisani.91Matteo Pisani
Dezasamblarea jucăriilor din ’91


„Lovind și lovind” Aplicația la pachet a celei mai largi companii europene de distribuție a acestora.
PREFAȚA
Indiscutabil, Automatele Vending sunt obiecte de cult. Bucatele delicioase ale Hackerilor, întotdeauna. La început au funcționat offline doar cu monede, apoi, au început să se răspândească modelele NFC- chei/carduri. Dacă spun „COGES”, sunt sigur că cuiva îi vor veni în minte vremuri mai bune. Dar… În câțiva ani lucrurile s-au schimbat radical. Te distragi și, la o clipă după, găsești lumea depășită de lucruri conectate la internet…
STORY
Într-o zi am decis să întrerup asezonarea în bat-caverna și să mă îndrept spre orașul meu natal pentru a lua un pic de soare, așa că m-am dus la Universitate să salut un profesor bătrân.
„Du-te să bei o cafea!” – a spus el- și am început să pălăvrăgim în timp ce mergeam pe coridorul principal.
După ce am ajuns…
Eu: „lasă-mă să plătesc, am monede!”.
El: „stai stai stai! lasă-mă să folosesc aplicația aparatului de vending pentru a plăti, cafeaua va fi mai ieftină”.

BLE + NFC
Creier: „Mmm… Portofelele virtuale sunt niște chestii mișto…”.
Excelent.

HOT-POT
Suflet: „Te provoc să faci Hack în asta!”

~$ Vocea interioară a Pălăriei Albe: „doar bătăi pe umăr dacă nu există recompensă de recompensă pentru bug-uri”.
~$ Vocea interioară a Pălăriei Gri: „ok, voi face asta doar în scop educațional”.
~$ Vocea interioară a Pălăriei Negre: „hai omule, hai să ne-o tragem cu acel HEAP, mare Jupiter!”.
Mai târziu în acea zi…

Pwnie express.

ANALIZĂ
Nu mai e nevoie să spun că mi-am luat smartphone-ul meu Android cu rădăcini murdare (cu USB Debugging Enabled), am instalat aplicația vizată din Play Store și am aruncat originalul *.apk pe laptopul meu prin adb.
# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk
Am descompilat *.apk cu apktool
# apktool d ./Argenta.apk -o ./Argenta
și am extras sursele Java cu jadx
# jadx ./Argenta.apk
În primul rând, am făcut fișierul *.apk depanabil prin editarea fișierului AndroidManifest.xml prin adăugarea proprietății android:debuggable="true"
la application <tag>

Apoi, am reconstruit fișierul *.apk
# apktool b ./Argenta
a creat o nouă cheie cu keytool
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
a semnat fișierul *.apk cu jarsigner folosind cheia generată
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta
în cele din urmă, l-am aliniat prin zip pentru a-l face executabil
# zipalign -v 4 Argenta.apk Argenta-signed.apk
și am instalat fișierul final *.apk
Am rulat aplicația pe smartphone și am început să mă uit la jurnale cu logcat filtrându-le prin numele pachetului său
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`

Nimic special găsit, așa că am început să răscolesc codurile sursă în căutarea unor informații suculente.
Urmărind mai bine în fișierul AndroidManifest.xml
, am găsit referințe la RushOrm

Atunci, primul cuvânt cheie căutat a fost db_name

Cool. Am pornit Root Explorer pe telefon căutând argenta.db

Am găsit. Așa că l-am tras pe laptop cu adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
și am încercat să îl deschid cu un DB Browser pentru SQLite

evident, era protejată prin parolă

REVERSE-ENGINEERING
Am revenit la codurile sursă, m-am uitat la RushAndroidConfig.java

unde am găsit metodele folosite pentru a configura baza de date.
Atenția mea a fost atrasă de this.encryptionKey = getDeviceId(context);
Am trecut la definiția acesteia și…

Am descoperit că aplicația vizată folosea IMEI-ul telefonului (*#06#)
ca cheie de criptare pentru baza de date SQLite.
Abracadabra.

Boom baby.


După câteva secunde de inspecție, am deschis la tabela UserWallets

și am editat câmpul walletCredit
scriind modificările

după care am împins baza de date cu creditul pompat înapoi la telefon
# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
VERDICT
Între timp, în timp ce mă simțeam ca „Robin Hood” (referire nostalgică și explicită la Age Of Empires cheat code pentru +1000 de aur) am dezvoltat un utilitar Android pentru a arunca/restaura/tampona rapid și din mers baza de date a aplicației vizate.

Apoi m-am întors din nou la Universitatea mea pentru a testa în sfârșit Hack-ul
Dragă jurnal…

CONCLUZIE
Din contul cu zero credite, am putut:
>Să umflu creditul aplicației.
> Să cumpăr lucruri.
> Să actualizez creditul rămas.
> Să mă întorc la starea de credit zero.
> Să umflu din nou creditul.
> Începeți din nou.
Cu o inspecție macro a tuturor surselor inversate am găsit o porțiune imensă de cod curat – fără ofuscare – care însemna că nu au fost adoptate mari contramăsuri pentru a proteja datele utilizatorilor și a face aplicația deloc sigură.
Cu o lună în urmă…
Vocea interioară White Hat din mine a pus mâna pe telefon și a sunat compania din spatele acestei rușini pentru a raporta vulnerabilitatea. Le-am sugerat cu blândețe să arunce arhitectura actuală și să dezvolte una mai bună și mai sigură de la zero.
Hocus fals.


















Tags
Creați-vă un cont gratuit pentru a vă debloca experiența de lectură personalizată.