MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY

Podvrhnutie polohy v OS Android

BAKALÁRSKA PRÁCA

Laura Barcziová

Brno, jar 2021

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY

Podvrhnutie polohy v OS Android

BAKALÁRSKA PRÁCA

Laura Barcziová

Brno, jar 2021

Na tomto mieste sa v tlačenej práci nachádza oficiálne podpísané zadanie práce a vyhlásenie autora školského diela.

Vyhlásenie

Vyhlasujem, že táto bakalárska práca je mojím pôvodným autorským dielom, ktoré som vypracovala samostatne. Všetky zdroje, pramene a literatúru, ktoré som pri vypracovaní používala alebo z nich čerpala, v práci riadne citujem s uvedením úplného odkazu na príslušný zdroj.

Laura Barcziová

Vedúci práce: Ing. Mgr. et Mgr. Zdeněk Říha, Ph.D.

i

Poďakovanie

Rada by som sa poďakovala svojmu vedúcemu Zdeňkovi Říhovi za jeho dobré rady, nápady čas a vedenie pri písaní práce.

m Zhrnutie

Táto práca sa zaoberá polohou a jej podvrhovaním v operačnom sys­ téme Android. Opisuje spôsoby získavania polohy a dostupné mož­ nosti pre falšovanie polohy a predstavuje modifikáciu operačného systému, ktorej úlohou je poskytnúť funkcionalitu pre dôveryhodné podvrhovanie polohy. Cieľom bolo v modifikovanom systéme vytvoriť aplikáciu, v ktorej bude možné riadiť polohu. Taktiež opisuje imple­ mentovaný detektor podvrhnutia polohy a metódy detekcie.

iv Kľúčové slová poloha, podvrhovanie, Android, GNSS, detekcia

v

Obsah

1 Úvod 1

2 Možnosti získania polohy v Android OS 3 2.1 Povolenia 3 2.2 Zdroje pre získanie polohy 3 2.2.1 GNSS 3 2.2.2 Mobilné služby 6 2.2.3 WiFi 8 2.2.4 Bluetooth 10 2.2.5 Zlúčená poloha (fused location) 12

3 Aktuálne možnosti podvrhnutia polohy 15 3.1 Aplikácie využívajúce testovacieho poskytovateľa polohy 15 3.2 Aplikácie využívajúce VPN 18

4 Implementácia 21 4.1 Vytvorenie Android custom ROM a aplikácie pre pod- vrhovanie polohy 21 4.1.1 Upravenie Android OS 22 4.1.2 Vytvorenie systémovej aplikácie 25 4.1.3 Zostavenie 28 4.2 Detektor podvrhnuté]' polohy 31 4.2.1 CompareLocationsActivity 31 4.2.2 AnalyzeLocationActivity 32

5 Záver 35

Bibliografia 37

vii

Zoznam obrázkov

2.1 Architektúra Androidu - spomínané vrstvy OS [6] 4 2.2 Možnosť získania polohy na základe signálov z Bluetooth beacons [29] 12 3.1 Upozornenie o potrebe zapnutia nastavení Mock locations 16 3.2 Nastavenie Mock locations v starších a novších verziách Androidu 16 3.3 Ukážka funkcionality dostupných aplikácií 18 4.1 Triedy využívané pri podvrhovaní GNSS polohy 23 4.2 Triedy využívané pri podvrhovaní polohy v mobilnej sieti 24 4.3 Triedy využívané pri podvrhovaní WiFi skenu 25 4.4 EXIF metadata pri zapnutí Hide location a po vypnutí 27 4.5 Ukážka Main Activity, GetLocationActivity a notifikácie o podvrhovaní 28 4.6 Časť výstupu príkazu f astboot flashall -w 30 4.7 Ukážka funkcionality detektoru 33

ix

1 Úvod

Mobilné zariadenia poskytujú možnosť lokalizácie, ktorá ponúka ši­ roké spektrum spôsobov využitia, ako sú navigačné systémy, aplikácie na zdieľanie polohy medzi priateľmi a rodinou, zaznamenávanie trás pri športových aktivitách alebo aj aplikácie na spoznávanie nových ľudí, ktoré vyhľadávajú dostupné zariadenia vo vašom okolí. V sú­ časnej pandemickej situácii poskytla lokalizácia telefónu efektívny spôsob, ako sledovať pohyb jedinca v povinnej karanténe. Príkladom na Slovensku bola aplikácia eKaranténa, ktorú človek mohol využiť, ak cestoval zo zahraničia a namiesto povinnej karantény v štátnom zariadení ju mohol stráviť v domácej izolácii, za predpokladu stiahnu­ tia a využívania tejto aplikácie, ktorá následne monitorovala pohyb jedinca [1]. V súčasnosti však už takmer každá aplikácia vyžaduje povolenie na používanie polohy. Toto povolenie vyžadujú aj aplikácie, ktoré zdanlivo nemajú s polohou nič spoločné. Prístup k polohe je napríklad využitý, aby nám telefón poskytoval relevantné reklamy v závislosti od toho, kde sa práve nachádzame. Poloha je však citlivý údaj a môže byť ľahko zneužitá. Je dôležité mať prehľad o tom, ktoré aplikácie ju používajú a ako. Cieľom mojej práce je zistiť, akými spôsobmi je v dnešnej dobe možné v Android zariadení získať polohu a porovnať, ako je možné podvrhovať falošnú. Ďalej chcem nadviazať na magisterskú prácu z roku 2015, Služby zjišťování polohy [2], a modifikovať priamo ope­ račný systém pre moje zariadenie tak, aby poskytovalo funkcionalitu pre podvrhovanie polohy v nižších vrstvách operačného systému. Na základe tejto funkcionality ďalej vytvorím natívnu aplikáciu, v kto­ rej bude možné plne riadiť podvrhovanie polohy s prvkami, aké po­ skytujú napríklad aplikácie dostupné v Store. Chcem vylepšiť, akým spôsobom je GNSS poloha podvrhovaná a dosiahnuť, aby podvrhovanie nebolo detekovateľné a teda oklamalo aj pokročilej­ šie aplikácie, preto bude aplikácia umožňovať napríklad periodické nastavovanie GNSS polohy. Na záver vytvorím jednoduchý detektor, ktorý má byť schopný detekovat falšovanie polohy, napr. pri využití voľne dostupných aplikácií. Detektor poskytuje viacero druhov kon-

1 i. ÚVOD troly ako porovnanie polôh z viacerých zdrojov, analyzovanie objektu reprezentujúceho polohu alebo nainštalovaných aplikácií. V nasledujúcej kapitole popisujem, ako funguje spravovanie po­ lohy v operačnom systéme Android a venujem sa priamym aj nepria­ mym možnostiam jej získavania. V ďalšej kapitole analyzujem existu­ júce možnosti podvrhovania polohy a porovnávam dostupné aplikácie a výhody a nevýhody použitých metód. Ďalej opisujem proces mo­ difikácie operačného systému a vývoja aplikácie pre podvrhovanie polohy a takisto implementáciu vytvoreného detektoru pre detekciu falšovania polohy. V závere mojej práce zhrniem výsledky analýz, úspešnosť modifikácie operačného systému s aplikáciou pre podvr­ hovanie a taktiež implementáciu detektoru a jeho možnosti ďalšieho využitia.

2 2 Možnosti získania polohy v Android OS

V Android OS je viacero možností, ako získať polohu zariadenia. Zdrojový kód Androidu = AOSP (Android Project) je verejne dostupný a poskytuje balíky ako android, location, an­ droid, net. wif i, android.telephony, android.bluetooth, ktoré majú priamy či nepriamy prístup k polohe. Poloha môže byť získa­ vaná pomocou GNSS (Global National Navigating System), vysielania a prijímania Bluetooth signálov, mobilnou sieťou alebo WiFi (Wireless Fidelity). Pre prácu s agregovanou alebo zlúčenou polohou (polohou vypočítanou z viacerých zdrojov) je možné použiť Google Location Services API, ktoré získava polohu s ohľadom na viacero zdrojov a senzorov.

2.1 Povolenia

Aplikácie v Android OS môžu pre lokalizovanie zariadenia vyžadovať 2 typy povolení[3]:

• android.permission. ACCESS_COARSE_LOCATION - povolenie pre používanie WiFi a mobilnej siete na získanie polohy, menej presné,

• android.permission. ACCESS_FINE_LOCATION - povolenie pre použitie všetkých dostupných zdrojov, ako napr. GNSS, na získanie presnej polohy.

2.2 Zdroje pre získanie polohy

2.2.1 GNSS

GNSS (Global Navigation Satellite System) je súbor satelitov po­ skytujúcich signály obsahujúce lokalizačné dáta prijímačom GNSS, ktoré na základe týchto dát rozhodujú o polohe. GNSS poskytuje ce­ losvetové pokrytie a využíva americký Global Positioning System (GPS), ruský Globaľnaya Navigatsionnaya Sputnikovaya Sistema (GLONASS), európsky Galileo a čínsky BeiDou [4].

3 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS

