Android Toepassings Pentesting

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Android Applications Basics

Dit word sterk aanbeveel om hierdie bladsy te begin lees om te weet oor die belangrikste dele wat verband hou met Android-sekuriteit en die gevaarlikste komponente in ’n Android-toepassing:

Android Applications Basics

ADB (Android Debug Bridge)

Dit is die hoofinstrument wat jy nodig het om aan ’n android-toestel (geëmuleer of fisies) te koppel.
ADB laat toe om toestelle te beheer óf oor USB of Network vanaf ’n rekenaar. Hierdie nutsprogram stel in staat tot die kopiëring van lêers in albei rigtings, installasie en uninstallation van apps, uitvoering van shell-opdragte, rugsteun van data, lees van logs, en ander funksies.

Kyk na die volgende lys van ADB Commands om te leer hoe om adb te gebruik.

Smali

Soms is dit interessant om die toepassingskode te wysig om toegang te kry tot verborge inligting (miskien goed obfuskated wagwoorde of flags). Dan kan dit sinvol wees om die apk te dekompileer, die kode te wysig en dit weer te kompileer.
In this tutorial you can learn how to decompile and APK, modify Smali code and recompile the APK with the new functionality. Dit kan baie nuttig wees as ’n alternatief vir verskeie toetse tydens die dinamiese analise wat aangebied gaan word. Hou hierdie moontlikheid altyd in gedagte.

Other interesting tricks

Automated multi-source APK acquisition (justapk)

pip install justapk (Python 3.11+). Die CLI gee JSON na stdout en vordering na stderr (pipe-friendly). Dit probeer ’n deterministiese terugval-ketting oor APK20 → F-Droid → APKPure (mobile API) → APKMirror (HTML scrape) → Uptodown (mobile API) → APKCombo (HTML scrape). Bronne wat deur Cloudflare beskerm word, gebruik curl_cffi met TLS-fingerprint-imponering om werklike kliënte na te boots en bot-detektering te verminder.

justapk download <package>              # auto fallback
justapk download <package> -s apkpure   # pin a source / version / output dir
justapk search telegram
justapk info org.telegram.messenger
justapk convert app.xapk -o output/      # merges splits, re-signs with debug key

convert voeg XAPK/split APKs saam en teken dit met ’n debug key, sodat die resulterende APK-handtekening/provenansie van die oorspronklike verskil (gebruik vir toetsing/ontleding, nie vir produksie-installasies nie).

  • Ekstraheer APK vanaf toestel:
adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • Voeg alle split- en base-apks saam met APKEditor:
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

Android malware tradecraft (loaders, fileless DEX, persistence)

Native staging + fileless DEX loaders

Sommige Android-droppers inkorporeer ’n native library (lib*.so) wat ontsleutels en ’n tweede ELF skryf (bv. l.so) na ’n tydelike pad, dit laai via JNI, en laai dan die werklike logika as DEX slegs in geheue met dalvik.system.InMemoryDexClassLoader. Dit verminder die statiese sigbaarheid van die payload en voorkom dat classes*.dex op skyf geskryf word.

Praktiese triage-punte:

  • Soek na native libs wat vroeg dlopen of System.loadLibrary aanroep, en dan Java-metodes oplos via geobfuskeerde strings op die stapel (bv. XOR-gedekodeer op die stapel).
  • Let op vir InMemoryDexClassLoader in logs/strings of hooks, wat dui op fileless DEX-uitvoering.

Quick Frida hook to dump the in‑memory DEX buffer:

Java.perform(() => {
const IM = Java.use('dalvik.system.InMemoryDexClassLoader');
IM.$init.overload('java.nio.ByteBuffer','java.lang.ClassLoader').implementation = function(buf, parent){
const arr = Java.array('byte', buf.array());
const fos = Java.use('java.io.FileOutputStream').$new("/sdcard/memdex.dex");
fos.write(arr); fos.close();
return this.$init(buf, parent);
};
});

Anti-analysis kill-switch

Packed loaders often self-terminate wanneer emulator- of analise-kontroles misluk (bv. CPU_ABI validasie) deur te roep:

android.os.Process.killProcess(android.os.Process.myPid());

Persistence via foreground service + MediaPlayer loop

’n Liggewig persistensie-patroon is om ’n foreground service lewendig te hou met ’n pinned notification en deurlopend ’n byna-onhoorbare klanklus te speel via MediaPlayer. Dit hou die proses “aktief” en verminder OS-beëindigings weens inaktiwiteit. Soek gebruik van ForegroundService + MediaPlayer wat ’n klein asset herhaal (dikwels ’n paar sekondes lank).

Accessibility overlay + ACTION_SET_TEXT hijacking

Nadat ’n gebruiker Accessibility toegestaan het, kan banking trojans die foreground app monitor, ’n realistiese overlay render (dikwels WebView HTML gestoor as Base64), en transaksievelde vervang deur AccessibilityNodeInfo.ACTION_SET_TEXT te gebruik. Dit maak stil vervanging van die ontvangeradres moontlik terwyl die slagoffer ’n geloofwaardige UI sien.

Minimale voorbeeld van teksvervanging:

Bundle args = new Bundle();
args.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
"ATTACKER_USDT_ADDRESS");
node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, args);

Legitieme push-infrastruktuur as C2 gating

In plaas van pasgemaakte sockets gebruik sommige malware Firebase Cloud Messaging (FCM) as die C2-kanaal. FCM-boodskappe kan telemetry-kontroles veroorsaak (charging state, battery %, temperature, user inactivity) en gate aksies soos mining of fraud vir stealth.

Encrypted native payload staging with filename‑derived keys

