![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
.
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/hn-images/1*SvJB9BAf5EPiCTkVWWC73A.jpeg)
![](https://hackernoon.com/images/avatars/vSoRcyvb6dP2JiCy2a0lFEycpoa2.jpg)
@matteo.pisani.91Matteo Pisani
Demontaż zabawek od ’91
![](https://hackernoon.com/social-icons/linkedin-new.png)
![](https://hackernoon.com/social-icons/twitter-new.png)
„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”.
![](https://hackernoon.com/hn-images/1*0IhRq3VZ_y6UEdXGsFTpWQ.jpeg)
BLE + NFC
Mózg: „Mmm… Wirtualne portfele to fajna sprawa…”.
Doskonale.
![](https://hackernoon.com/hn-images/1*QJ1uHDRH5vpAFUPGNZbslw.gif)
HOT-POT
Dusza: „Śmiem Ci się w to włamać!”
![](https://hackernoon.com/hn-images/1*586-M4hn8bEBfjvuFKgNUg.png)
~$ 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…
![](https://hackernoon.com/hn-images/1*Be-aPV23MfQLWmGE7AhryA.gif)
Pwnie express.
![](https://hackernoon.com/hn-images/1*wfvoRWP0NKRTZKy4UOIqow.jpeg)
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>
![](https://hackernoon.com/hn-images/1*JJUYIStIk9rVRHK8yPSbiw.png)
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`
![](https://hackernoon.com/hn-images/1*UzzfYiAahYkHd3OdQOxoJw.png)
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
![](https://hackernoon.com/hn-images/1*IGvWHhpKc45MTuNp2q_bhg.png)
Więc, pierwszym słowem kluczowym było db_name
![](https://hackernoon.com/hn-images/1*Y5SA6QJZyVVm4s5zn5TdgA.png)
Cool. I uruchomił Root Explorer na telefonie szuka argenta.db
![](https://hackernoon.com/hn-images/1*b57pAUQZPj4c1-2b4EqstQ.png)
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
![](https://hackernoon.com/hn-images/1*Ws7mD6YYW4CJuJcsHEGwnQ.png)
oczywiście, był chroniony hasłem
![](https://hackernoon.com/hn-images/1*JXzmAnMcLoa6jOB-TNFD8A.png)
REVERSE-ENGINEERING
Powróciłem do kodów źródłowych, spojrzałem na RushAndroidConfig.java
![](https://hackernoon.com/hn-images/1*bbEWAWDdaCo6FzOWYgGGQg.png)
gdzie znalazłem metody używane do konfiguracji bazy danych.
Moją uwagę przykuł this.encryptionKey = getDeviceId(context);
Przejrzałem do jego definicji i…
![](https://hackernoon.com/hn-images/1*C3vQ4-ca8Ds1KtdL8CpDlQ.png)
Znalazłem, że docelowa aplikacja używała IMEI telefonu (*#06#)
jako klucza szyfrującego dla bazy danych SQLite.
Abrakadabra.
![](https://hackernoon.com/hn-images/1*8feV_FTZ-xcYEDZZ6uyBVg.png)
Boom baby.
![](https://hackernoon.com/hn-images/1*Ss_BBhXPriPtB1t3igg7Xw.gif)
![](https://hackernoon.com/hn-images/1*md4LFjKE3O2vNVY-JWuHEQ.png)
Po kilku sekundach oględzin, otworzyłem tabelę UserWallets
![](https://hackernoon.com/hn-images/1*xyeVDuV2jqH7BbuQmOT-CA.png)
i edytowałem pole walletCredit
zapisując zmiany
![](https://hackernoon.com/hn-images/1*EymI07rqG_uCa9aBP7ctpQ.png)
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.
![](https://hackernoon.com/hn-images/1*ttBa1pLhrky8dSy-SX4mCA.png)
wróciłem ponownie na mój uniwersytet, aby w końcu przetestować Hack
Drogi pamiętniku…
![](https://hackernoon.com/hn-images/1*tmWKTALK7y43ejTlv5lSbg.jpeg)
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.
![](https://hackernoon.com/hn-images/1*W9tswl9ixLY9TnORLe3dxA.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
Tagi
Załóż darmowe konto, aby odblokować niestandardowe doświadczenie czytelnicze.