Tento zdroj pre získanie polohy je však menej presný vo vnútor­ ných priestoroch. Poloha je v zariadení zisťovaná prostredníctvom GNSS čipu, ktorý je súčasťou hardvéru zariadenia. Ten zachytáva sig­ nály zo satelitov a tak získava satelitné dáta. Pri ideálnych podmien­ kach je odchýlka takejto polohy od reálnej polohy do niekoľkých met­ rov. Čip na základe dát vypočíta polohu a posúva ju vyšším vrstvám. Čip má v jadre Androidu svoj ovládač a ten sprostredkuje komuniká­ ciu OS s hardvérom. Vo vrsrtve HAL (Hardware Abstraction Layer) sú zadefinované funkcie, napr. callback gnssLocationCb(GnssLocation location) [5], a tie musí dané zariadenie implementovat a to umož­ ňuje mať viacero výrobcov. Ďalej sa v súbore com_android_server_- location_GnssLocationProvider. cpp nachádza mapovanie funkcií z HAL na metódy vo vrstve System Services dostupné v triede Gnss- LocationProvider, ktorá implementuje poskytovateľa GNSS polohy a vysiela aktualizácie polohy pomocou metódy reportLocation.

APPLICATION FRAMEWORK

ANDROID SYSTEM SERVICES

AudioFlinger Search Service

Camera Service Activity Manager

MediaPlayer Service Window Manager

Other System Services Other Media Services & Managers

' J .' Driver Display Drivers (ALSA,0SS,e1c.) Other Drivers

Obr. 2.1: Architektúra Androidu - spomínané vrstvy OS [6] 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS

Od verzie Android >= 7 je taktiež možné získavať výpočty priamo z GNSS čipu, ktoré sú reprezentované triedou GnssMeasurement. V zá­ vislosti od konkrétneho zariadenia môžu tieto dáta obsahovať navi­ gačné správy, pseudovzdialenosť a ďalšie [7]. Ďalej od verzie Android >= 11 je možnosť využiť pre upresnenie polohy aj charakteristiky antény. Balíček android. location umožňuje prístup k polohe zariadenia. Po vytvorení inštancie LocationListener a implementovaní metódy onLocationChanged dostávame správy o zmene polohy vyvolané me­ tódou reportLocation. Pre získavanie GNSS polohy použijeme zmeny polohy poskytovateľa LocationManager. GPS_PROVIDER. Okrem tohto poskytovateľa polohy je možné prostredníctvom balíka získavať aj po­ lohu od sieťového poskytovateľa, ktorý používa dáta z mobilnej siete, WiFi alebo Bluetooth, čo popíšem v ďalších sekciách. Tento balíček vytvára teda API pre komunikáciu so systémovými lokalizačnými službami. Nachádzajú sa v ňom nasledujúce triedy a rozhrania [8]:

LocationManager Poskytuje prístup k lokalizačným službám daného zariadenia, umožňuje získavať polohu. Metódou requestLoca- tionUpdates() sa registruje na prijímanie zmien polohy pro­ stredníctvom LocationListener inštancie. Pre okamžité získa­ nie polohy je možné využiť metódu getLastKnownLocationO, ktorá poskytuje informácie o posledne získanej polohe.

LocationListener Rozhranie pre prijímanie aktualizácií polohy zaria­ denia.

LocationProvider Poskytovateľpolohy, poskytuje aktualizácie polohy. Medzi hlavné patrí GPS_PROVIDER, NETWORK_PROVIDER, ktoré boli spomenuté vyššie a PASSIVE_PROVIDER. Ten si ukladá polohu z predošlých dvoch, ak o ňu nejaká aplikácia požiada.

Location Reprezentuje geografickú polohu, ukladá si informácie o geo­ grafickej šírke, dĺžke, čase a dodatočné atribúty ako nadmorská výška, rýchlosť, presnosť.

GnssMeasurement Reprezentuje výpočet z GNSS satelitu.

5 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS

GnssStatus Reprezentuje stav GNSS zariadenia. Poskytuje metody na získanie počtu satelitov, zistenie typu vybraného satelitu. Používa sa súbežne s GnssStatus . Callback.

GnssStatus.Callback Prostredníctvom neho monitorujeme zmeny stavu GnssStatus.

Gnss Antenalnf o Poskytuje informácie, ktoré je možné využiť k upres­ neniu výpočtov polohy, o anténe.

V Android dokumentácii balíka android. location [8] je odporú­ čané používať novšie Google Location Services API, ktoré sa nachádza v com. google. android. gms . location a je diskutované v sekcii 2.2.5.

EXIF

EXIF (Exchangeable image file formát) sú metadáta uložené v me­ diálnych súboroch zaznamenaných fotoaparátom zariadenia, teda napr. súboroch typov JPEG a TIFF. Obsahujú detaily o type fotoapa­ rátu a ďalšie podrobnosti, napr. expozícia, ISO, orientácia a v Android zariadeniach aj GNSS poloha [9]. Pri prvom použití fotoaparátu si fo­ toaparát vyžiada súhlas na ukladanie polohy a od tej chvíle obsahujú zosnímané fotografie túto informáciu. Balíček android. media poskytuje rozhranie Exif Interface, pro­ stredníctvom ktorého sa dajú čítať a zapisovať EXIF dáta. Prístup k ze­ mepisnej šírke a dĺžke sprostredkujú tagy TAG_GPS_LATITUDE a TAG_- GPS_LONGITUDE [10].

2.2.2 Mobilné služby

Polohu zariadenia je možné zistiť aj použitím mobilných sietí. Mobilná sieť je rádiová sieť, ktorá pokrýva oblasti nazývané bunky (cells), pri­ čom každá bunka má svoju základňovú stanicu (Base Station). Stanice sú umiestňované napr. na stožiaroch tak, aby bola pokrytá celá sieť. Základňová stanica sa stará o generovanie signálov a pripájanie mo­ bilných zariadení do siete [11]. V závislosti od konkrétneho typu siete sa líši aj získavanie polohy. Na lokalizovanie zariadenia sa využívajú napr. v GSM sieti 4 parametre [12]:

6 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS

• MCC - Mobile Country Code, identifikuje krajinu (napr. Sloven­ sko - 231, Česko - 230),

• MNC - Mobile Network Code, identifikuje mobilný operátor,

• LAC - Location Area Code, unikátny identifikátor oblasti Loca- tion Area,

• CellID - unikátny identifikátor základňovej stanice alebo jej sek­ toru.

Potom v databázach, v ktorých sa nachádzajú geografické polohy sta­ níc, zadaním MCC, MNC, LAC a CID je možné získať súradnice ich polôh. Jednou z najznámejších a najrozsiahlejších databáz je Open- Cellld [13]. Funguje na základe obrovskej komunity prispievateľov. Google si vytvára vlastné databázy s týmito polohami a tie využíva pri získavaní sieťovej polohy, ktorá je sprístupnená prostredníctvom LocationManager.NETW0RK_PR0VIDER [14]. V balíku android. telephony je dostupná funkcionalita pre správu mobilných služieb umožňujúca prístup k stavu zariadenia, pripojeniu k mobilnej sieti alebo podrobným informáciám o sieti [15]:

Cellldentity Abstraktná trieda pre reprezentáciu identity bunky, de­ dia z nej triedy ako CellIdentityGsm, CellIdentityLte (v závis­ losti na použití konkrétnej sieťovej technológie), v prípade CellI­ dentityGsm obsahuje atribúty reprezentujúce MCC, MNC, LAC, CID.

Celllnfo Abstraktná trieda pre reprezentáciu informácií o bunke, ta­ kisto z nej dedia pre napr. CellfnfoCdma, CellfnfoGsm, obsahuje atribút typu Cellldentity.

CellLocation Abstraktná trieda reprezentujúca polohu bunky zaria­ denia v sieti. Poskytuje metódu requestLocationUpdate (), ktorá požaduje aktualizáciu tejto polohy. Pri zmene polohy je potom poslaný callback pre všetkých počúvajúcich na zmeny polohy LISTEN_CELL_L0CATI0N prostredníctvom PhoneStateListener inštancie. Dedia z nej 2 triedy:

7 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS

1. GsmCellLocation - na lokalizovanie sa využívajú metódy getLac (), getCid (). Prostredníctvom týchto údajov a úda­ jov MNC, MCC, ktoré sa dajú získať volaním getNetwor- kOperatorO triedy TelephonyManager, je možné využitím databáz získať zemepisné súradnice polohy. 2. CdmaCellLocation - na lokalizovanie sa využívajú metódy getBaseStationLatitude(),getBaseStationLongitude(). Súradnice sú prístupné priamo.

TelephonyManager Umožňuje správu mobilnej siete. Ponúka me­ tódy getCellLocationO , getAUCellInf o(), ktoré umožňujú priamo alebo nepriamo získať polohu na základe okolitých bu­ niek.

TelephonyScanManager Spravuje žiadosti a callbacky k prístupu k mobilnej rádiovej sieti.

PhoneStateListener Monitoruje zmeny stavu zariadenia, mobilnej siete, signálu, ale aj zmenu polohy na základe mobilnej siete pro­ stredníctvom onCellLocationChanged(CellLocation location) Pre počúvanie na zmeny polohy bunky je potrebné mať zaregis­ trované LISTEN_CELL_LOCATION, ktoré vyžaduje povolenie ACCESS_FINE_LOCATION.

RIL

RIL (Rádio Interface Layer) je vrstva sprostredkujúca komunikáciu medzi android. telephony a rádiovým hardvérom. Skladá sa z 2 kom­ ponent: RIL Deamon - komunikuje s mobilnými službami a vysiela vyžiadané príkazy Vendor RILu - je špecifický pre daný hardvér a vy­ siela nevyžiadané príkazy RIL Deamonu [16]. Definície funkcií, ktoré musí Vendor RIL implementovat' sa nachádzajú v súbore ril. h - tu sa nachádza napr. definícia štruktúr pre Cell Identity (RIL_CellIdenti- tyGsm) [17].

