Exploiting a debuggeable application
Reading time: 4 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Bypassing root and debuggeable checks
Sehemu hii ya chapisho ni muhtasari kutoka kwa chapisho https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Steps to Make an Android App Debuggable and Bypass Checks
Making the App Debuggable
Maudhui yanategemea https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- Decompile the APK:
- Tumia zana ya APK-GUI kwa ajili ya decompiling APK.
- Katika faili android-manifest, weka
android:debuggable=true
ili kuwezesha hali ya debugging. - Recompile, sign, na zipalign programu iliyobadilishwa.
- Install the Modified Application:
- Tumia amri:
adb install <application_name>
.
- Retrieve the Package Name:
- Tekeleza
adb shell pm list packages –3
ili orodhesha programu za wahusika wengine na kupata jina la kifurushi.
- Set the App to Await Debugger Connection:
- Amri:
adb shell am setup-debug-app –w <package_name>
. - Kumbuka: Amri hii lazima ifanywe kila wakati kabla ya kuanzisha programu ili kuhakikisha inasubiri debugger.
- Kwa kudumu, tumia
adb shell am setup-debug-app –w -–persistent <package_name>
. - Kuondoa bendera zote, tumia
adb shell am clear-debug-app <package_name>
.
- Prepare for Debugging in Android Studio:
- Tembea katika Android Studio hadi File -> Open Profile or APK.
- Fungua APK iliyorekebishwa.
- Set Breakpoints in Key Java Files:
- Weka breakpoints katika
MainActivity.java
(hasa katika njia yaonCreate
),b.java
, naContextWrapper.java
.
Bypassing Checks
Programu, katika hatua fulani, itathibitisha ikiwa inapatikana kwa debugging na pia itakagua binaries zinazoashiria kifaa kilichoshikiliwa. Debugger inaweza kutumika kubadilisha taarifa za programu, kuondoa kipande cha debuggable, na kubadilisha majina ya binaries zinazotafutwa ili kupita hizi checks.
Kwa ajili ya ukaguzi wa debuggable:
- Modify Flag Settings:
- Katika sehemu ya mabadiliko ya debugger console, tembea hadi:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
. - Kumbuka: Uwakilishi wa binary wa
flags = 814267974
ni11000011100111011110
, unaonyesha kuwa "Flag_debuggable" inafanya kazi.
Hatua hizi kwa pamoja zinahakikisha kuwa programu inaweza kudebugiwa na kwamba ukaguzi fulani wa usalama unaweza kupitishwa kwa kutumia debugger, ikiruhusu uchambuzi wa kina au mabadiliko ya tabia ya programu.
Hatua ya 2 inahusisha kubadilisha thamani ya bendera kuwa 814267972, ambayo inawakilishwa kwa binary kama 110000101101000000100010100.
Exploiting a Vulnerability
Uonyeshaji ulitolewa kwa kutumia programu yenye udhaifu inayokuwa na kitufe na textview. Kwanza, programu inaonyesha "Crack Me". Lengo ni kubadilisha ujumbe kutoka "Try Again" hadi "Hacked" wakati wa utendaji, bila kubadilisha msimbo wa chanzo.
Checking for Vulnerability
- Programu ilidecompiled kwa kutumia
apktool
ili kufikia failiAndroidManifest.xml
. - Uwepo wa
android_debuggable="true"
katika AndroidManifest.xml unaonyesha kuwa programu inapatikana kwa debugging na inahatarishwa kwa unyakuzi. - Inafaa kutambua kuwa
apktool
inatumika pekee kuangalia hali ya debuggable bila kubadilisha msimbo wowote.
Preparing the Setup
- Mchakato ulijumuisha kuanzisha emulator, kufunga programu yenye udhaifu, na kutumia
adb jdwp
ili kubaini bandari za Dalvik VM zinazotafutwa. - JDWP (Java Debug Wire Protocol) inaruhusu debugging ya programu inayotembea katika VM kwa kufichua bandari ya kipekee.
- Kuelekeza bandari ilikuwa muhimu kwa ajili ya debugging ya mbali, ikifuatiwa na kuunganisha JDB kwenye programu lengwa.
Injecting Code at Runtime
- Unyakuzi ulifanywa kwa kuweka breakpoints na kudhibiti mtiririko wa programu.
- Amri kama
classes
namethods <class_name>
zilitumika kufichua muundo wa programu. - Breakpoint ilipangwa katika njia ya
onClick
, na utekelezaji wake ulidhibitiwa. - Amri za
locals
,next
, naset
zilitumika kukagua na kubadilisha mabadiliko ya ndani, hasa kubadilisha ujumbe wa "Try Again" kuwa "Hacked". - Msimbo uliobadilishwa ulitekelezwa kwa kutumia amri ya
run
, kwa mafanikio kubadilisha matokeo ya programu kwa wakati halisi.
Mfano huu ulionyesha jinsi tabia ya programu inayopatikana kwa debugging inaweza kudhibitiwa, ikionyesha uwezekano wa unyakuzi wa zaidi kama kupata ufikiaji wa shell kwenye kifaa katika muktadha wa programu.
References
- https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.