Jak zhakowałem nowoczesne automaty vendingowe

author
4 minutes, 15 seconds Read
Originally published by Matteo Pisani on October 10th 2018 192,920 czyta

.

„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

Dołącz do Hacker Noon

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

Similar Posts

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.