2.2.3 WiFi

Ďalším zdrojom pre lokalizáciu zariadenia sú dostupné WiFi siete. WiFi (Wireless Fidelity) je bezdrôtová technológia navrhnutá tak, aby

8 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS poskytovala možnosť elektrickým zariadeniam pripojiť sa na bezdrô­ tovú lokálnu sieť (LAN). WiFi sieť sa skladá z prístupových bodov. Používa rádiové signály na poskytnutie prístupu k internetu [18]. WiFi sa v Android OS takisto ako mobilné siete využíva na získavanie sieťovej polohy. Prostredníctvom Wif iManager API je možné získať informácie o do­ stupných WiFi bodoch v okolí zariadenia. Informácie o dostupných WiFi sa získavajú pomocou skenovania. Posledne aktualizované dáta sa získajú volaním getScanResults (). Pre vyžiadanie nového skeno­ vania sa používa metóda startScanO. Taktiež sa dá vytvoriť inštan­ cia BroadcastReceiver, ktorá pri zaregistrovaní SCAN_RESULTS_AVAI- LABLE_ACTION bude počúvať na zmeny WiFi. Na volanie týchto metód je potrebné mať špecifické povolenia súvisiace s polohou, požiadavky na ne sa menia v závislosti od verzie Androidu. Balíček android.net .wif i sprístupňuje možnosti pre správu WiFi [19] :

WifiManager Poskytuje API pre prácu s WiFi - umožňuje napr. zís­ kať dostupné siete, výsledky skenovania prístupových bodov, rozhodovať sa, ku ktorému prístupovému bodu sa pripojiť.

Wifilnfo Poskytuje informácie o WiFi bode umožňujúce lokalizovať zariadenia. Obsahuje napr. informácie ako BSSID, SSID, IP ad­ resu.

BSSID, SSID

Každý prístupový bod WiFi má unikátny identifikátor BSSID (známy ako MAC adresa prístupového bodu), ktorý pravidelne vysiela a os­ tatné zariadenie môžu túto informáciu zachytávať [20]. Prostredníc­ tvom Wifilnfo je možné získať identifikátory BSSID (Basic Service Set identifier) a SSID (Service Set identifier, názov siete) volaním getBSSID (), getSSID O na objekte Wif i Inf o. Aplikácie majúce prístup k polohe a identifikátorom SSID a BSSID sú schopné tieto informácie zhromažďovať vo verejne dostupných databázach. Znalosťou SSID alebo BSSID je potom využitím takýchto databáz ľahko možné získať polohu zariadenia. Najznámejšími verejnými databázami sú napríklad Location Service [21] alebo Combain Positioning Service [22],

9 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS ktoré zhromažďujú takisto informácie o staniciach v mobilnej sieti a Bluetooth beacons zariadeniach, ktoré popíšem nižšie.

IP ADRESY

Každé zariadenie pripojené k internetu má svojim poskytovateľom internetu priradenú svoju IP adresu, vďaka ktorej sa identifikuje v sieti. IP adresa je unikátny číselný identifikátor, pomocou ktorého sú zaria­ denia schopné v sieti komunikovať. Poloha sa získava znova prostred­ níctvom databáz, ktoré mapujú IP adresy na zemepisné súradnice. Táto poloha je zväčša menej presná, závisí to od použitia jednotlivých databáz. IP adresa je verejná, teda viditeľná na každom serveri. IP adresu je možné získať využitím metód Wif iManager triedy volaním getlpAddressO na objekte Wif ilnf o, získavame tak ale našu lokálnu IP adresu, teda napr. pri využití NAT (Network address translation), kedy sa adresy z lokálnej siete preložia na verejnú adresu vrámci inter­ netu, nezískame adresu, ktorú vidia ostatné servery. Túto adresu však je možné zistiť napr. využitím nejakého API. Tých je dostupných veľa a poskytujú aj rôzne ďalšie informácie, ako priamo krajina, kraj, po­ skytovatel' internetu, časové pásmo, na základe IP adresy. Príkladom sú IPWHOIS [23] alebo Big Data Cloud API [24].

ULOŽENÉ SIETE WIFI

Informácie o WiFi sietiach ako SSID a heslá sa v zariadeniach ukla­ dajú v súbore /data/misc/wif i/wpa_supplicant. conf alebo v zaria­ deniach s Android verziou >= 8 v súbore /data/misc/wif i/Wif iCon- f igStore. xml. K týmto súborom je možné pristupovať iba s právami superužívateľa. Takto sa dá zistiť história využívaných sietí.

2.2.4 Bluetooth

Bluetooth je technológia, ktorá umožňuje bezdrôtovú výmenu dát medzi zariadeniami na krátke vzdialenosti, založená na princípe rádi­ ových vín. Operuje na frekvencii 2,4 GHz [25]. Pre výmenu dát medzi zariadeniami musia byť tieto zariadenia tzv. spárované. Android API pre Bluetooth umožňuje skenovať zariadenia, prepá­ jať ich, odosielať a prijímať dáta a spravovať prepojenia. Pre používa­ lo 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS nie Bluetoothu je potrebné povoliť ACCESS_FINE_LOCATION, nakoľko Bluetooth skenovanie umožňuje získať informácie o polohe zariade­ nia. Toto môže byť sprostredkované využitím tzv. Bluetooth beacons, hardvérových zariadení vysielajúcich svoj identifikátor okolitým zaria­ deniam [26]. Tieto zariadenia sa využívajú najmä v získavaní polohy vnútri. Balíček android.bluetooth sprístupňuje funkcionalitu pre prácu s Bluetooth [27] :

BluetoothManager Volaním metódy tejto triedy get Adapter O zís­ kavame inštanciu BluetoothAdapter.

BluetoothAdapter Slúži na komunikáciu. Poskytuje napr. metódy getBondedDevicesO - vracia spárované zariadenia.

BluetoothDevice Reprezentuje nájdené zariadenie, má v sebe infor­ mácie o zariadení, napr. MAC adresu získavame volaním ge- tAddressO.

BLE - Bluetooth Low Energy

Pre Bluetooth zariadenia majúce nižšie požiadavky na výkon sa v An- droide OS dá využiť Bluetooth Low Energy, ktorý bol navrhnutý na podporu IoT, teda internetu vecí. Vysielače BLE, zariadenia "bea­ cons", sú zväčša malé, ľahko umiestniteľné, nenáročné na spotrebu batérie a prostredníctvom nich sa dá získať pomerne presná poloha, pre čo sa najviac využívajú v získavaní polohy vo vnútorných priesto­ roch. Poloha BLE beacons je stála, sú umiestňované napríklad na steny, stropy a iné objekty, odkiaľ periodicky vysielajú signály, ktoré môžu mobilné zariadenia prijímať [26]. Následne je viac možností, ako po­ tom získať geografickú polohu. Pri získaní signálu z viac ako jedného zariadenia je možné zistiť polohu na základe hodnôt Received Signál Strenght Indicator (RSSI), ktoré opisujú intenzitu signálov a na zá­ klade intenzít sa odhaduje vzájomná vzdialenosť beacons a zariade­ nia^]. Keď chceme Android zariadenie pripojiť k iným perifériám pomo­ cou Bluetoothu, spustí sa najprv skenovanie na zistenie unikátneho identifikátora periférie. Pri prijatí callbacku onScanResult získavame inštanciu ScanResult, teda objekt výsledku skenovania. Ten poskytuje

11 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS referenciu na BluetoothDevice, ktorý zodpovedá nájdenej periférii. Každé zariadenie používajúce Bluetooth má pridelenú svoju unikátnu MAC adresu, vďaka ktorej je identifikovateľné. Na základe nej a zna­ losti polohy periférie je možné Android zariadenie lokalizovať.

Obr. 2.2: Možnosť získania polohy na základe signálov z Bluetooth beacons [29]

Balíček android. bluet ooth. le sprístupňuje funkcionalitu pre prácu s BLE [30] :

BluetoothLeScanner Umožňuje skenovanie BLE zariadení. Získame ho volaním getBluetoothLeScanner () na objekte BluetoothA- dapter.

ScanResult Reprezentuje výsledok skenovania, zahŕňa ScanRecord a BluetoothDevice.

ScanRecord Reprezentuje záznam BLE skenovania.

2.2.5 Zlúčená poloha (fused location) Google ponúka API na získanie polohy s ohľadom na viacero zdrojov. Google Location Services API poskytlo nové možnosti ako detekciu ak­ tivity (bicykel, pešo, auto, lietadlo), Geofencing - možnosť vytvárania virtuálnej oblasti a monitorovania na základe polohy a taktiež by malo poskytovať najpresnejšiu polohu zariadenia na základe požiadavok užívateľa a ďalších faktorov, ako je stav batérie. Pristupuje k dátam z viacerých senzorov.

12 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS

Táto funkcionalita sa nachádza v balíku com.google.android.- gms .location, ktorý už bol spomenutý v sekcii GNSS. Je vyvíjaný Googlom a nie je súčasťou zdrojového kódu Androidu, je licencovaný inak a je closed source, teda jeho zdrojový kód nie je verejne dostupný. Zahŕňa tieto triedy a rozhrania poskytujúce prístup k polohe [31]:

FusedLocationProviderClient Rozhranie slúžiace na interakciu s po- skytovateľom zlúčenej polohy, poskytuje napríklad metódy get- LastLocationO pre získanie posledne uloženej polohy a get- CurrentLocation(int priority, CancellationToken token) pre vyžiadanie aktuálnej polohy.