Native payloads kan as encrypted ELF blobs afgelewer word en met CipherInputStream() ontsleutel word, met ’n sleutel derived from SHA‑1 of the downloaded filename. Elke filename/version lewer ’n afsonderlike sleutel, wat statiese IOC-hergebruik bemoeilik.

Jezail rooted Android pentesting toolkit (REST API + web UI)

  • Draai op ’n rooted device (Magisk/rootAVD) en begin ’n HTTP server on tcp/8080 met ’n Flutter web UI en REST API.
  • Install the release APK with perms: adb install -g -r jezail.apk, then launch the app (server auto-starts).
  • Endpoints: http://<device-ip>:8080/ (UI), http://<device-ip>:8080/api/json (API listing), http://<device-ip>:8080/api/swagger (Swagger).
  • Emulator port-forward to reach UI/API from the host: adb forward tcp:8080 tcp:8080 then browse http://localhost:8080.

Android Enterprise & Work Profile Attacks

Android Enterprise Work Profile Bypass

Case Studies & Vulnerabilities

Air Keyboard Remote Input Injection

Android Rooting Frameworks Manager Auth Bypass Syscall Hook

Abusing Android Media Pipelines Image Parsers

Firmware Level Zygote Backdoor Libandroid Runtime

Static Analysis

Eerstens, om ’n APK te analiseer moet jy na die Java code kyk using a decompiler.
Lees asseblief, read here to find information about different available decompilers.

Looking for interesting Info

