| Starije izmjene na obje strane
Starija izmjena
Novija izmjena
|
Starija izmjena
|
racfor_wiki:seminari2025:tt54151 [2026/01/02 23:35] Tea Topolovec [Treći pokušaj] |
racfor_wiki:seminari2025:tt54151 [2026/01/12 20:00] (trenutno) Tea Topolovec [Drugi pokušaj] |
| |
| ==== Prvi pokušaj ==== | ==== Prvi pokušaj ==== |
| Tijekom analize Wolt aplikacije na Android uređaju pregledan je direktorij Android/data/com.wolt.android/, koji sadrži poddirektorije cache, files i testdata. U direktoriju cache pronađena je SQLite baza podataka map_cache.db te je analizirana pomoću alata DB Browser for SQLite. Baza sadrži tablice: pinned_tiles, resources, settings i tiles, no većina zapisa pohranjena je u obliku hash vrijednosti, dok su čitljivi bili samo vremenski zapisi (timestamps). U testdata i files direktorijima nisu pronađeni nikakvi podaci. Dobiveni rezultati ukazuju na to da značajan dio podataka koje aplikacija koristi nije pronađen u direktorijima dostupnim na vanjskoj pohrani, što znači da se ti podaci vjerojatno pohranjuju u zaštićenim dijelovima Android sustava. | Tijekom analize Wolt aplikacije na Android uređaju pregledan je direktorij Android/data/com.wolt.android, koji sadrži poddirektorije cache, files i testdata. U direktoriju cache pronađena je SQLite baza podataka map_cache.db te je analizirana pomoću alata DB Browser for SQLite. Baza sadrži tablice: pinned_tiles, resources, settings i tiles, no većina zapisa pohranjena je u obliku hash vrijednosti, dok su čitljivi bili samo vremenski zapisi (timestamps). U testdata i files direktorijima nisu pronađeni nikakvi podaci. Dobiveni rezultati ukazuju na to da značajan dio podataka koje aplikacija koristi nije pronađen u direktorijima dostupnim na vanjskoj pohrani, što znači da se ti podaci vjerojatno pohranjuju u zaštićenim dijelovima Android sustava. |
| ==== Drugi pokušaj ==== | ==== Drugi pokušaj ==== |
| U drugom pokušaju forenzičke analize Wolt aplikacije korišten je Android Debug Bridge (ADB) kako bi se dobio dublji pristup datotečnom sustavu uređaja i potencijalno dohvatili dodatni podaci. ADB omogućuje izravan pristup datotečnom sustavu mobitela putem shell-a s višim ovlastima, dok korisnik vidi samo ograničeni prostor za pohranu. Nakon omogućavanja USB debugging opcije, uređaj je povezan s računalom i korištene su osnovne ADB naredbe (adb shell, ls, cd) za pregled direktorija Android/data/com.wolt.android/. Pronađeni su isti podaci kao u prvom pokušaju, a izrada sigurnosne kopije naredbom adb backup također nije bila uspješna. Analiza AndroidManifest.xml datoteke u APK Editor Studiju otkrila je razlog neuspješnog backupa: <code>android:allowBackup="false"</code> što onemogućava sigurnosnu kopiju aplikacije putem ADB-a. Dobiveni rezultati potvrđuju da Wolt štiti svoje interne podatke, koji su dostupni isključivo aplikaciji i sustavu, dok vanjski alati bez root pristupa ne mogu pristupiti dodatnim podacima. | U drugom pokušaju forenzičke analize Wolt aplikacije korišten je Android Debug Bridge (ADB) kako bi se dobio dublji pristup datotečnom sustavu uređaja i potencijalno dohvatili dodatni podaci. ADB omogućuje izravan pristup datotečnom sustavu mobitela putem shell-a s višim ovlastima, dok korisnik vidi samo ograničeni prostor za pohranu. Nakon omogućavanja USB debugging opcije, uređaj je povezan s računalom i korištene su osnovne ADB naredbe (adb shell, ls, cd) za pregled direktorija Android/data/com.wolt.android. Pronađeni su isti podaci kao u prvom pokušaju, a izrada sigurnosne kopije naredbom adb backup također nije bila uspješna. Analiza AndroidManifest.xml datoteke u APK Editor Studiju otkrila je razlog neuspješnog backupa: <code>android:allowBackup="false"</code> što onemogućava sigurnosnu kopiju aplikacije putem ADB-a. Dobiveni rezultati potvrđuju da Wolt štiti svoje interne podatke, koji su dostupni isključivo aplikaciji i sustavu, dok vanjski alati bez root pristupa ne mogu pristupiti dodatnim podacima. |
| {{ wolt_manifest.png?650x270 | Datoteka AndroidManifest.xml}} | {{ wolt_manifest.png?650x270 | Datoteka AndroidManifest.xml}} |
| Slika 1: Datoteka AndroidManifest.xml | Slika 1: Datoteka AndroidManifest.xml |
| Pronađena je i baza podataka com.google.android.datatransport.events, koja sadrži tablicu event_metadata. Tablica pohranjuje meta-podatke o uređaju i okruženju u kojem je aplikacija Wolt pokrenuta. Neki od podataka su: država, uređaj, tip mobilne mreže, kod mobilnog operatera, verzija aplikacije, jezik, proizvođač uređaja, tip mreže, verzija OS-a, verzija SDK-a, fingerprint uređaja, model uređaja, vremenska zona, naziv uređaja i podaci o hardveru. Tablica event_metadata povezana je s tablicom events, koja sadrži timestamp događaja i druge relevantne informacije. | Pronađena je i baza podataka com.google.android.datatransport.events, koja sadrži tablicu event_metadata. Tablica pohranjuje meta-podatke o uređaju i okruženju u kojem je aplikacija Wolt pokrenuta. Neki od podataka su: država, uređaj, tip mobilne mreže, kod mobilnog operatera, verzija aplikacije, jezik, proizvođač uređaja, tip mreže, verzija OS-a, verzija SDK-a, fingerprint uređaja, model uređaja, vremenska zona, naziv uređaja i podaci o hardveru. Tablica event_metadata povezana je s tablicom events, koja sadrži timestamp događaja i druge relevantne informacije. |
| {{ wolt_events.png?600 |Tablica event_metadata }} | {{ wolt_events.png?600 |Tablica event_metadata }} |
| Slika 3. Tablica event_metadata | Slika 3. Tablica event_metadata |
| |
| | === Direktorij f === |
| | Od interesantnijih stavki pronađena je datoteka userlog u crashlytics.v3/com.wolt.android/open-sessions, koja sadrži zapise sesije aplikacije generirane tijekom njezina korištenja. Datoteka sadrži zapise komunikacije aplikacije s Wolt backend servisima, uključujući HTTP zahtjeve. Aplikacija dohvaća početnu stranicu i ponudu na temelju trenutne lokacije korisnika, što je vidljivo iz zahtjeva koji sadrže geografske koordinate %%GET https://restaurant-api.wolt.com/v2/notifications?lat=45.8131573&lon=16.0160146%%. Također se provjerava stanje košarice putem zahtjeva za broj artikala u košarici GET %%https://consumer-api.wolt.com/order-xp/v1/baskets/count%%, kao i dohvat korisničkih podataka GET %%https://restaurant-api.wolt.com/v1/user/me%%. Osim osnovnih funkcionalnosti, u logovima su prisutni i zahtjevi vezani uz pretplate, poput dohvaćanja dostupnih Wolt+ planova za određenu državu GET %%https://restaurant-api.wolt.com/v1/subscriptions/plans?device_country_code=HRV%%. |
| |
| | U poddirektoriju wolt_storage/selectedOrderItems pronađena je JSON datoteka koja sadrži popis trenutno dodanih proizvoda u košaricu: |
| | |
| | <code json> |
| | [ |
| | { |
| | "id": "686623fc044fcc1e9f213bd5", |
| | "categoryId": "695511731a83693135f5306f", |
| | "count": 1, |
| | "name": "Big Tasty Bacon", |
| | "endAmount": 0, |
| | "depositAmount": null, |
| | "skipOnRefill": false, |
| | "options": [], |
| | "substitutable": true, |
| | "substitutionComment": null, |
| | "substitutionFor": null, |
| | "weightedItemInfo": null, |
| | "weightConfig": null, |
| | "isCutlery": false, |
| | "currentVariantDescription": null |
| | }, |
| | { |
| | "id": "686623fc044fcc1e9f213be7", |
| | "categoryId": "695511731a83693135f5306f", |
| | "count": 1, |
| | "name": "Chicken McNuggets 9 kom", |
| | "endAmount": 0, |
| | "depositAmount": null, |
| | "skipOnRefill": false, |
| | "options": [ |
| | { |
| | "id": "6944589bc30f641e3c312439", |
| | "name": "Odaberi umak 1/2", |
| | "values": [ |
| | { |
| | "id": "6944589bc30f641e3c31240c", |
| | "name": "", |
| | "count": 1, |
| | "price": 0, |
| | "depositAmount": null |
| | } |
| | ] |
| | }, |
| | { |
| | "id": "6944589bc30f641e3c31243b", |
| | "name": "Odaberi umak 2/2", |
| | "values": [ |
| | { |
| | "id": "6944589bc30f641e3c31240c", |
| | "name": "", |
| | "count": 1, |
| | "price": 0, |
| | "depositAmount": null |
| | } |
| | ] |
| | } |
| | ], |
| | "substitutable": true, |
| | "substitutionComment": null, |
| | "substitutionFor": null, |
| | "weightedItemInfo": null, |
| | "weightConfig": null, |
| | "isCutlery": false, |
| | "currentVariantDescription": null |
| | } |
| | ] |
| | </code> |
| | |
| | |
| | === Direktorij sp === |
| | Datoteka appsflyer-data.xml sadrži zapise vezane uz praćenje korisničkih događaja i sesija putem AppsFlyer analitičkog sustava. Iz nje je vidljivo kada je aplikacija instalirana, koja je zadnja zabilježena korisnička akcija i u koje je vrijeme izvršena, koliko je vremena prošlo od prethodne sesije te na koji je način aplikacija instalirana (npr. organska instalacija). Također su dostupni još brojni podaci. |
| | {{ wolt_appsflyer2.png?600 |Datoteka appsflyer-data.xml }} |
| | Slika 4. Datoteka appsflyer-data.xml |
| | |
| | Datoteka com.google.android.gms.signin.xml sadrži podatke vezane uz prijavu korisnika putem Google računa. Iz zapisa je vidljivo da je Wolt aplikacija koristila Google Sign-In mehanizam te koje su dozvole bile zatražene prilikom prijave, poput pristupa e-mail adresi i osnovnim podacima profila. Datoteka sadrži jedinstveni identifikator Google računa, informacije o dodijeljenim dozvolama, kao i token koji se koristi za autentifikaciju korisnika prema aplikaciji. Također su pohranjeni osnovni podaci o profilu korisnika (ime, prezime, e-mail). |
| | |
| | Datoteka common prefs.xml sadrži zajedničke postavke aplikacije te podatke vezane uz korisničku sesiju i autentifikaciju. Najznačajniji dio čine autentifikacijski tokeni koji se mogu dekodirati pomoću brojnih online alata. Alatom https://www.jwt.io/ dekodiran je token te su dobiveni već spomenuti osobni podaci korisnika, ime, prezime, e-mail adresa, ali ovdje i broj mobitela. |
| | {{ wolt_token.png?600 |Dekodiran token JWT.io alatom }} |
| | Slika 5. Dekodiran token JWT.io alatom |
| | |
| | U direktoriju sp pronađena je datoteka wolt-prefs.xml, koja sadrži osobne podatke i korisničke postavke Wolt aplikacije. Datoteka pohranjuje osnovne informacije o korisniku, uključujući ime i prezime, e-mail adresu, broj telefona, te jedinstveni korisnički ID. Osim identifikacijskih podataka, datoteka sadrži i postavke aplikacije, poput preferirane valute, zadane metode plaćanja, broja izvršenih kupnji, odabrane opcije prijave te povijest pretraživanja. Datoteka wolt-prefs.xml dana je u nastavku: |
| | <code xml> |
| | <?xml version='1.0' encoding='utf-8' standalone='yes' ?> |
| | <map> |
| | <string name="user.name.firstName">Tea</string> |
| | <string name="country">HRV</string> |
| | <set name="neverTranslateMenuLanguages" /> |
| | <string name="user.id">67e91cf4a062d05afcee5ec0</string> |
| | <string name="loginOption">GOOGLE</string> |
| | <boolean name="gcmTokenSentV2" value="true" /> |
| | <boolean name="user.phone_number_verified" value="true" /> |
| | <int name="purchaseCountNonRetail" value="0" /> |
| | <boolean name="dontAskAboutTrackingConsents" value="true" /> |
| | <string name="user.phone_number">+38595569xxxx</string> |
| | <string name="defaultPaymentMethodId">cash</string> |
| | <string name="user.email">tea.topolovec0@gmail.com</string> |
| | <int name="purchaseCountRetail" value="0" /> |
| | <string name="user.name.lastName">Topolovec</string> |
| | <string name="currency">EUR</string> |
| | <boolean name="firstTimeUser" value="true" /> |
| | <set name="searchHistory"> |
| | ††† |
| | <string>mcdonald</string> |
| | ††† |
| | <string>pizza</string> |
| | </set> |
| | <string name="lastUsedLocationId">9e4f589e-1327-40a6-9c12-248e637748fb</string> |
| | <boolean name="requirePaypayReactivation" value="false" /> |
| | </map> |
| | </code> |
| ===== Zaključak ===== | ===== Zaključak ===== |
| | Sigurnosna kopija Wolt aplikacije sa Xiaomi uređaja omogućila je pristup značajno većem broju podataka nego prethodna dva pokušaja. Wolt onemogućava backup putem standardnog ADB pristupa i pohranjuje osjetljive podatke u zaštićenim direktorijima koji zahtijevaju root pristup. Ugrađena funkcija sigurnosne kopije na Xiaomi uređaju ima dovoljno privilegija da omogući dohvat aplikacijskih podataka bez potrebe za root pristupom. |
| | |
| | Analizom datoteka moguće je identificirati korisničke sesije, autentifikacijske tokene, osobne podatke te dijelove aktivnosti unutar aplikacije, poput stavki u košarici, povijesti pretraživanja i logova zahtjeva prema Wolt API-ju. Iako cjelovita povijest svih prošlih narudžbi nije bila dostupna, vjerojatno zbog pohrane na serverima Wolt-a, kombinacijom lokalno pohranjenih podataka i logova može se rekonstruirati nedavna aktivnost korisnika. Nijedan podatak o plaćanjima ili financijskim transakcijama nije bio dostupan, a bilo bi zanimljivo vidjeti i kako aplikacija izgleda iz perspektive dostavljača te kakve forenzičke tragove ona ostavlja. |
| |
| ===== Literatura ===== | ===== Literatura ===== |
| [1] [[https://explore.wolt.com/en/hrv/about|About - Wolt]] | [1] [[https://explore.wolt.com/en/hrv/about|About - Wolt, pristupljeno 29. prosinca 2025.]] |
| | |
| | [2] [[https://life.wolt.com/en/hrv/moments/10-years/customer-stories|10 years, 700 million customer orders, pristupljeno 29. prosinca 2025.]] |
| |
| [2] [[https://life.wolt.com/en/hrv/moments/10-years/customer-stories|10 years, 700 million customer orders]] | [3] [[https://www.youtube.com/watch?v=1xEyE3YZveE| |
| | Install ADB, Fastboot & Fastbootd Drivers on Windows, pristupljeno 30. prosinca 2025.]] |
| |
| [3] [[http://www.cogtech.usc.edu/publications/kirschner_Sweller_Clark.pdf|Kirschner, P. A, Sweller, J. and Clark, R. E. Why minimal guidance during instruction does not work: An analysis of the failure of constructivist, discovery, problem-based, experiential, and inquiry-based teaching. Educational psychologist 41, no. 2, pp 75-86, 2006]] | [4] [[https://www.youtube.com/watch?v=BPphrGBiAV0| |
| | How to Backup and Restore App and Data via ADB, pristupljeno 30. prosinca 2025.]] |
| |
| |