LocationCallback Prijíma správy o dostupnosti a zmene polohy.

LocationListener Rozhranie pre prijímanie aktualizácií polohy.

LocationRequest Obsahuje parametre požiadavky pre FusedLocati- onProviderApi ako napríklad počet aktualizácií polohy, trvanie požiadavky, interval aktívnych aktualizácií polohy alebo prioritu požiadavky.

LocationResult Reprezentuje geografickú polohu získanú z poskyto- vateľa zlúčenej polohy. Objekt tejto triedy získame prostredníc­ tvom callbacku onLocationResult(LocationResult result),vo­ laním getLocations () získame všetky geografické polohy roz­ triedené od najstaršej a getLastLocationQ najnovšiu.

13

3 Aktuálne možnosti podvrhnutia polohy

V tejto kapitole sa zameriam na konkrétne možnosti, ako je momen­ tálne možné podvrhovať polohu. V súvislosti so súčasnou pandemic­ kou situáciou a obmedzovaním pohybu je možné nájsť mnoho postu­ pov opisujúcich, ako zamedziť sledovaniu polohy Android zariadení. Tieto postupy predovšetkým propagujú rôzne aplikácie v Google Play Store (napr. Fake GPS Location [32]), ktoré majú podvrhovať falošnú, užívateľom zadanú, polohu. Tieto aplikácie otestujem a popíšem ich funkcionalitu a prípadné nedostatky.

3.1 Aplikácie využívajúce testovacieho poskytovateľa polohy

V Android OS sa dá v nastaveniach odomknúť sekcia Pre vývojárov (Developer options), ktorá sprístupňuje možnosti pre vývojárov na tes­ tovanie, ladenie, modifikácie a pokročilejšie prispôsobenia. Aplikácie podvrhujúce polohu fungujú zväčša vďaka možnosti nastavenia testo­ vacieho poskytovateľa polohy, ktorého je možné využívať prostredníc­ tvom týchto pokročilých nastavení. Aplikácie teda pracujú s najvyššou vrstvou, využívajú metódy triedy LocationManager z balíka android. location [8]: addTestProvider vytvára a pridáva testovacieho poskytovateľa po­ lohy medzi dostupných poskytovateľov, setTestProviderEnabled nastavuje testovacieho poskytovateľa polohy na aktívny/neaktívny, removeTestProvider odstraňuje testovacieho poskytovateľa polohy, setTestProviderLocation nastavuje polohu testovacieho poskytova­ teľa polohy.

Podvrhovanie polohy týmto spôsobom prebieha tak, že sa vytvorí testovací poskytovatel'polohy. Ak je to jeden z reálnych poskytovateľov (napr. GPS), tak sa pôvodný odstráni. Potom sa testovací poskytova­ tel' nastaví na aktívny a je možné nastavovať prostredníctvom neho

15 3- AKTUÁLNE MOŽNOSTI POD VRHNUTI A POLOHY polohu, ktorú užívateľ chce. Pri nastavení sa zavolá metóda report- Location, ktorá vyvolá zaslanie novej polohy všetkým, čo na zmenu polohy počúvajú. Pri odstránení testovacieho poskytovateľa polohy, ak nahradzoval reálneho poskytovateľa, sa znova pridá reálny posky­ tovatel'polohy a zariadenie by malo znova prijímať reálne aktualizácie polohy z toho poskytovateľa.

Obr. 3.1: Upozornenie o potrebe zapnutia nastavení Mock locations

Htals nbout running processes

Revoke USB debugging authorisations Select application DEBUGGING

USB debugging Nothing Debugging mode launches when USB is i power menu for connected, • Fake GPS Revoke USB debugging authorizations eňnriJexa.fakedřps Select mock location app NŮ muck location app set Include bug reports in power menu .—, FakeGPS Free Incfudeopltwi in power menu for laking a bug | corti-iľicoľpuiaieapps fakeg, report Enable view attribute inspection

Allow mack locations ^ Parallel Space iors Allow mock locations. f=C> • Select debug app No debug application set Select app to be debugged No application set to be debugged Wait for debugger

Wait for debugger

Obr. 3.2: Nastavenie Mock locations v starších a novších verziách Androidu

16 3- AKTUÁLNE MOŽNOSTI PODVRHNUTI A POLOHY

Nevýhodou je, že nastavenie testovacieho poskytovateľa je dete- kovateľné a pokročilejšie aplikácie robia túto detekciu. Nastavenie testovacieho poskytovateľa môže byť zistené:

1. v API verzii > 18 priamo metódou z triedy Location isFromMockProvider(),

2. kontrolou povolenia možnosti Mock locations v nastaveniach pre vývojárov,

3. kontrolou, či nejaká aplikácia má povolenie pre android. permi- ssion.ACCESS_M0CK_L0CATI0N.

Príkladom aplikácie, v ktorej je vykonávaná táto detekcia, je hra Poké- mon Go, v ktorej v rozšírenej realite hľadá užívateľ Pokémov po okolí a teda lokalizácia je tu kľúčová. Využitím aplikácií manipulujúcich s testovacím poskytovateľom takto hráči obchádzali pravidlá hry. Pri prieskume súvisiacich aplikácií som našla aj také, ktoré sa sna­ žia znemožniť túto detekciu. Príkladom je aplikácia MockMockLocati- ons [33]. Tá falšuje výsledky volania metód snažiacich sa detekovat používanie testovacej polohy prostredníctvom API, ktoré umožňuje nájsť zadanú metódu a zmeniť jej správanie. Vrámci prieskumu týchto aplikácií som vyskúšala asi 10 najpouží­ vanejších aplikácií v Google Play Store, ktoré mali podvrhovať polohu. Všetky mnou skúšané aplikácie vyžadovali povolenie Mock locations. Jedna aplikácia však umožňovala podvrhovať polohu aj bez povole­ nia Mock locations, bolo však potrebné mať rootnutý telefón, teda telefón s právami superužívateľa. Aplikácie ponúkali základnú funk­ cionalitu ako vyhľadanie polohy, ktorú chceme nastaviť, na mape, nastavenie falošnej polohy, ukladanie predošlých použitých polôh, ďalšie prispôsobenia ako periodické aktualizácie tejto polohy, vyráta­ nie dodatočných atribútov. Pokročilejšie aplikácie okrem nastavenia jedného bodu umožňovali vytvorenie trasy z bodu A do bodu B a pre­ súvanie sa istou rýchlosťou. Ponúkali napríklad režim lietadlo alebo režim chôdze, kedy bolo možné nastaviť smer, ktorým kráčame. Pri niektorých aplikáciách po ukončení podvrhovania polohy trvalo niekoľko jednotiek až desiatok minút, kým som bola schopná zistiť moju reálnu polohu, čo bolo pravdepodobne spôsobené uložením

17 3- AKTUÁLNE MOŽNOSTI POD VRHNUTI A POLOHY

IM G H tV!l 14:27 © G H •> STUL 14:42 = GPS Joystick Q. O jgjp

Current location (Mock): Select an option to get started: 51.5073509,-0.1277583

O Use Last Location Londýn, Spojené kráľovstvo

Q Get Current Location Accuracy (meters): Q Set Location 0 Altitude (meters): Set Route

Q Record Route © Speed (kilometers/hour): ©

Change location to: ROUT£MODE START MODE

(•) Stop At End (•) Teleport To Starí Londýn, Spojené kráľovstvo

O Loop To Start O Walk To Start Working mode Q Reverse

Mock locations (•)

Mock locations without FLP O • Hide Joystick

| o SHOW MAP | ROOT (SYSTEM APP) London| TO

Obr. 3.3: Ukážka funkcionality dostupných aplikácií falošnej polohy v cache pamäti a jej následným využívaním. V prí­ pade jednej aplikácie bolo nutné reštartovať telefón a tým odstrániť poskytovateľa. Niektoré aplikácie upozorňovali, aby mal užívateľ pri používaní vypnuté povolenie pre využívanie doplnkových zdrojov polohy ako siete, WiFi a Bluetooth pre lokalizáciu. Týmto by sa malo zamedziť skákaniu medzi reálnou a podvrhovanou polohou, čo by sa mohlo stať, lebo vďaka doplnkovým zdrojom by bolo zariadenie schopné zistiť aj reálnu polohu.

3.2 Aplikácie využívajúce VPN

Aplikácie využívajúce VPN (Virtual Priváte Network - sieť prepája­ júca viaceré zariadenia do jednej virtuálnej siete, vytvára bezpečnejšie pripojenie) sa pripájajú k serverom v iných krajinách alebo regiónoch na docielenie zmeny IP adresy, čo je možné využiť na webových strán­ kach, ktoré obmedzujú svoj obsah pre istú lokalitu. Zväčša ponúkajú

18 3- AKTUÁLNE MOŽNOSTI PODVRHNUTI A POLOHY zadarmo iba nejakú obmedzenú funkcionalitu, ale inak sú platené. Ap• likácie znova používajú metódy z najvyššej vrstvy, konkrétne z balíka android.net.

19

4 Implementácia

V tejto kapitole popíšem moju implementáciu. V 1. podkapitole bu­ dem nadväzovať na magisterskú prácu spomínanú v úvode. V nej bol operačný systém Android pozmenený tak, že bolo možné zaviesť fa­ lošnú GNSS polohu a pri zachytení reálneho GNSS signálu sa použila tá. Vďaka zavedeniu polohy čo najbližšie k hardvéru je docielené, že ak niektoré natívne aplikácie využívajú údaje z nižších vrstiev, bude použitá stále užívateľom podvrhovaná poloha. Telefón s modifikova­ ným systémom využíval verziu OS Androidu 4.3.1. Moje zariadenie využíva OS Android verziu 8.1.0 a teda zdrojový kód sa v mnohých veciach líši, nakoľko Android sa rýchlo vyvíja. Pri modifikácii chcem dosiahnuť, aby bolo možné plne riadiť, ako bude zariadenie prijímať falošnú GNSS polohu, nie získavať túto polohu iba pri zachytení reál­ nych GNSS signálov. Cieľom implementácie bude možnosť periodic­ kého nastavovania polohy. Ďalej chcem umožniť, aby bolo zariadenie schopné simulovať stav, kedy neprijíma GNSS signály, teda akoby nebolo schopné nájsť polohu. V spomínanej magisterskej práci bolo schopné podvrhovať aj informácie mobilnej siete využívané na získa­ vanie polohy a takisto informácie o prístupových bodoch WiFi. Chcem overiť, že toto je možné aj v novšej verzii Androidu a čo je potrebné na takéto podvrhovanie v operačnom systéme zmeniť. V 2. podkapi­ tole vytvorím detektor, ktorý bude analyzovať dostupné informácie súvisiace s polohou a vyhodnocovať, či môže byť poloha nejakým spôsobom podvrhovaná.

4.1 Vytvorenie Android custom ROM a aplikácie pre podvrhovanie polohy

V tejto časti vytvorím vlastný ROM (Read Only Memory), čiže modifi­ kujem priamo OS Android tak, že dokáže podvrhovať polohu v mojom zariadení LG Nexus 5X, ktoré používa Android 8.1.0 a API level 27. V tomto ROMe rozšírim a pozměním pôvodnú funkcionalitu, aby poskytovala potom aplikácia postavená na ňom služby podvrhovania polohy podobné moderným aplikáciám.

21 4- IMPLEMENTÁCIA

4.1.1 Upravenie Android OS

Pridanie metód potrebných pre podvrhovanie polohy

LocationManager Do API Androidu v triede LocationManager som implementovala metódy, ktoré potom bude možné používať v aplikácii pre podvrhovanie GNSS polohy. S polohou manipulujem vo vrstve Sys­ tem Services. Prostredníctvom LocationManager triedy získavam ob­ jekt typu LocationManagerService a prostredníctvom toho získavam objekt reprezentujúci GNSS poskytovateľa. Mením metódy v GnssLo- cationProvider triede, kde taktiež vytváram nové atribúty - falošnú polohu f akeLocation, reálnu polohu realLocation a príznak hide- Location. V tejto verzii Androidu je už potrebné nastaviť falošnej polohe atribúty čas a presnosť, aby bola validná pre použitie v metóde re- portLocation, ktorá vysiela novú polohu všetkým, ktorí počúvajú na zmeny polohy (popísané v sekcii 2.2.1). Pre možnosť volania tejto metódy je potrebné ju volať so zmenenou identitou, inak by bola vy­ hodená výnimka SecurityException. Pridávam tieto metódy: void setFakeGnssLocation(Location fakeLocation) metóda ukladá falošnú polohu do atribútu fakeLocation a ohlasuje ju vola­ ním reportLocation všetkým, čo počúvajú na zmeny polohy. Uloženie falošnej polohy zároveň zabraňuje ohlasovaniu reálnej polohy, až pokým nie je vymazaná nasledujúcou metódou. void cancelFakeGnssLocationQ pomocou tejto metódy sa vymaže falošná poloha a tým pádom sa používa znova reálna. void setHideGnssLocation() metóda nastavuje premennú hideLo- cation v GnssLocationProvider triede na true. Pri akejkoľvek zmene GNSS polohy je však táto poloha ukladaná do novovyt­ voreného atribútu realLocation, ale ignorovaná, teda aplikácie nedostávajú aktualizácie o zmene polohy, ale polohu je možné získať volaním nižšie popísanej novej metódy getRealLocation. void unsetHideGnssLocation() metóda nastavuje premennú hide- Location v GnssLocationProvider triede na falše a tým pádom umožňuje aplikáciám získavať znova aktualizácie polohy.

22 4- IMPLEMENTÁCIA

Location getRealLocation() metóda vracia reálnu polohu zariade­ nia z GNSS poskytovateľa, ktorá sa ukladá separátne, aj keď sa aplikáciám aktuálne posielajú falošné polohy alebo sa poloha práve skrýva. boolean isFakeLocationEnabled() metóda slúži na zisťovanie, či je aktuálne využívaná podvrhnutá poloha f akeLocation, čo vy­ užijem pri štarte aplikácie. boolean isF£ideLocationEnabled() metóda slúži na zisťovanie hod­ noty atribútu hideLocation.

location/iava/aTidroid/locfítion/LocatioiiManager.java i locätion/jdva/ändroid/locätion/ILocätionMändger.äidl i s&races/coie/jdVd/coin/android/seiver/LocdtionManagerService.java i services/core/java/com/and^id/seiver/location/GnssLocationProviderjava

Obr. 4.1: Triedy využívané pri podvrhovaní GNSS polohy

TelephonyManager V triede TelephonyManager som implemento­ vala metódy, ktoré potom bude možné využívať v aplikácii na podvr- hovanie polohy v mobilnej sieti. Polohu znova modifikujem v System Services vrstve - prostredníctvom TelephonyManager získavam ob­ jekt typu Phonelnterf aceManager, cez ten získavam Phone inštanciu a cez tú objekt typu Servi ceStateTracker, v ktorom si už ukladám atribúty f akeCellLocation a f akeCellInf o. Využívam nasledujúce novovytvorené metódy: void setFakeCellLocation(inc mcc, int mne, int lac, int cid) metóda ukladá polohu (teda atributy lac a cid reprezentujúce polohu) do atribútu f akeLocation, čo je poloha typu GsmCellLocation a všetci, čo počúvajú na zmenu tejto polohy sú informovaní o no­ vej polohe. Pri vyžiadaní novej polohy užívateľom je použitá táto poloha. Pri získaní novej, skutočnej, polohy je táto poloha

23 4- IMPLEMENTÁCIA

ignorovaná. Nastaví sa aj nový sieťový operátor zložený z fa­ lošných hodnôt mcc a mne. Takisto sa uložia atribúty definujúce Cellldentity, teda konkrétne GsmCellIdentity a tento objekt sa využíva pri požiadavke na získanie blízkych bunečných iden­ tít. void cancelFakeCellLocationQ pomocou tejto metódy sa vynulujú parametre, v ktorých boli uložené falošné údaje a nastaví sa pôvodný sieťový operátor. boolean isFakingEnabled() metóda slúži na zisťovanie, či sa aktu­ álne podvrhujú údaje polohy v mobilnej sieti.

telephony/java/android/telephony/ TelephonyM anager.java I tel ephony/Java/com/ android/internal / telephony/FTelephony. aid] I sre/com/ android/phone/Phonelnterfac eManager. Java I sre/java/com/android/internal/ telephony/Phone ,j ava I sre /java/com /android / internal/telephony,' Service StateTrac ker .j ava

Obr. 4.2: Triedy využívané pri podvrhovaní polohy v mobilnej sieti

WifiManager V triede Wif iManager som implementovala metódy, ktoré potom bude možné využívať v aplikácii na podvrhovanie vý­ sledkov skenovania prístupových bodov WiFi. Manipulácia s nimi znova prebieha v System Services vrstve, tentokrát iba nastavujeme, aby si zariadenie myslelo, že nie sú dostupné žiadne prístupové body WiFi - prostredníctvom WifiManager získavam inštanciu WifiServi- celmpl, cez tú získavam Wif iStateMachine objekt, cez ten objekt typu Wif iNative a cez ten Wif iCondControl inštanciu, v ktorej nastavujem príznak f akeNoScanResults. Pri získavaní prístupových bodov po­ tom v prípade nastaveného príznaku vraciam prázdne pole výsledkov namiesto reálnych, ktoré ignorujem. Využívam nasledujúce vytvorené metódy:

24 4- IMPLEMENTÁCIA void setFakeNoScanResults() metóda nastavuje príznak fakeNoS- canResults v triede Wif iCondControl na true. WifiCondCon- trol prijíma výsledky skenovania prístupových bodov a podvr- huje potom prázdne pole výsledkov, čo sa deje v metóde Array- List getScanResults(int scanType). void cancelFakeNoScanResults () pomocou tejto metódy sa príznak, ktorý rozhoduje o podvrhovaní skenovania, nastaví znova na false. boolean isFakingEnabled() metóda slúži na zisťovanie, či je aktu­ álne podvrhované získavanie prístupových bodov WiFi.

wiň/java/ android/net /wifi/WifiManager.j ava 1 ~ wifi/java / android/net/wifi/ IWifiM anager. aid]

1 ~ se rvice/j ava/ com/android / server/ wifi / WifiServicelmpl .java

service/Java / com /android/ serve r/ wifi /"WifiStateM achine Java

service /j ava/ com/android/server/wifi/ WifiNat ive .j ava

se irice/j ava/ com/android / server/wifi/Wific ondC ontrol .Java

Obr. 4.3: Triedy využívané pri podvrhovaní WiFi skenu

4.1.2 Vytvorenie systémovej aplikácie