Deur net na die strings van die APK te kyk kan jy soek na passwords, URLs (https://github.com/ndelphit/apkurlgrep), api keys, encryption, bluetooth uuids, tokens en enigiets interessant… kyk selfs vir code execution backdoors of authentication backdoors (hardcoded admin credentials to the app).

Firebase

Betaal spesiale aandag aan firebase URLs en kontroleer of dit verkeerd gekonfigureer is. More information about whats is FIrebase and how to exploit it here.

Basic understanding of the application - Manifest.xml, strings.xml

Die examination of an application’s Manifest.xml and strings.xml files can reveal potential security vulnerabilities. Hierdie lêers kan verkry word deur dekompilers te gebruik of deur die APK-lêeruitbreiding na .zip te hernoem en dit dan uit te pak.

Vulnerabilities identified from the Manifest.xml include:

  • Debuggable Applications: Toepassings gestel as debuggable (debuggable="true") in die Manifest.xml lêer vorm ’n risiko aangesien dit verbindings toelaat wat tot eksploitasie kan lei. Vir verdere begrip oor hoe om debuggable applications te eksploiteer, verwys na ’n tutorial oor die vind en eksploitasie van debuggable applications op ’n toestel.
  • Backup Settings: Die attribuut android:allowBackup="false" moet eksplisiet gestel word vir toepassings wat met sensitiewe inligting werk om ongemagtigde data-backups via adb te voorkom, veral wanneer usb debugging aangeskakel is.
  • Network Security: Custom network security configurations (android:networkSecurityConfig="@xml/network_security_config") in res/xml/ kan sekuriteitsbesonderhede spesifiseer soos certificate pins en HTTP traffic-instellings. ’n Voorbeeld is om HTTP traffic vir spesifieke domains toe te laat.
  • Exported Activities and Services: Die identifisering van exported activities and services in die manifest kan komponente uitwys wat misbruik kan word. Verdere analise tydens dynamic testing kan openbaar hoe om hierdie komponente te eksploiteer.
  • Content Providers and FileProviders: Blootgestelde content providers kan ongemagtigde toegang of wysiging van data toelaat. Die konfigurering van FileProviders moet ook noukeurig ondersoek word.
  • Broadcast Receivers and URL Schemes: Hierdie komponente kan vir eksploitasie aangewend word, met besondere aandag aan hoe URL schemes bestuur word vir input-kwesbaarhede.
  • SDK Versions: Die minSdkVersion, targetSDKVersion, en maxSdkVersion attributen dui die ondersteunede Android-weergawes aan, wat die belangrikheid uitlig om nie verouderde, kwesbare Android-weergawes te ondersteun nie.

Uit die strings.xml lêer kan sensitiewe inligting soos API keys, custom schemas, en ander developer notes gevind word, wat die behoefte aan ’n noukeurige hersiening van hierdie hulpbronne beklemtoon.

Tapjacking

Tapjacking is ’n aanval waar ’n malicious application gelanseer word en homself bo-op ’n slagoffer-applikasie posisioneer. Sodra dit sigbaar die slagoffer-app verskerm, is sy gebruikerskoppelvlak so ontwerp om die gebruiker te mislei om daarmee te interaksioneer, terwyl dit die interaksie aan die slagoffer-app deurgee.
In werklikheid is dit ’n manier om die gebruiker te blind vir die wete dat hulle eintlik aksies op die slagoffer-app uitvoer.

Find more information in:

Tapjacking

Task Hijacking

’n activity met die launchMode gestel op singleTask sonder enige taskAffinity gedefinieer is kwesbaar vir Task Hijacking. Dit beteken dat ’n application geïnstalleer kan word en as dit voor die regte toepassing gelanseer word, dit die taak van die regte toepassing kan hijack (sodat die gebruiker met die malicious application dink hy gebruik die regte een).

More info in:

Android Task Hijacking

Insecure data storage

Internal Storage

In Android is lêers stored in internal storage ontwerp om uitsluitlik deur die app wat dit geskep het toeganklik te wees. Hierdie sekuriteitsmaatreël word deur die Android-bedryfstelsel afgedwing en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van meeste toepassings. Ontwikkelaars gebruik egter soms modi soos MODE_WORLD_READABLE en MODE_WORLD_WRITABLE om lêers tussen verskillende toepassings te share. Hierdie modi beperk egter nie toegang tot hierdie lêers deur ander toepassings nie, insluitend moontlik malicious ones.

  1. Static Analysis:
  • Ensure dat die gebruik van MODE_WORLD_READABLE en MODE_WORLD_WRITABLE noukeurig ondersoek word. Hierdie modi kan lêers blootstel aan ongemagtigde toegang.
  1. Dynamic Analysis:
  • Verify die permissions op lêers wat deur die app geskep is. Spesifiek, kontroleer of enige lêers ingestel is om wêreldwyd leesbaar of skryfbaar te wees. Dit kan ’n beduidende sekuriteitsrisiko inhou aangesien dit enige toepassing op die toestel toelaat om hierdie lêers te read of te modify, ongeag oorsprong of doel.

External Storage

Wanneer daar met lêers op external storage, soos SD Cards, gewerk word, moet sekere voorsorgmaatreëls getref word:

  1. Accessibility:
  • Lêers op external storage is globaal leesbaar en skryfbaar. Dit beteken enige toepassing of gebruiker kan toegang tot hierdie lêers kry.
  1. Security Concerns:
  • Gegewe die maklike toegang, word dit aangeraai om nie sensitiewe inligting op external storage te stoor nie.
  • External storage kan verwyder of deur enige toepassing benader word, wat dit minder veilig maak.
  1. Handling Data from External Storage:
  • Voer altyd input validation uit op data wat vanaf external storage verkry word. Dit is noodsaaklik omdat die data van ’n untrusted source afkomstig is.
  • Dit word sterk ontrafel om executables of class files op external storage te stoor vir dinamiese lading.
  • As jou toepassing executable files vanaf external storage moet oplaai, verseker dat hierdie lêers signed and cryptographically verified is voordat hulle dinamies gelaai word. Hierdie stap is noodsaaklik om die sekuriteitsintegriteit van jou toepassing te behou.

External storage kan accessed word in /storage/emulated/0 , /sdcard , /mnt/sdcard

Tip

Vanaf Android 4.4 (API 17) het die SD card ’n gidsstruktuur wat toegang van ’n app beperk tot die gids wat spesifiek vir daardie app is. Dit verhinder dat malicious application lees- of skryfaksie op ’n ander app se lêers kry.

Sensitive data stored in clear-text

  • Shared preferences: Android laat elke toepassing toe om maklik xml-lêers te stoor in die pad /data/data/<packagename>/shared_prefs/ en soms is dit moontlik om sensitiewe inligting in clear-text in daardie gids te vind.
  • Databases: Android laat elke toepassing toe om sqlite-databasisse te stoor in die pad /data/data/<packagename>/databases/ en soms is dit moontlik om sensitiewe inligting in clear-text in daardie gids te vind.

Broken TLS

Accept All Certificates

Om een of ander rede aanvaar ontwikkelaars soms alle certificates selfs al stem byvoorbeeld die hostname nie ooreen nie, met reëls kode soos die volgende:

SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.

Gebroke Kriptografie

Swak Sleutelbestuursprosesse

Sommige ontwikkelaars stoor sensitiewe data in die lokale stoorplek en enkripteer dit met ’n sleutel wat hardcoded/voorspelbaar in die kode is. Dit behoort nie te gebeur nie aangesien omgekeerde ingenieurswese aanvallers in staat kan stel om die vertroulike inligting uit te trek.

Gebruik van Onveilige en/of Verouderde Algoritmes

Ontwikkelaars behoort nie verouderde algoritmes te gebruik om magtigingstoetse uit te voer, data te stoor of te stuur nie. Sommige van hierdie algoritmes is: RC4, MD4, MD5, SHA1… As hashes byvoorbeeld gebruik word om wagwoorde te stoor, behoort hashes te gebruik wat weerstandbiedend is teen brute-force en met salt.

Ander kontroles

  • It’s recommended to obfuscate the APK to difficult the reverse engineer labour to attackers.
  • If the app is sensitive (like bank apps), it should perform it’s own checks to see if the mobile is rooted and act in consequence.
  • If the app is sensitive (like bank apps), it should check if an emulator is being used.
  • If the app is sensitive (like bank apps), it should check it’s own integrity before executing it to check if it was modified.
  • Use APKiD to check which compiler/packer/obfuscator was used to build the APK

React Native Application

Read the following page to learn how to easily access javascript code of React applications:

React Native Application

Xamarin Applications

Read the following page to learn how to easily access C# code of a xamarin applications:

Xamarin Apps

Superpacked Applications

According to this blog post superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps… and a faster way which involves to execute the application and gather the decompressed files from the filesystem.

Geautomatiseerde Statiese Kode-analise

Die tool mariana-trench is in staat om vulnerabilities te vind deur die code van die toepassing te scan. Hierdie tool bevat ’n reeks known sources (wat die tool aandui waar die input deur die gebruiker beheer word), sinks (wat gevaarlike plekke aandui waar kwaadwillige gebruikersinvoer skade kan veroorsaak) en rules. Hierdie rules dui die kombinasie van sources-sinks aan wat ’n kwetsbaarheid aandui.

Met hierdie kennis sal mariana-trench die kode hersien en moontlike vulnerabilities daarin vind.

Secrets leaked

An application may contain secrets (API keys, passwords, hidden urls, subdomains…) inside of it that you might be able to discover. You could us a tool such as https://github.com/dwisiswant0/apkleaks

Bypass Biometric Authentication

Bypass Biometric Authentication (Android)

Ander interessante funksies

  • Code execution: Runtime.exec(), ProcessBuilder(), native code:system()
  • Send SMSs: sendTextMessage, sendMultipartTestMessage
  • Native functions declared as native: public native, System.loadLibrary, System.load
  • Read this to learn how to reverse native functions
  • In-memory native code execution via JNI (downloaded shellcode → mmap/mprotect → call):

In Memory Jni Shellcode Execution

Ander truuks

content:// protocol



Dinamiese analise

First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.

Aanlyn dinamiese analise

You can create a free account in: https://appetize.io/. This platform allows you to upload and execute APKs, so it is useful to see how an apk is behaving.

You can even see the logs of your application in the web and connect through adb.

Thanks to the ADB connection you can use Drozer and Frida inside the emulators.

Lokale dinamiese analise

Gebruik van ’n emulator

  • Android Studio (You can create x86 and arm devices, and according to this latest x86 versions support ARM libraries without needing an slow arm emulator).
  • Learn to set it up in this page:

AVD - Android Virtual Device

  • Genymotion (Free version: Personal Edition, you need to create an account. It’s recommend to download the version WITH VirtualBox to avoid potential errors.)
  • Nox (Free, but it doesn’t support Frida or Drozer).

Tip

When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible.

To install google services (like AppStore) in Genymotion you need to click on the red marked button of the following image:

Also, notice that in the configuration of the Android VM in Genymotion you can select Bridge Network mode (this will be useful if you will be connecting to the Android VM from a different VM with the tools).

Gebruik ’n fisiese toestel

You need to activate the debugging options and it will be cool if you can root it:

  1. Settings.
  2. (FromAndroid 8.0) Select System.
  3. Select About phone.
  4. Press Build number 7 times.
  5. Go back and you will find the Developer options.

Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.
I will suggest to perform this initial dynamic analysis using MobSF dynamic analysis + pidcat, so we will be able to learn how the application works while MobSF captures a lot of interesting data you can review later on.

Magisk/Zygisk quick notes (recommended on Pixel devices)

  • Patch boot.img with the Magisk app and flash via fastboot to get systemless root
  • Enable Zygisk + DenyList for root hiding; consider LSPosed/Shamiko when stronger hiding is required
  • Keep original boot.img to recover from OTA updates; re-patch after each OTA
  • For screen mirroring, use scrcpy on the host

Onbedoelde Data Leakage

Logging

Ontwikkelaars behoort versigtig te wees om debugging information publieklik bloot te stel, aangesien dit tot sensitiewe data leaks kan lei. Die tools pidcat en adb logcat word aanbeveel om toepassingslogs te monitor om sensitiewe inligting te identifiseer en te beskerm. Pidcat word verkies vir sy gebruiksgemak en leesbaarheid.

Warning

Note that from later newer than Android 4.0, applications are only able to access their own logs. So applications cannot access other apps logs.
Anyway, it’s still recommended to not log sensitive information.

Copy/Paste Buffer Caching

Android’s clipboard-based framework enables copy-paste functionality in apps, yet poses a risk as other applications can access the clipboard, potentially exposing sensitive data. It’s crucial to disable copy/paste functions for sensitive sections of an application, like credit card details, to prevent data leaks.

Crash Logs

If an application crashes and saves logs, these logs can assist attackers, particularly when the application cannot be reverse-engineered. To mitigate this risk, avoid logging on crashes, and if logs must be transmitted over the network, ensure they are sent via an SSL channel for security.

As pentester, try to take a look to these logs.

Analytics Data Sent To 3rd Parties

Applications often integrate services like Google Adsense, which can inadvertently leak sensitive data due to improper implementation by developers. To identify potential data leaks, it’s advisable to intercept the application’s traffic and check for any sensitive information being sent to third-party services.

SQLite DBs

Most of the applications will use internal SQLite databases to save information. During the pentest take a look to the databases created, the names of tables and columns and all the data saved because you could find sensitive information (which would be a vulnerability).
Databases should be located in /data/data/the.package.name/databases like /data/data/com.mwr.example.sieve/databases

If the database is saving confidential information and is encrypted but you can find the password inside the application it’s still a vulnerability.

Enumerate the tables using .tables and enumerate the columns of the tables doing .schema <table_name>

Drozer (Exploit Activities, Content Providers and Services)

From Drozer Docs: Drozer allows you to assume the role of an Android app and interact with other apps. It can do anything that an installed application can do, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .
Drozer is s useful tool to exploit exported activities, exported services and Content Providers as you will learn in the following sections.

Exploiting exported Activities

Read this if you want to refresh what is an Android Activity.
Also remember that the code of an activity starts in the onCreate method.

Magtigingsomseiling

When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with sensitive information is exported you could bypass the authentication mechanisms to access it.

Learn how to exploit exported activities with Drozer.

You can also start an exported activity from adb:

  • PackageName is com.example.demo
  • Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

NOTE: MobSF sal die gebruik van singleTask/singleInstance as android:launchMode in an activity as kwaadwillig beskou, maar volgens this blyk dit net gevaarlik te wees op ouer weergawes (API versions < 21).

Tip

Note that an authorisation bypass is not always a vulnerability, it would depend on how the bypass works and which information is exposed.

Sensitive information leakage

Activities kan ook resultate teruggee. As jy daarin slaag om ’n exported en unprotected activity te vind wat die setResult metode aanroep en sensitiewe inligting teruggee, is daar ’n sensitive information leakage.

Tapjacking

As Tapjacking nie voorkom word nie, kan jy die exported activity misbruik om die gebruiker onvoorsiene handelinge uit te laat voer. For more info about what is Tapjacking follow the link.

Exploiting Content Providers - Accessing and manipulating sensitive information

Read this if you want to refresh what is a Content Provider.
Content providers word hoofsaaklik gebruik om data te deel. As ’n app beskikbare content providers het, kan jy dalk sensitiewe data daaruit onttrek. Dit is ook interessant om moontlike SQL injections en Path Traversals te toets aangesien hulle kwesbaar kan wees.

Learn how to exploit Content Providers with Drozer.

Exploiting Services

Read this if you want to refresh what is a Service.
Onthou dat die aksies van ’n Service in die metode onStartCommand begin.

’n Service is basies iets wat data kan ontvang, dit kan verwerk en ’n reaksie (of nie) kan teruggee. As ’n toepassing sekere services blootstel, behoort jy die code na te gaan om te verstaan wat dit doen en dit dinamies te test om vertroulike inligting te onttrek, authentication measures te omseil…
Learn how to exploit Services with Drozer.

Exploiting Broadcast Receivers

Read this if you want to refresh what is a Broadcast Receiver.
Onthou dat die aksies van ’n Broadcast Receiver in die metode onReceive begin.

’n Broadcast receiver wag op ’n tipe boodskap. Afhangend van hoe die receiver die boodskap hanteer, kan dit kwesbaar wees.
Learn how to exploit Broadcast Receivers with Drozer.

Jy kan deep links handmatig soek deur gereedskap soos MobSF of skripte soos this one.
Jy kan open ’n verklaarde scheme met adb of ’n browser:

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

Let daarop dat jy die pakketnaam kan weglaat en die mobiele toestel sal outomaties die app aanroep wat daardie skakel behoort oop te maak.

<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

Code executed

Om die code that will be executed in the App te vind, gaan na die activity wat deur die deeplink aangeroep word en soek die funksie onNewIntent.

Sensitiewe inligting

Elke keer as jy ’n deep link vind, kontroleer dat dit nie sensitiewe data (soos wagwoorde) via URL-parameters ontvang nie, omdat enige ander toepassing die deep link kan naboots en daardie data steel!

Parameters in path

Jy moet ook nagaan of enige deep link ’n parameter binne die path van die URL gebruik, soos: https://api.example.com/v1/users/{username} , in daardie geval kan jy ’n path traversal afdwing deur iets soos toe te gaan: example://app/users?username=../../unwanted-endpoint%3fparam=value .
Let daarop dat as jy die korrekte endpoints binne die toepassing vind jy moontlik ’n Open Redirect kan veroorsaak (as ’n deel van die path as domeinnaam gebruik word), account takeover (as jy gebruikersbesonderhede kan wysig sonder ’n CSRF token en die vuln endpoint die korrekte metode gebruik) en enige ander vuln. More info about this here.

Meer voorbeelde

’n Interessante bug bounty verslag oor links (/.well-known/assetlinks.json).

Transportlaag-inspeksie en verifikasie-foute

  • Sertifikate word nie altyd behoorlik geïnspekteer nie deur Android-apps. Dit is algemeen dat hierdie toepassings waarskuwings ignoreer en self-ondertekende sertifikate aanvaar of, in sommige gevalle, terugval na die gebruik van HTTP-verbindinge.
  • Onderhandelinge tydens die SSL/TLS-handshake is soms swak, en gebruik onveilige cipher suites. Hierdie kwesbaarheid maak die verbinding vatbaar vir man-in-the-middle (MITM)-aanvalle, wat aanvallers toelaat om die data te ontsleutel.
  • Leakage of private information is ’n risiko wanneer toepassings met veilige kanale autentiseer maar dan oor nie-veilige kanale kommunikeer vir ander transaksies. Hierdie benadering beskerm nie sensitiewe data, soos sessie-cookies of gebruikersbesonderhede, teen onderskep deur kwaadwillige entiteite nie.

Sertifikaatverifikasie

Ons sal fokus op certificate verification. Die integriteit van die bediener se sertifikaat moet geverifieer word om sekuriteit te verbeter. Dit is van kritieke belang, aangesien onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor ongeënkripteerde kanale beduidende risiko’s kan inhou. Vir gedetailleerde stappe oor die verifikasie van bedienersertifikate en die aanspreek van kwesbaarhede, verskaf hierdie hulpbron omvattende leiding.

SSL Pinning

SSL Pinning is ’n sekuriteitsmaatreël waar die toepassing die bediener se sertifikaat verifieer teen ’n bekende kopie wat binne die toepassing self gestoor is. Hierdie metode is essensieel om MITM-aanvalle te voorkom. Die implementering van SSL Pinning word sterk aanbeveel vir toepassings wat sensitiewe inligting hanteer.

Verkeerinspeksie

Om HTTP-verkeer te inspekteer, is dit nodig om die proxy tool se sertifikaat te installeer (bv. Burp). Sonder die installering van hierdie sertifikaat mag gekodeerde verkeer nie deur die proxy sigbaar wees nie. Vir ’n gids oor die installering van ’n custom CA certificate, klik hier.

Toepassings wat gemik is op API Level 24 and above vereis wysigings aan die Network Security Config om die proxy se CA certificate te aanvaar. Hierdie stap is krities vir die inspeksie van gekodeerde verkeer. Vir instruksies oor die wysiging van die Network Security Config, raadpleeg hierdie tutorial.

As Flutter gebruik word, moet jy die instruksies op hierdie bladsy volg. Dit is omdat net om die sertifikaat in die store by te voeg nie sal werk nie, aangesien Flutter sy eie lys van geldige CAs het.

Statiese opsporing van SSL/TLS pinning

Voordat jy runtime bypasses probeer, karteer vinnig waar pinning in die APK afgedwing word. Statiese ontdekking help jou om hooks/patches te beplan en op die regte code paths te fokus.

Tool: SSLPinDetect

  • Open-source static-analysis utility wat die APK na Smali (via apktool) dekompileer en skandeer vir gekuurateerde regex-patrone van SSL/TLS pinning implementasies.
  • Rapporteer die presiese file path, lynnommer, en ’n code snippet vir elke treffers.
  • Dek algemene frameworks en custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init met custom TrustManagers/KeyManagers, en Network Security Config XML pins.

Installeer

  • Vereistes: Python >= 3.8, Java on PATH, apktool
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
pip install -r requirements.txt

Gebruik

# Basic
python sslpindetect.py -f app.apk -a apktool.jar

# Verbose (timings + per-match path:line + snippet)
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v

Voorbeeld patroonreëls (JSON) Gebruik of brei signatures uit om proprietary/custom pinning styles op te spoor. Jy kan jou eie JSON laai en op groot skaal scan.

{
"OkHttp Certificate Pinning": [
"Lcom/squareup/okhttp/CertificatePinner;",
"Lokhttp3/CertificatePinner;",
"setCertificatePinner"
],
"TrustManager Override": [
"Ljavax/net/ssl/X509TrustManager;",
"checkServerTrusted"
]
}

Notas en wenke

  • Vinnige skandering op groot apps via multi-threading en memory-mapped I/O; vooraf-gekombileerde regex verminder overhead/valse positiewe.
  • Patroonversameling: https://github.com/aancw/smali-sslpin-patterns
  • Tipiese detectiedoelwitte om daarna te triage:
  • OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp pakketverwysings
  • Aangepaste TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overskrywings
  • Aangepaste SSL contexts: SSLContext.getInstance + SSLContext.init met aangepaste managers
  • Deklaratiewe pins in res/xml network security config en manifest verwysings
  • Gebruik die ooreenstemmende lokasies om Frida hooks, static patches, of config reviews te beplan voordat jy dinamiese toetsing doen.

Om SSL Pinning te omseil

Wanneer SSL Pinning geïmplementeer is, word dit nodig om dit te omseil om HTTPS-verkeer te inspekteer. Verskeie metodes is beskikbaar vir hierdie doel:

Soek na algemene webkwesbaarhede

Dit is belangrik om ook binne die toepassing na algemene webkwesbaarhede te soek. Gedetailleerde inligting oor die identifisering en vermindering van hierdie kwesbaarhede val buite die bestek van hierdie opsomming, maar word elders uitgebreid behandel.

Frida

Frida is ’n dinamiese instrumenteringstoolkit vir ontwikkelaars, reverse-engineers, en veiligheidsnavorsers.
Jy kan toegang kry tot ’n toepassing wat aan die hardloop is en hook methods tydens runtime gebruik om die gedrag te verander, waardes te verander, waardes te onttrek of ander kode uit te voer.
As jy Android-toepassings wil pentest jy moet weet hoe om Frida te gebruik.

Anti-instrumentasie & SSL pinning omseil-werkstroom

Android Anti Instrumentation And Ssl Pinning Bypass

Dump Geheue - Fridump

Kontroleer of die toepassing sensitiewe inligting in die geheue stoor wat dit nie behoort te stoor nie, soos wagwoorde of mnemonics.

Met Fridump3 kan jy die geheue van die app dump met:

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Dit sal die geheue in die ./dump folder dump, en daarbinne kan jy met iets soos grep soek:

strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Sensitiewe data in Keystore

In Android is die Keystore die beste plek om sensitiewe data te stoor, maar met genoeg voorregte is dit steeds moontlik om toegang daartoe te kry. Aangesien toepassings hier geneig is om sensitiewe data in clear text te stoor, behoort die pentests dit as root user te kontroleer, aangesien iemand met fisiese toegang tot die toestel hierdie data kan steel.

Selfs as ’n app data in die keystore stoor, moet die data versleuteld wees.

Om toegang tot die data binne die keystore te kry, kan jy hierdie Frida script gebruik: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Fingerprint/Biometrics Bypass

Deur die volgende Frida-skrip te gebruik, kan dit moontlik wees om die bypass fingerprint authentication wat Android-toepassings dalk uitvoer om sekere beskerm sekere sensitiewe gebiede:

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Agtergrondbeelde

Wanneer jy ’n toepassing op die agtergrond plaas, stoor Android ’n snapshot of the application sodat wanneer dit na die voorgrond herstel word, dit die beeld begin laai voordat die app self laai, sodat dit lyk asof die app vinniger gelaai het.

As hierdie snapshot egter sensitiewe inligting bevat, kan iemand met toegang tot die snapshot daardie inligting steel daardie inligting (let wel: jy het root-toegang nodig om dit te bereik).

Die snapshots word gewoonlik gestoor by: /data/system_ce/0/snapshots

Android bied ’n manier om die vaslegging van skermskote te voorkom deur die FLAG_SECURE layout parameter te stel. Deur hierdie flag te gebruik, word die vensterinhoud as veilig beskou, wat verhoed dat dit in skermskote verskyn of op nie-veilige skerms vertoon word.

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Android Application Analyzer

Hierdie hulpmiddel kan jou help om verskillende gereedskap tydens die dinamiese analise te bestuur: https://github.com/NotSoSecure/android_application_analyzer

Intent Injection

Ontwikkelaars skep dikwels proxy-komponente soos activities, services, en broadcast receivers wat hierdie Intents hanteer en dit aan metodes soos startActivity(...) of sendBroadcast(...) deurgee, wat riskant kan wees.

Die gevaar lê in die toelaat van aanvallers om non-exported app-komponente te aktiveer of sensitiewe content providers te bereik deur hierdie Intents te mislei. ’n Noemenswaardige voorbeeld is die WebView-komponent wat URLs na Intent-objekte omskakel via Intent.parseUri(...) en dit dan uitvoer, wat moontlik tot kwaadwillige Intent injections kan lei.

Belangrike punte

  • Intent Injection is soortgelyk aan die web se Open Redirect-kwessie.
  • Eksploite behels dat Intent-objekte as extras deurgegee word, wat omgeleid kan word om onveilige operasies uit te voer.
  • Dit kan non-exported komponente en content providers aan aanvallers blootstel.
  • WebView se URL-na-Intent omskakeling kan onbedoelde aksies vergemaklik.

Android Client Side Injections en ander

Jy ken waarskynlik hierdie tipe kwesbaarhede vanuit die web. Wees besonders versigtig met hierdie kwesbaarhede in ’n Android-toepassing:

  • SQL Injection: Wanneer jy met dinamiese navrae of Content-Providers werk, maak seker jy gebruik geparameteriseerde navrae.
  • JavaScript Injection (XSS): Verifieer dat JavaScript- en Plugin-ondersteuning vir enige WebViews gedeaktiveer is (standaard gedeaktiveer). More info here.
  • Local File Inclusion: WebViews moet toegang tot die lêerstelsel gedeaktiveer hê (standaard geaktiveer) - (webview.getSettings().setAllowFileAccess(false);). More info here.
  • Eternal cookies: In verskeie gevalle, wanneer die Android-toepassing die sessie beëindig, word die koekie nie ingetrek nie of dit kan selfs na skyf geskryf word
  • Secure Flag in cookies

Outomatiese Analise

MobSF

Statiese analise

Kwetsbaarheidsassessering van die toepassing met ’n netjiese webgebaseerde frontend. Jy kan ook dinamiese analise uitvoer (maar jy moet die omgewing voorberei).

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Notice that MobSF can analyse Android(apk), IOS(ipa) and Windows(apx) applications (Windows applications must be analyzed from a MobSF installed in a Windows host).
Also, if you create a ZIP file with the source code if an Android or an IOS app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.

MobSF also allows you to diff/Compare analysis and to integrate VirusTotal (you will need to set your API key in MobSF/settings.py and enable it: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). You can also set VT_UPLOAD to False, then the hash will be upload instead of the file.

Geassisteerde Dynamic analysis with MobSF

MobSF kan ook baie nuttig wees vir dynamic analysis in Android, maar in daardie geval sal jy MobSF en genymotion op jou host moet installeer (a VM of Docker sal nie werk nie). Nota: You need to start first a VM in genymotion and then MobSF.
Die MobSF dynamic analyser kan:

  • Dump application data (URLs, logs, clipboard, screenshots made by you, screenshots made by “Exported Activity Tester”, emails, SQLite databases, XML files, and other created files). Al hierdie word outomaties gedoen, behalwe vir die skermskote — jy moet druk wanneer jy ’n skermskoot wil neem of jy moet op “Exported Activity Tester” druk om skermskote van al die exported activities te kry.
  • Capture HTTPS traffic
  • Use Frida to obtain runtime information

From android versions > 5, it will automatically start Frida and will set global proxy settings to capture traffic. It will only capture traffic from the tested application.

Frida

By default, it will also use some Frida Scripts to bypass SSL pinning, root detection and debugger detection and to monitor interesting APIs.
MobSF kan ook invoke exported activities, grab screenshots of them and save them for the report.

To start the dynamic testing press the green bottom: “Start Instrumentation”. Press the “Frida Live Logs” to see the logs generated by the Frida scripts and “Live API Monitor” to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing “Start Instrumentation”).
MobSF also allows you to load your own Frida scripts (to send the results of your Friday scripts to MobSF use the function send()). It also has several pre-written scripts you can load (you can add more in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), just select them, press “Load” and press “Start Instrumentation” (you will be able to see the logs of that scripts inside “Frida Live Logs”).

