Exploiting a debuggeable application
Exploiting a debuggeable application
Zaobilaženje root i debuggeable provere
Ovaj deo posta je sažetak iz posta https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Koraci za pravljenje Android aplikacije debuggeable i zaobilaženje provera
Pravljenje aplikacije debuggeable
Sadržaj zasnovan na https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Dekompajlirajte APK:
Iskoristite APK-GUI alat za dekompajliranje APK-a.
U android-manifest datoteci, dodajte
android:debuggable=true
da omogućite režim debagovanja.Ponovo kompajlirajte, potpišite i zipalign-ujte izmenjenu aplikaciju.
Instalirajte izmenjenu aplikaciju:
Koristite komandu:
adb install <application_name>
.
Preuzmite ime paketa:
Izvršite
adb shell pm list packages –3
da biste naveli aplikacije trećih strana i pronašli ime paketa.
Postavite aplikaciju da čeka na vezu sa debagerom:
Komanda:
adb shell am setup-debug-app –w <package_name>
.Napomena: Ova komanda mora biti pokrenuta svaki put pre pokretanja aplikacije kako bi se osiguralo da čeka na debager.
Za trajnost, koristite
adb shell am setup-debug-app –w -–persistent <package_name>
.Da biste uklonili sve oznake, koristite
adb shell am clear-debug-app <package_name>
.
Pripremite se za debagovanje u Android Studiju:
Idite u Android Studio na File -> Open Profile or APK.
Otvorite rekompajlirani APK.
Postavite prekidne tačke u ključnim Java datotekama:
Postavite prekidne tačke u
MainActivity.java
(specifično uonCreate
metodi),b.java
, iContextWrapper.java
.
Zaobilaženje provera
Aplikacija će u određenim trenucima proveravati da li je debuggable i takođe će proveravati binarne datoteke koje ukazuju na uređaj sa root-om. Debager se može koristiti za modifikaciju informacija o aplikaciji, uklanjanje debuggable bita i promenu imena pretraživanih binarnih datoteka kako bi se zaobišle ove provere.
Za debuggable proveru:
Izmenite postavke oznaka:
U sekciji varijabli konzole debagera, idite na:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
.Napomena: Binarna reprezentacija
flags = 814267974
je11000011100111011110
, što ukazuje da je "Flag_debuggable" aktivan.
Ovi koraci zajedno osiguravaju da aplikacija može biti debagovana i da se određene sigurnosne provere mogu zaobići korišćenjem debagera, olakšavajući dublju analizu ili modifikaciju ponašanja aplikacije.
Korak 2 uključuje promenu vrednosti oznake na 814267972, koja se u binarnom obliku predstavlja kao 110000101101000000100010100.
Eksploatacija ranjivosti
Demonstracija je pružena korišćenjem ranjive aplikacije koja sadrži dugme i textview. U početku, aplikacija prikazuje "Crack Me". Cilj je promeniti poruku sa "Try Again" na "Hacked" u toku izvršavanja, bez modifikacije izvornog koda.
Proveravanje ranjivosti
Aplikacija je dekompajlirana korišćenjem
apktool
da bi se pristupiloAndroidManifest.xml
datoteci.Prisutnost
android_debuggable="true"
u AndroidManifest.xml ukazuje da je aplikacija debuggable i podložna eksploataciji.Vredno je napomenuti da se
apktool
koristi isključivo za proveru statusa debuggable bez izmene bilo kog koda.
Priprema postavki
Proces je uključivao pokretanje emulatora, instaliranje ranjive aplikacije i korišćenje
adb jdwp
za identifikaciju Dalvik VM portova koji slušaju.JDWP (Java Debug Wire Protocol) omogućava debagovanje aplikacije koja se izvršava u VM-u izlaganjem jedinstvenog porta.
Port forwarding je bio neophodan za daljinsko debagovanje, nakon čega je JDB povezan na ciljnu aplikaciju.
Injektovanje koda u toku izvršavanja
Eksploatacija je izvršena postavljanjem prekidnih tačaka i kontrolisanjem toka aplikacije.
Komande poput
classes
imethods <class_name>
korišćene su za otkrivanje strukture aplikacije.Prekidna tačka je postavljena u
onClick
metodi, a njeno izvršavanje je kontrolisano.Komande
locals
,next
, iset
korišćene su za inspekciju i modifikaciju lokalnih varijabli, posebno menjajući poruku "Try Again" u "Hacked".Izmenjeni kod je izvršen korišćenjem
run
komande, uspešno menjajući izlaz aplikacije u realnom vremenu.
Ovaj primer je demonstrirao kako se ponašanje debuggable aplikacije može manipulisati, ističući potencijal za složenije eksploate poput dobijanja shell pristupa na uređaju u kontekstu aplikacije.
References
Last updated