Tieto metódy som potom využívala v aplikácii FakeLocation. Túto aplikáciu som taktiež vyvíjala priamo v mojom upravenom systéme. Do hlavného adresára bolo treba presunúť súbor AndroidManif est. xml, ktorý slúži na definíciu štruktúry celej aplikácie, popisuje jednotlivé komponenty (ako aktivity, služby, prijímače) a opisuje napr. aj po­ volenia požadované aplikáciou [34]. V prípade tejto aplikácie sú to povolenia ACCESS_COARSE_LOCATION a ACCESS_FINE_LOCATION, ktoré

25 4- IMPLEMENTÁCIA sú potrebné pre získavanie informácií o polohe a F0REGR0UND_SER- VICE pre možný beh služby na popredí, čo popíšem nižšie. Samotný zdrojový kód, teda Java súbory, som presunula do priečinka src a ex­ terné zdroje, teda súbory opisujúce celkový vzhľad aplikácie, fonty reťazce, do priečinka res. Na to, aby sa aplikácia zostavila, bolo po­ trebné pridať Makef ile, ktorý definuje, ako sa má aplikácia zostaviť, čiže vlastnosti aplikácie ako názov, potrebné knižnice, extra možnosti. Takisto je potrebné v súbore build/target/product/core .mk pridať riadok PRODUCT_PACKAGES += FakeLocation, aby sa pri zostavovaní brala do úvahy aj táto aplikácia. Snažila som sa docieliť, aby bola aplikácia jednoduchá na ovládanie a prehľadná. Aplikácia je zložená z nasledujúcich aktivít:

MainActivity V hlavnej aktivite aplikácie sa nachádzajú všetky ovlá­ dacie prvky umožňujúce podvrhovanie falošnej polohy. Je rozdelená na 4 fragmenty. V1. je možné konfigurovat GNSS polohu, teda nastavo­ vať falošnú polohu. Nakoľko pravá poloha z GNSS čipu je veľmi často aktualizovaná, falošnú polohu nastavujem taktiež periodicky. Toto som implementovala vytvorením služby bežiacej na pozadí dediacej z triedy Service. Services slúžia na to, aby vykonávali nejaké činnosti na pozadí bez potreby interakcie s užívateľom, aj pri nečinnosti apliká­ cie [34]. Interval je užívateľom konfigurovatelný, čo popisujem nižšie. V tomto fragmente sa nachádzajú 2 okná, medzi ktorými je možné sa presúvať. Dá sa nastavovať fixná poloha alebo simulovať transport z bodu A do bodu B. Pri prvej možnosti sú vyžadované súradnice a pri druhej súradnice oboch bodov a trvanie tohto transportu. Pri transporte následne aplikácia vypočíta počet podvrhovaní na základe nastavenej frekvencie a potom periodicky aktualizuje polohu novovy- počítanou. V 2. časti sa dá nastavovať skrytie GNSS polohy a následne jej sprístupnenie. Skrývanie polohy má za úlohu simulovať stav, kedy zariadenie nedostáva aktualizácie polohy. Zariadenie v skutočnosti prijíma aktualizácie polohy, neposiela však informácie o aktualizá­ ciách ďalej vyšším vrstvám. V 3. časti je možné konfigurovat polohu mobilnej siete, teda nastavovať falošnú polohu a rušiť toto nastavenie. Pre nastavovanie falošnej polohy mobilnej siete sa využijú 4 užívate­ ľom zadané parametre - MCC, MNC, LAC, CID, popísané v sekcii 2.2.2. V 4. časti sa manipuluje s WiFi, teda nastavuje sa správanie,

26 4- IMPLEMENTÁCIA akoby zariadenie nemalo k dispozícii žiadne prístupové body a potom sa dá toto nastavenie zrušiť. V aktivite takisto v každej časti vidím, či je daná komponenta podvrhovaná alebo pravá. Pri nastavení falošnej GNSS polohy alebo polohy v mobilnej sieti vidím aj hodnoty, s ktorými je podvrhovaná. Ďalej pri začiatku akéhokoľvek falšovania polohy vytváram znova službu, ktorá tentoraz beží na popredí a zobrazuje notifikáciu o pod- vrhovaní polohy aj pri odchode z aplikácie. Prostredníctvom tejto notifikácie sa dá vrátiť naspäť do aplikácie. Pri ukončení všetkých prvkov podvrhovania sa notifikácia odstráni.

Details Details

Title: IMG_20210328.125222 Title: IMG_20210328_125314

Time: Mar 28, 2021 12:52:22 Time: Mar 28, 2021 12:53:14 PM PM

Width: 640 Location: 48.189540, 17.726663 Height: 480 Width: 640 Orientation: 0 Height: 480 File size: 43.79 kB Orientation: 0 Maker: unknown File size: 40.29 kB Model: AOSP on IA Emulator Maker: unknown

Obr. 4.4: EXIF metadata pri zapnutí Hide location a po vypnutí

GetLocationsActivity V tejto aktivite je zobrazený prehľad o polo­ hách, ktoré sú sprístupnené aplikáciám. Je vytvorená inštancia Lo- cationListener, ktorá počúva na zmeny GNSS polohy, volá sa aj metóda triedy LocationManager getLastKnownLocationO pre získa­ nie posledne uloženej polohy a pre informácie o mobilnej sieti sa volá metóda triedy TelephonyManager getAUCellInf o(). Okrem týchto hodnôt je možné získať aj reálnu polohu prostredníctvom tlačidla REAL L0CATI0N, ktoré využíva novú metódu getRealLocation, čo sa dá vy­ užiť, keď podvrhujem polohu a chcem mať informáciu o skutočnej GNSS polohe.

27 4- IMPLEMENTÁCIA

• 9 "j • 4:26

Fake Location : Fake Location

GNSS location (faking) Current GNSS location info

Location from 16:27:17.763] 1.0,10.0 get Latest Location call Fake Location Location from GNSS 16:27:22.259] 1.0,10.0 listener

Current cell location info ICelllnfoGsm: [mRegistered=NO |mTimeStampType=unkno Lvn mTimeStamp=922337203 6854775807ns CellldentityGsm:{ mMcc=4 mMnc=1 mLac=4mCid=1 mArfcn=2147483647 Fake no wifi access points found

GET REAL GNSS LOCATION

[16:27:24.475] 48.18954,17.72666333333333 Obr. 4.5: Ukážka MainActivity, GetLocationActivity a notifikácie o pod- vrhovaní

SettingsActivity V nastaveniach sa dá konfigurovat interval pre podvrhovanie GNSS polohy, teda s akou frekvenciou sa volá me­ tóda setFakeGnssLocation. Implicitná hodnota je 5 sekúnd.

4.1.3 Zostavenie

Operačný systém Android je založený na pozmenenom Linuxovom kerneli a ďalšom open source softvéri. Na najnižšej vrstve je softvér stack systému, ktorý zahŕňa kernel, HAL (Hardware Abstraction La- yer), knižnicu funkcií a ART (Android RunTime), aplikačné rozhranie a aplikácie [35]. Pre zostavenie zariadenia je potrebné mať nainštalo­ vané všetky balíky potrebné k zostaveniu a stiahnutý zdrojový kód. Aby zostavenie fungovalo na mojom zariadení, je treba zistiť jeho číslo zostavenia a podľa toho vybrať tag, ktorého zdrojový kód stiahnem. Pre moje zariadenie som teda stiahla verziu android-8.1.0_r52. Ďalej je potrebné stiahnuť hardvérové komponenty, ktoré sú na oficiálnej stránke Androidu dostupné iba pre Nexus a Pixel zariadenia. Tieto hardvérové komponenty je potrebné extrahovať a umiestniť v prísluš­ nom priečinku. Systém je rozsiahly a na to, aby som mohla vyvíjať systém vo vývo­ jovom prostredí Android Studio, som použila nástroj IDEGen. Tento nástroj automaticky generuje konfiguračné súbory pre vývojové pro-

28 4- IMPLEMENTÁCIA stredie [36]. Potrebné súbory som získala spustením týchto príkazov:

make idegen && development/tools/idegen/idegen.sh

Získaný súbor android. ipr som importovala do Android Studia. Po vykonaní zmien v zdrojovom kóde je treba spustiť skript na na­ stavenie potrebných premenných prostredia pre mnou vybraný cieľ. Nakoľko som pridaním nových metód menila API, bolo potrebné spus­ tiť príkaz make update-api, ktorý vygeneruje nové metódy v zozname API metód a až potom zostaviť celý systém pomocou príkazu m/make. Samotné zostavenie trvá niekoľko hodín a vyžaduje niekoľko desiatok GB pamäte na disku. Pre testovacie účely je možné zostaviť systém pre Android emulátor, ktorý simuluje beh systému v reálnom za­ riadení, čo som využívala pri vývoji. Systém je zložený z oddielov (partitions) ako boot, systém, recovery, userdata a každý slúži na re­ prezentáciu iného typu dát [35]. Po úspešnom dokončení zostavenia sa v priečinku ANDR0ID_PR0DUCT_0UT nachádzajú súbory s príponou img, čiže súbory image, ktoré reprezentujú jednotlivé oddiely. Príka­ zom emulátor spusteným v priečinku so zdrojovým kódom sa spustí emulátor s predvolenou konfiguráciou, ktorý využíva tieto súbory. Pre zostavenie pre reálne zariadenie som použila cieľ aosp_bullhead- userdebug a img súbory sa potom vytvorili konkrétne v priečinku out/target/product/bullhead. Súbory v tomto priečinku je možné následne presunúť, teda flashnúť, do zariadenia. Pre testovanie a aj presunutie súborov do zariadenia som používala nástroje ADB a fastboot. ADB je nástroj príkazového riadka, ktorý slúži na komunikáciu s An­ droid zariadením prostredníctvom debuggera (prístroj na lade­ nie) na hostiteľskom systéme. Môže byť využitý na komunikáciu priamo s fyzickým zariadením Android pripojeným USB káblom alebo s emulátorom bežiacom v systéme. Umožňuje aj nahráva­ nie a sťahovanie súborov alebo inštalovanie aplikácií [37]. Pri vyvíjaní som využívala napríklad príkaz adb logcat, ktorý sa pripojil k emulátoru a sprostredkoval mi všetky logy z bežiaceho operačného systému. fastboot je protokol pre flashovanie zariadenia pripojeného prostred­ níctvom USB. Zariadenie beží v stave bootloadera, ktorý je zod-

29 4- IMPLEMENTÁCIA

povedný za zavedenie kernelu do zariadenia a overuje integritu zavádzaných prvkov [38]. Do fastboot módu sa zvyčajne pre­ chádza kombináciou istých tlačidiel zariadenia. [35]. Aby bolo možné dostať prispôsobený ROM do zariadenia, je po­ trebné najprv povoliť nastavenie ladenia pomocou USB a odomknutie bootloadera. Potom nasleduje pripojenie zariadenia pomocou USB kábla a samotné odomknutie bootoloadera. Používala som prostriedky adb a fastbooot: fastboot oem unlock fastboot reboot

Po zostavení prispôsobeného Android OS je potrebné súbory pre­ sunúť do zariadenia pomocou adb a fastbootu, ktoré znova využívajú pri zostavení nastavenú premennú prostredia ANDR0ID_PR0DUCT_0UT: fastboot flashall -w Týmto príkazom presuniem všetky img súbory do zariadenia.

Obr. 4.6: Časť výstupu príkazu fastboot flashall -w

30 4- IMPLEMENTÁCIA

4.2 Detektor podvrhnutej polohy

Ďalej som vytvorila aplikáciu na detekovanie podvrhovania polohy, Fake Location Detector, v ktorej sú demonštrované rôzne spôsoby zís­ kania polohy. Detektor má slúžiť na detekciu, či je možné, že je poloha podvrhnutá. V hlavnej aktivite sa dá prekliknúť sa na aktivitu Compa- reLocationsActivity a AnalyzeLocationActivity. Aplikácia vyžaduje povolenia pre získané polohy pre priame získanie polohy, povolenie k prístupu na web pre získanie informácie o IP adrese a takisto po­ volenie na prehliadanie externého priestoru a prístupu k priestoru s médiami pre získanie informácií o poslednej fotografii.

4.2.1 CompareLocationsActivity

V tejto aktivite sa získavajú polohy z viacerých zdrojov a následne porovnávajú. Ak je odchýlka jednotlivých polôh väčšia ako povolená, tak sa vyhodnotí, že zariadenie nejakým spôsobom podvrhuje polohu.

Poloha z GPS poskytovateľa Poloha na základe GNSS dát.

Poloha zo sieťového poskytovateľa Sieťový poskytovatel'poskytuje polohu na základe základňových staníc mobilnej siete a prístu­ pových bodov WiFi. Jeho zdrojový kód nie je verejne dostupný a preto pri zostavení nie je k dispozícii. Google má svoju data­ bázu so základňovými stanicami a prístupovými bodmi WiFi a na základe nej rozhoduje o polohe [14].

Poloha na základe IP adresy Na získanie polohy z IP adresy som vy­ užila voľne dostupné API pracujúce s IP adresou. Volaním API získam informácie ako IP adresa, zemepisné súradnice, dete­ kované mesto, región, krajinu, menu, časové pásmo a mnoho ďalších informácií.

Poloha na základe dát poslednej fotky Pri tomto spôsobe hľadám poslednú fotku v galérii a ak je táto fotka nie staršia ako 30 mi­ nút, tak z nej načítam EXIF dáta. Ak sú dostupné informácie o súradniciach, tak ich následne zobrazím.

Pri štarte tejto aktivity si najprv vyžiadam od užívateľa súhlas na využívanie potrebných povolení. Na základe toho, ktoré povolenia

31 4- IMPLEMENTÁCIA sú odsúhlasené, volám príslušné metódy pre získanie polohy S kaž­ dou novou polohou prepočítavam priemer týchto polôh a následne jednotlivé odchýlky od priemeru. Ak je odchýlka väčšia ako povolená, tak považujem niektorý zo zdrojov polohy za podvrhovaný.

4.2.2 AnalyzeLocationActivity

V tejto aktivite analyzujem objekt Location, ktorý získam z GPS posky- tovateľa a snažím sa zistiť, či zariadenie nejakým spôsobom používa povolenie Mock locations. Aktivita poskytuje 3 kontroly:

Kontrola príznaku mock objektu GNSS polohy Ako som už spomí­ nala v sekcii 3.1, od API verzie 18 je možné na objekte triedy Location volať funkciu isFromMockProvider. V tejto kontrole teda vytvorím inštanciu LocationListener pre získanie GNSS polohy a na objekte získanej polohy zavolám túto metódu, čím zistím, či je poloha vytvorená testovacím poskytovateľom.

Kontrola atribútov objektu GNSS polohy Objekt triedy Location má okrem hlavných atribútov zemepisnej šírky a dĺžky mnoho ďal­ ších atribútov. Niektoré aplikácie pre falšovanie nastavujú iba hlavné atribúty podvrhovanej polohy, a preto kontrolujem, či má objekt GNSS polohy nastavené ďalšie atribúty, ako nadmorská výška, rýchlosť, presnosť a azimut.

Aplikácie využívajúce Mock locations Tu prechádzam všetky nain­ štalované aplikácie v zariadení, pri každej získam dostupné in­ formácie a snažím sa zistiť, či niektorá využíva povolenie ACESS_- M0CK_L0CATI0N. Ak také aplikácie detekujem, tak vypíšem ich názvy.

32 4- IMPLEMENTÁCIA

I FakeLocationDetector

CHECK LOCATION Location is NOT frair FROM MOCK mock provider. PROVIDER COMPARE LOCATIONS

Jaddress:194.1.157.112 Latitude: 48.171932 CHECK LOCATION -orgiude: 17.864S00 OBJECT ATTRIBUTES

CHECK FOR APPS REQUIRING "ALLOW MOCK LOCATION" ENABLED

Obr. 4.7: Ukážka funkcionality detektoru

33

5 Záver

Cieľom mojej bakalárskej práce bolo venovať sa polohe a jej podvr- hovaniu v operačnom systéme Android. Zaoberala som sa zdrojmi pre získanie polohy, pričom som bližšie popísala získavanie polohy prostredníctvom GNSS, mobilných sietí, WiFi a Bluetoothu. Vysvet­ lila som, ako je možné tieto druhy lokačných dát získavať a ako sú reprezentované. Analyzovala som dostupné možnosti pre podvrhovanie polohy, vrámci čoho som skúšala voľne dostupné aplikácie. Aplikácie ponúkali pestrú funkcionalitu, základom bola možnosť periodického nastavo­ vania polohy alebo možnosť simulovania transportu. Väčšinou však bolo toto falšovanie detekovateľné, nakoľko aplikácie využívali tes­ tovacieho poskytovateľa polohy. Zhodnotila som, ako tieto aplikácie fungujú a popísala prípadné nedostatky. Modifikovala som operačný systém pre môj mobilný telefón LG Nexus 5X používajúci verziu Androidu 8.1.0 tak, aby som mohla pod- vrhovať polohu spôsobom, ktorý nebude jednoducho detekovateľný a na to som vytvorila natívnu aplikáciu. V nej je možné polohu a dáta s ňou spojené riadiť. V tejto aplikácii som dosiahla, že je možné ria­ diť, kedy sa poloha podvrhuje, teda poloha nie je podvrhovaná iba keď zachytávame reálne GNSS signály. Taktiež sa dá nastaviť, s akou periodicitou sa bude falšovať GNSS poloha. Ďalej som v modifikácii umožnila, aby bolo možné simulovať stav, kedy neprijímame GNSS signály a takisto transport z vybraného bodu A do bodu B. Okrem toho som overila a implementovala, ako je v tejto verzii Androidu možné manipulovať s dátami potrebnými pre získavanie polohy prostred­ níctvom mobilných sietí a WiFi. Aplikácia je prehľadná, pri falšovaní nejakého druhu dát vidíme, že sú falšované a s akými hodnotami, je prístupná aj notifikácia o podvrhovaní, ktorá umožňuje návrat do ap­ likácie. V modifikácii systému je implementované ukladanie si polohy zvlášť a možné využitie pre prístup k pravej polohe, zatiaľčo zariade­ nie pracuje s falošnou polohou. V aplikácii je toto možné využiť a tak získať pravú polohu. V neposlednom rade som vytvorila detektor podvrhovania polohy ponúkajúci 2 druhy overenia, či zariadenie používa falšovanie. Prvým je porovnávanie dostupných polôh z viacerých zdrojov, ako sú po-

35 5- ZÁVER loha z GPS a sieťového poskytovateľa, poloha na základe IP adresy alebo z metadát najnovších fotografií. Ďalší druh overenia je analýza objektu GNSS polohy a aplikácií v telefóne, kde analyzujem, či po­ loha má všetky potrebné atribúty, či neobsahuje príznak, že je získaná z tzv. mock alebo testovacieho poskytovateľa a prechádzam stiahnuté aplikácie a hľadám takú, ktorá by používala povolenie pre použitie testovacej polohy Aplikácia pre podvrhovanie polohy poskytuje funkcionalitu umož­ ňujúcu dôveryhodné falšovanie polohy, ktorá oklame aj pokročilejšie aplikácie a podvrhovanie nie je jednoducho detekovateľné. Funkcio­ nalita detektoru by sa mohla použiť ako súčasť aplikácií, pre ktoré je poloha kľúčový údaj a musia si byť isté, že poloha nie je falošná. Ponúka taktiež jednoduchý pohľad na lokačné dáta, ktoré je možné získať, takže ju vieme naopak použiť pri podvrhovaní, keď chceme zistiť, či je dôveryhodné a aké dáta vedia ostatné aplikácie získať.

36 Bibliografia

1. eKaranténa [online]. Ministerstvo investícií, regionálneho roz­ voja a informatizácie Slovenskej republiky, [cit. 2021-03-20]. Do­ stupné z: https : / / koróna . gov . sk / naj častej sie - otázky / ekarantena/. 2. STAŠKOVÁ, Lýdia. Služby zjišťování polohy v OS Android. 2015. Dostupné tiež z: https : / /is . muni . cz/th/xeuhd/. Dipl. pr. Fakulta informatiky Masarykovej univerzity. 3. Location permissions [online]. Google [cit. 2020-10-30]. Dostupné z: https : / /developers . google . com /maps /documentation/ android-sdk/location#location_permissions. 4. What is GNSS ? [Online]. European GNSS Agency [cit. 2021-03- 25]. Dostupné z: https : / /www . gsa . europa . eu/european- gnss/what-gnss. 5. Android Open Source Project: Gnss callbacks [online]. Google [cit. 2020-10-30]. Dostupné z: https : / /android . googlesource . com/platform/hardware /interfaces/ +/master/gnss/1 . 0/ IGnssCallback.hal. 6. Android Architecture [online]. Google [cit. 2021-05-10]. Dostupné z: https://source.android.com/devices/architecture. 7. ZHANG, Xiaohong; TAO, Xianlu; ZHU, Feng; SHI, Xiang; WANG, Fuhong. Quality assessment of GNSS observations from an Android N smartphone and positioning performance analysis using time-differenced filtering approach. GPS Solu­ tions. 2018, roc. 22, č. 3, s. 70. ISSN 1521-1886. Dostupné z DOI: 10.1007/sl0291-018-0736-8. 8. Package summary: android.location [online]. Google [cit. 2020-10- 30]. Dostupné z: https://developer.android.com/reference/ android/location/package-summary. 9. TACHIBANAYA, TsuruZoh. Exiffile format [online] [cit. 2021-02- 03]. Dostupné z: https : //www. media. mit. edu/pia/Research/ deepview/exif.html.

37 BIBLIOGRAFIA

10. Exiflnterface [online]. Google [cit. 2021-01-30]. Dostupne z: https://developer.android.com/reference/android/media/ Exiflnterface. 11. EPSTEIN, Joseph. Chapter 7 - Voice over Cellular and Licensed Spectrum. In: EPSTEIN, Joseph (ed.). Scalable VoIP Mobility: Bos• ton: Newnes, 2009, s. 289-322. ISBN 978-1-85617-508-1. Dostupne z DOI: 10.1016/B978-1-85617-508-1.00007-4. 12. CUI, Yuanbo; GAO, Fei; ZHANG, Hua; LI, Wenmin; JIN, Zheng- ping. KNN search-based trajectory cloaking against the Cell-ID tracking in cellular network. Soft Computing. 2020, roc. 24, c. 2, s. 965-980. ISSN 1433-7479. Dostupne z DOI: 10.1007/s00500-019- 03935-2. 13. OpenCellld [online]. Unwired Labs [cit. 2021-01-30]. Dostupne z: https://www.opencellid.org. 14. How Google uses location information [online]. Google [cit. 2020- 10-30]. Dostupne z: https : / /policies . google . com/ technologies/location-data. 15. Package summary: android.telephony [online]. Google [cit. 2020-10- 30]. Dostupne z: https: //developer. android, com/reference/ android/telephony/package-summary. 16. SANKAR, Gomathi. Android RIL Architecture [online] [cit. 2021- 02-03]. Dostupne z: https : / /www . e- consystems . com/ Articles/Android/Android-RIL-Architecture.asp. 17. Android Open Source Project: ril.h [online]. Google [cit. 2020-10-30]. Dostupne z: https : / /android. googlesource . com/platform/ hardware/ril/+/master/include/telephony/ril.h. 18. KAUSHIK, Shailandra. An overview of technical aspect for WiFi networks technology. International Journal of Electronics and Com• puter Science Engineering (IJECSE, ISSN: 2277-1956). 2012, roc. 1, c. 01, s. 28-34. 19. Package summary: android.net.wifi [online]. Google [cit. 2020-10- 30]. Dostupne z: https: //developer. android, com/reference/ andro id/net/wifi/package-summary.

38 BIBLIOGRAFIA

20. KAWAGUCHI, Nobuo. WiFi Location Information System for Both Indoors and Outdoors. In: OMATU, Sigeru; ROCHA, Mi• guel P.; BRAVO, Jose; FERNANDEZ, Florentino; CORCHADO, Emilio; BUSTILLO, Andres; CORCHADO, Juan M. (ed.). Dis• tributed Computing, Artificial Intelligence, Bioinformatics, Soft Com• puting, and Ambient Assisted Living. Berlin, Heidelberg: Springer Berlin Heidelberg, 2009, s. 638-645. ISBN 978-3-642-02481-8. 21. Mozilla Location Service [online]. Mozilla [cit. 2021-01-30]. Do• stupne z: https://location.services.mozilia.com. 22. Combain Positioning Service [online]. Combain Mobile AB [cit. 2021-01-30]. Dostupne z: https ://combain. com. 23. IPWHOIS [online] [cit. 2021-03-20]. Dostupne z: https : //ipwhois.io/. 24. Big Data Cloud API [online]. BigDataCloud Pty Ltd [cit. 2021-03- 20]. Dostupne z: https: //www. bigdatacloud. com/. 25. BISDIKIAN, C. An overview of the Bluetooth wireless techno• logy. IEEE Communications Magazine. 2001, roc. 39, c. 12, s. 86-94. Dostupne z DOI: 10.1109/35.968817. 26. BLASIO, Gabriele S. de; QUESADA-ARENCIBIA, A.; GARCIA, Carmelo R; RODRIGUEZ-RODRIGUEZ, Jose Carlos. Bluetooth Low Energy Technology Applied to Indoor Positioning Systems: An Overview. In: MORENO-DIAZ, Roberto; PICHLER, Franz; QUESADA-ARENCIBIA, Alexis (ed.). Computer Aided Systems Theory - EUROCAST 2019. Cham: Springer International Publis• hing, 2020, s. 83-90. ISBN 978-3-030-45093-9. 27. Package summary: android.bluetooth [online]. Google [cit. 2020-10- 30]. Dostupne z: https://developer.android.com/reference/ android/bluetooth/package-summary. 28. LEE, Keonsoo; NAM, Yunyoung; MIN, Se Dong. An indoor loca• lization solution using Bluetooth RSSI and multiple sensors on a smartphone. Multimedia Tools and Applications. 2018, roc. 77, c. 10, s. 12635-12654. ISSN 1573-7721. Dostupne z DOI: 10.1007/s 11042- 017-4908-2.

39 BIBLIOGRAFIA

29. A New Approach to Indoor Localization in Large-Scale Environments [online]. Behr Technologies [cit. 2021-01-30]. Dostupne z: https: //behrtech.com/blog/large-scale-indoor-localization/. 30. Package summary: android.bluetooth.le [online]. Google [cit. 2020-10-30]. Dostupne z: https : / /developer . android . com/ reference/android/bluetooth/le/package-summary. 31. Package summary: com.google.android.gms.location [online]. Google [cit. 2020-10-30]. Dostupne z: https : / /developers . google . com/android/reference/com/google/android/gms/location/ package-summary. 32. Pake GPS location [online] [cit. 2020-11-10]. Dostupne z: https: / / play . google . com / store / apps / details ? id = com . lexa . fakegps&hl=en. 33. MockMockLocations [online] [cit. 2020-11-14]. Dostupne z: https: //github.com/bnalls33/MockMockLocations. 34. MEIER, Reto. Professional Android Application Development. Crea- teSpace Independent Publishing Platform, 2014. ISBN 978-1-5023- 1113-9. 35. TANG, Qinghao; DU, Fan. Basic Knowledge of Firmware. In: Inter• net of Things Security: Principles and Practice. Singapore: Springer Singapore, 2021, s. 71-120. ISBN 978-981-15-9942-2. Dostupne z DOI: 10.1007/978-981-15-9942-2_3. 36. IDEGen README [online]. Google [cit. 2021-05-03]. Dostupne z: https://android.googlesource.com/platform/development/ +/master/tools/idegen/README. 37. KRAJCI, Iggy; CUMMINGS, Darren. Debugging Android. In: Android on x86: An Introduction to Optimizing for Intel® Architecture. Berkeley, CA: Apress, 2013, s. 131-184. ISBN 978-1-4302-6131-5. Dostupne z DOI: 10.1007/978-l-4302-6131-5_8. 38. Bootloader [online]. Google [cit. 2021-02-28]. Dostupne z: https: //source.android.com/devices/bootloader.

40