Moreover, you have some Auxiliary Frida functionalities:

  • Enumerate Loaded Classes: Dit sal al die gelaaide classes druk
  • Capture Strings: Dit sal al die gevangen strings druk terwyl die toepassing gebruik word (baie rumoerig)
  • Capture String Comparisons: Kan baie nuttig wees. Dit sal die 2 strings wat vergelyk word wys en of die resultaat True of False was.
  • Enumerate Class Methods: Voer die klasnaam in (soos “java.io.File”) en dit sal alle metodes van die klas druk.
  • Search Class Pattern: Soek klasse volgens patroon
  • Trace Class Methods: Trace ’n hele klas (sien insette en uitsette van alle metodes van die klas). Onthou dat MobSF standaard verskeie interessante Android Api metodes trace.

Once you have selected the auxiliary module you want to use you need to press “Start Intrumentation” and you will see all the outputs in “Frida Live Logs”.

Shell

Mobsf gee jou ook ’n shell met sommige adb commands, MobSF commands, en algemene shell commands onderaan die dynamic analysis bladsy. Sommige interessante commands:

help
shell ls
activities
exported_activities
services
receivers

HTTP tools

Wanneer HTTP-verkeer vasgelê word, kan jy ’n lelike weergawe van die vasgelêde verkeer sien op die “HTTP(S) Traffic” onderknoppie of ’n netter weergawe in die groen “Start HTTPTools” knoppie. Vanaf die tweede opsie kan jy die vasgelêde requests na proxies soos Burp of Owasp ZAP stuur.
Om dit te doen, skakel Burp aan –> skakel Intercept af –> in MobSB HTTPTools kies die request –> druk “Send to Fuzzer” –> kies die proxy address (http://127.0.0.1:8080\).

Sodra jy die dynamic analysis met MobSF klaar het, kan jy op “Start Web API Fuzzer” druk om fuzz http requests en na kwetsbaarhede te soek.

Tip

Na die uitvoering van ’n dynamic analysis met MobSF kan die proxy-instellings verkeerd gekonfigureer wees en sal jy dit nie vanaf die GUI kan regmaak nie. Jy kan die proxy-instellings regstel deur:

adb shell settings put global http_proxy :0

Geassisteerde Dynamic Analysis met Inspeckage

Jy kan die tool kry by Inspeckage.
Hierdie tool gebruik ’n paar Hooks om vir jou te wys wat in die toepassing gebeur terwyl jy ’n dynamic analysis uitvoer.

Yaazhini

Dit is ’n geweldige tool om static analysis met ’n GUI uit te voer

Qark

Hierdie tool is ontwerp om te soek na verskeie security related Android application vulnerabilities, hetsy in source code of packaged APKs. Die tool is ook capable of creating a “Proof-of-Concept” deployable APK en ADB commands, om sommige van die gevonde kwetsbaarhede te benut (Exposed activities, intents, tapjacking…). Soos met Drozer, hoef die toetstoestel nie geroot te word nie.

pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • Toon alle onttrekte lêers vir maklike verwysing
  • Dekompileer APK-lêers outomaties na Java- en Smali-formaat
  • Analiseer AndroidManifest.xml vir algemene kwesbaarhede en gedrag
  • Statiese bronkode-ontleding vir algemene kwesbaarhede en gedrag
  • Toestelinligting
  • en meer
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER is ’n command-line toepassing wat in Windows, MacOS X en Linux gebruik kan word, wat .apk lêers ontleed op soek na kwesbaarhede. Dit doen dit deur APKs te dekomprimeer en ’n reeks reëls toe te pas om daardie kwesbaarhede op te spoor.

Alle reëls is gesentraliseer in ’n rules.json lêer, en elke maatskappy of tester kan hul eie reëls skep om te ontleed wat hulle benodig.

Laai die nuutste binaries af vanaf die download page

super-analyzer {apk_file}

StaCoAn

StaCoAn is ’n crossplatform hulpmiddel wat ontwikkelaars, bugbounty hunters en ethical hackers help met die uitvoering van static code analysis op mobiele toepassings.

Die konsep is dat jy jou mobiele toepassingslêer (.apk of .ipa lêer) op die StaCoAn-toepassing sleep en dit sal ’n visuele en draagbare verslag vir jou genereer. Jy kan die instellings en wordlists aanpas om ’n aangepaste ervaring te kry.

Laai latest release:

./stacoan

AndroBugs

AndroBugs Framework is ’n Android kwesbaarheid-analise stelsel wat ontwikkelaars of hackers help om potensiële sekuriteitskwesbaarhede in Android-toepassings te vind.
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarn is ’n hulpmiddel waarvan die hoofdoel is om die gebruiker te identifiseer en te waarsku oor potensieel kwaadwillige gedraginge wat deur ’n Android-toepassing ontwikkel is.

Die deteksie word uitgevoer deur die static analysis van die toepassing se Dalvik bytecode, voorgestel as Smali, met die androguard biblioteek.

Hierdie hulpmiddel soek na algemene gedrag van “slegte” toepassings soos: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution…

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARA is a Mobile Application Reverse engineering and Analysis Framework. Dit is ’n instrument wat algemeen gebruikte mobiele toepassings reverse engineering- en analise-instrumente saamvoeg om te help met die toetsing van mobiele toepassings teen die OWASP mobile security threats. Die doel is om hierdie taak makliker en gebruikersvriendelik te maak vir mobiele toepassing-ontwikkelaars en sekuriteitsprofessionals.

It is able to:

Koodous

Nuttig om malware op te spoor: https://koodous.com/

Obfuscating/Deobfuscating code

Note that depending the service and configuration you use to obfuscate the code. Secrets may or may not ended obfuscated.

ProGuard

From Wikipedia: ProGuard is an open source command-line tool that shrinks, optimizes and obfuscates Java code. Dit is in staat om bytecode te optimaliseer asook om ongebruikte instruksies op te spoor en te verwyder. ProGuard is gratis sagteware en word versprei onder die GNU General Public License, version 2.

ProGuard word versprei as deel van die Android SDK en loop wanneer die toepassing in release mode gebou word.

DexGuard

Vind ’n stap-vir-stap gids om die apk te deobfuscate by https://blog.lexfo.fr/dexguard.html

(From that guide) Last time we checked, the Dexguard mode of operation was:

  • load a resource as an InputStream;
  • feed the result to a class inheriting from FilterInputStream to decrypt it;
  • do some useless obfuscation to waste a few minutes of time from a reverser;
  • feed the decrypted result to a ZipInputStream to get a DEX file;
  • finally load the resulting DEX as a Resource using the loadDex method.

DeGuard

DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.

Jy kan ’n obfuscated APK na hul platform oplaai.

[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app

Dit is ’n LLM tool om enige potensiële sekuriteitskwesbaarhede in android apps te vind en android app-kode te deobfuscate. Gebruik Google’s Gemini public API.

Simplify

It is a generic android deobfuscator. Simplify virtually executes an app to understand its behavior and then tries to optimize the code so it behaves identically but is easier for a human to understand. Each optimization type is simple and generic, so it doesn’t matter what the specific type of obfuscation is used.

APKiD

APKiD gives you information about how an APK was made. It identifies many compilers, packers, obfuscators, and other weird stuff. It’s PEiD for Android.

Manual

Read this tutorial to learn some tricks on how to reverse custom obfuscation

Labs

Androl4b

AndroL4b is an Android security virtual machine based on ubuntu-mate and includes a collection of the latest framework, tutorials and labs from different security geeks and researchers for reverse engineering and malware analysis.

References

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks