Pentesting aplikacji Android
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Podstawy aplikacji Android
Zaleca się rozpoczęcie od przeczytania tej strony, aby poznać najważniejsze elementy związane z bezpieczeństwem Androida oraz najbardziej niebezpieczne komponenty w aplikacji na Androida:
ADB (Android Debug Bridge)
To główne narzędzie potrzebne do połączenia z urządzeniem Android (emulowanym lub fizycznym).
ADB pozwala kontrolować urządzenia zarówno przez USB, jak i sieć z poziomu komputera. To narzędzie umożliwia kopiowanie plików w obie strony, instalację i odinstalowanie aplikacji, wykonywanie poleceń shell, tworzenie kopii zapasowych danych, odczytywanie logów i inne funkcje.
Zapoznaj się z następującą listą ADB Commands, aby dowiedzieć się, jak używać adb.
Smali
Czasami warto zmodyfikować kod aplikacji, aby uzyskać dostęp do ukrytych informacji (np. silnie obfuskowanych haseł lub flag). W takim przypadku można zdekompilować apk, zmodyfikować kod i ponownie go skompilować.
W tym tutorialu możesz nauczyć się, jak zdekompilować APK, zmodyfikować kod Smali i ponownie skompilować APK z nową funkcjonalnością. Może to być bardzo przydatne jako alternatywa dla kilku testów podczas analizy dynamicznej, które zostaną przedstawione. Zawsze miej tę możliwość na uwadze.
Inne interesujące triki
- Spoofing your location in Play Store
- Play Integrity attestation spoofing (SafetyNet replacement)
- Android app-level virtualization / app cloning abuse & detection
- Shizuku Privileged API (ADB-based non-root privileged access)
- Exploiting Insecure In-App Update Mechanisms
- Abusing Accessibility Services (Android RAT)
- Android IME / InputMethodService Abuse (Malicious Keyboards)
- NFC/EMV Relay via HCE (Android Tap-to-Pay abuse)
- Pobieranie APKów: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/, https://github.com/kiber-io/apkd
Zautomatyzowane wieloźródłowe pobieranie APK (justapk)
pip install justapk (Python 3.11+). CLI wypisuje JSON na stdout i postęp na stderr (przyjazne dla pipe’ów). Stosuje deterministyczny łańcuch fallbackowy obejmujący APK20 → F-Droid → APKPure (mobile API) → APKMirror (HTML scrape) → Uptodown (mobile API) → APKCombo (HTML scrape). Źródła chronione przez Cloudflare używają curl_cffi z TLS fingerprint impersonation, aby udawać prawdziwych klientów i zmniejszyć blokady związane z wykrywaniem botów.
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 łączy XAPK/split APKs i podpisuje je przy użyciu debug key, więc podpis/pochodzenie APK różni się od oryginału (używaj do testów/analizy, nie do instalacji produkcyjnych).
- Wyodrębnij APK z urządzenia:
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
- Połącz wszystkie splits i base apks za pomocą 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
Some Android droppers embed a native library (lib*.so) that odszyfrowuje i zapisuje drugi ELF (e.g., l.so) to a temp path, loads it via JNI, and then loads the real logic as DEX tylko w pamięci using dalvik.system.InMemoryDexClassLoader. This reduces static visibility of the payload and avoids writing classes*.dex to disk.
Praktyczne wskazówki triage:
- Szukaj natywnych bibliotek, które wywołują
dlopenlubSystem.loadLibrarybardzo wcześnie, a następnie rozwiązują metody Java przez obfuskowane stack strings (np. XOR dekodowane na stosie). - Obserwuj
InMemoryDexClassLoaderw logach/strings lub hooks, co wskazuje na fileless DEX execution.
Szybki Frida hook do zrzutu bufora DEX w pamięci:
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
Spakowane ładowarki często samoczynnie kończą działanie, gdy sprawdzenia emulacji lub analizy nie powiodą się (np. walidacja CPU_ABI) wywołując:
android.os.Process.killProcess(android.os.Process.myPid());
Persistence via foreground service + MediaPlayer loop
Lekki wzorzec persistence polega na utrzymywaniu aktywnej foreground service z pinned notification i ciągłym odtwarzaniu prawie niesłyszalnej pętli audio przez MediaPlayer. To utrzymuje proces „aktywnym” i zmniejsza liczbę zabójstw procesu przez OS z powodu bezczynności. Szukaj użycia ForegroundService + MediaPlayer, które odtwarza mały zasób w pętli (często trwający kilka sekund).
Accessibility overlay + ACTION_SET_TEXT hijacking
Po przyznaniu uprawnień Accessibility przez użytkownika, trojany bankowe mogą monitorować foreground app, wyświetlać realistyczny overlay (często HTML w WebView zapisany jako Base64) i podmieniać pola transakcji używając AccessibilityNodeInfo.ACTION_SET_TEXT. To umożliwia ciche podstawienie adresu odbiorcy, podczas gdy ofiara widzi wiarygodny UI.
Minimalny przykład zastąpienia tekstu:
Bundle args = new Bundle();
args.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
"ATTACKER_USDT_ADDRESS");
node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, args);
Legitimate push infrastructure as C2 gating
Zamiast niestandardowych gniazd, niektóre malware używają Firebase Cloud Messaging (FCM) jako kanału C2. Wiadomości FCM mogą wywoływać kontrole telemetryczne (stan ładowania, procent baterii, temperatura, brak aktywności użytkownika) i gate’ować akcje takie jak mining czy fraud dla zwiększenia stealth.
Encrypted native payload staging with filename‑derived keys
Natywne payloady mogą być dostarczane jako zaszyfrowane bloby ELF i odszyfrowywane przy użyciu CipherInputStream(), z kluczem wyprowadzonym z SHA‑1 pobranej nazwy pliku. Każda nazwa pliku/wersja generuje odrębny klucz, utrudniając ponowne użycie statycznych IOC.
Jezail rooted Android pentesting toolkit (REST API + web UI)
- Działa na rooted device (Magisk/rootAVD) i uruchamia HTTP server na tcp/8080 z Flutter web UI i REST API.
- Zainstaluj release APK z uprawnieniami:
adb install -g -r jezail.apk, następnie uruchom aplikację (server uruchamia się automatycznie). - Endpoints:
http://<device-ip>:8080/(UI),http://<device-ip>:8080/api/json(lista API),http://<device-ip>:8080/api/swagger(Swagger). - Przekierowanie portu emulatora, aby dostać się do UI/API z hosta:
adb forward tcp:8080 tcp:8080a następnie otwórzhttp://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
Po pierwsze, analizując APK powinieneś rzucić okiem na kod Java używając dekompilera.
Proszę, przeczytaj tutaj, aby znaleźć informacje o różnych dostępnych dekompilerach.
Looking for interesting Info
Już samo przeszukanie strings w APK pozwala znaleźć hasła, URL-e (https://github.com/ndelphit/apkurlgrep), api keys, encryption, bluetooth uuids, tokens i wszystko co interesujące… szukaj też backdoorów do wykonywania kodu lub backdoorów uwierzytelniających (hardcoded admin credentials w aplikacji).
Firebase
Zwróć szczególną uwagę na firebase URL-e i sprawdź, czy nie jest źle skonfigurowany. More information about whats is FIrebase and how to exploit it here.
Basic understanding of the application - Manifest.xml, strings.xml
Badanie plików Manifest.xml i strings.xml aplikacji może ujawnić potencjalne luki bezpieczeństwa. Te pliki można uzyskać używając dekompilerów lub zmieniając rozszerzenie APK na .zip i rozpakowując je.
Vulnerabilities identified from the Manifest.xml include:
- Debuggable Applications: Aplikacje oznaczone jako debuggable (
debuggable="true") w pliku Manifest.xml stanowią ryzyko, ponieważ umożliwiają połączenia, które mogą prowadzić do eksploatacji. Aby lepiej zrozumieć jak eksploatować debuggable applications, odnieś się do tutorialu o znajdowaniu i eksploatacji debuggable applications na urządzeniu. - Backup Settings: Atrybut
android:allowBackup="false"powinien być jawnie ustawiony dla aplikacji przetwarzających wrażliwe informacje, aby zapobiec nieautoryzowanym backupom danych przez adb, szczególnie gdy usb debugging jest włączone. - Network Security: Niestandardowe konfiguracje network security (
android:networkSecurityConfig="@xml/network_security_config") w res/xml/ mogą określać szczegóły bezpieczeństwa, takie jak certificate pins i ustawienia ruchu HTTP. Przykładem może być zezwolenie na ruch HTTP dla konkretnych domen. - Exported Activities and Services: Zidentyfikowanie exported activities i services w manifeście może wskazać komponenty, które mogą być nadużyte. Dalsza analiza podczas testów dynamicznych może ujawnić, jak eksploatować te komponenty.
- Content Providers and FileProviders: Udostępnione content providers mogą pozwolić na nieautoryzowany dostęp lub modyfikację danych. Konfiguracja FileProviders również powinna być dokładnie sprawdzona.
- Broadcast Receivers and URL Schemes: Te komponenty mogą być wykorzystane do eksploatacji, ze szczególną uwagę na to, jak URL schemes są obsługiwane pod kątem podatności wejściowych.
- SDK Versions: Atrybuty
minSdkVersion,targetSDKVersionimaxSdkVersionwskazują obsługiwane wersje Androida, podkreślając znaczenie nieobsługiwania przestarzałych, podatnych wersji Androida z powodów bezpieczeństwa.
Z pliku strings.xml można wykryć wrażliwe informacje takie jak API keys, custom schemas i inne notatki deweloperskie, co podkreśla konieczność dokładnego przeglądu tych zasobów.
Tapjacking
Tapjacking to atak, w którym złośliwa aplikacja jest uruchamiana i pozycjonuje się nad aplikacją ofiary. Gdy wizualnie zasłoni aplikację ofiary, jej interfejs użytkownika jest zaprojektowany tak, by oszukać użytkownika, zmuszając go do interakcji, podczas gdy interakcja jest przekazywana dalej do aplikacji ofiary.
W efekcie to ogranicza użytkownikowi świadomość, że faktycznie wykonuje akcje w aplikacji ofiary.
Find more information in:
Task Hijacking
Aktywność z ustawionym launchMode na singleTask bez zdefiniowanego taskAffinity jest podatna na Task Hijacking. Oznacza to, że aplikacja może zostać zainstalowana i jeśli zostanie uruchomiona przed prawdziwą aplikacją, może przejąć task prawdziwej aplikacji (tak że użytkownik będzie wchodził w interakcję z złośliwą aplikacją myśląc, że używa prawdziwej).
Więcej informacji w:
Insecure data storage
Internal Storage
W Androidzie pliki przechowywane w pamięci wewnętrznej są zaprojektowane tak, by być dostępne wyłącznie dla aplikacji, która je utworzyła. Ten mechanizm bezpieczeństwa jest egzekwowany przez system Android i zwykle wystarcza dla potrzeb bezpieczeństwa większości aplikacji. Jednak deweloperzy czasami używają trybów takich jak MODE_WORLD_READABLE i MODE_WORLD_WRITABLE, aby umożliwić dzielenie plików między różnymi aplikacjami. Te tryby nie ograniczają dostępu do tych plików przez inne aplikacje, w tym potencjalnie złośliwe.
- Static Analysis:
- Upewnij się, że użycie
MODE_WORLD_READABLEiMODE_WORLD_WRITABLEjest dokładnie przeanalizowane. Te tryby mogą potencjalnie ujawnić pliki niezamierzonemu lub nieautoryzowanemu dostępowi.
- Dynamic Analysis:
- Zweryfikuj uprawnienia ustawione na plikach tworzonych przez aplikację. Konkretnie, sprawdź, czy jakiekolwiek pliki nie są ustawione jako czytelne lub zapisywalne dla wszystkich. To może stanowić istotne ryzyko bezpieczeństwa, ponieważ pozwoliłoby każdej aplikacji zainstalowanej na urządzeniu, niezależnie od pochodzenia czy intencji, czytać lub modyfikować te pliki.
External Storage
Przy pracy z plikami na pamięci zewnętrznej, takiej jak SD Card, należy podjąć pewne środki ostrożności:
- Dostępność:
- Pliki na pamięci zewnętrznej są globalnie czytelne i zapisywalne. Oznacza to, że każda aplikacja lub użytkownik może uzyskać do nich dostęp.
- Obawy dotyczące bezpieczeństwa:
- Ze względu na łatwość dostępu, zaleca się nie przechowywać wrażliwych informacji na pamięci zewnętrznej.
- Pamięć zewnętrzna może być usunięta lub dostępna dla dowolnej aplikacji, co czyni ją mniej bezpieczną.
- Obsługa danych z pamięci zewnętrznej:
- Zawsze przeprowadzaj walidację wejścia na danych pobranych z pamięci zewnętrznej. To kluczowe, ponieważ dane pochodzą z niedozwolonego źródła.
- Silnie odradza się przechowywanie plików wykonywalnych lub klas na pamięci zewnętrznej do dynamicznego ładowania.
- Jeśli aplikacja musi pobierać pliki wykonywalne z pamięci zewnętrznej, upewnij się, że te pliki są podpisane i kryptograficznie zweryfikowane zanim zostaną dynamicznie załadowane. Ten krok jest istotny dla zachowania integralności bezpieczeństwa aplikacji.
External storage can be accessed in /storage/emulated/0 , /sdcard , /mnt/sdcard
Tip
Starting with Android 4.4 (API 17), the SD card has a directory structure which limits access from an app to the directory which is specifically for that app. This prevents malicious application from gaining read or write access to another app’s files.
Sensitive data stored in clear-text
- Shared preferences: Android pozwala każdej aplikacji łatwo zapisywać pliki xml w ścieżce
/data/data/<packagename>/shared_prefs/i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze. - Databases: Android pozwala każdej aplikacji łatwo zapisywać sqlite databases w ścieżce
/data/data/<packagename>/databases/i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze.
Broken TLS
Accept All Certificates
Z jakiegoś powodu czasami deweloperzy akceptują wszystkie certyfikaty nawet jeśli, na przykład, hostname nie pasuje, z użyciem linii kodu takich jak poniższa:
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Dobrym sposobem na przetestowanie tego jest próba przechwycenia ruchu przy użyciu proxy takiego jak Burp bez autoryzowania Burp CA na urządzeniu. Możesz też wygenerować w Burp certyfikat dla innego hostname i go użyć.
Broken Cryptography
Poor Key Management Processes
Niektórzy deweloperzy zapisują dane wrażliwe w lokalnym storage i szyfrują je kluczem zakodowanym na stałe/przewidywalnym w kodzie. Nie powinno się tego robić, ponieważ odwrócenie (reversing) może pozwolić atakującym na wydobycie poufnych informacji.
Use of Insecure and/or Deprecated Algorithms
Deweloperzy nie powinni używać przestarzałych algorytmów do wykonywania checks autoryzacyjnych, przechowywania lub wysyłania danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1… Jeśli hashes są używane do przechowywania haseł na przykład, powinny być stosowane hashe odporne na brute-force z salt.
Other checks
- 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:
Xamarin Applications
Read the following page to learn how to easily access C# code of a xamarin applications:
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.
Automated Static Code Analysis
The tool mariana-trench is capable of finding vulnerabilities by scanning the code of the application. This tool contains a series of known sources (that indicates to the tool the places where the input is controlled by the user), sinks (which indicates to the tool dangerous places where malicious user input could cause damages) and rules. These rules indicates the combination of sources-sinks that indicates a vulnerability.
With this knowledge, mariana-trench will review the code and find possible vulnerabilities on it.
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)
Other interesting functions
- 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
Other tricks
Dynamic Analysis
Przede wszystkim, potrzebujesz środowiska, w którym możesz zainstalować aplikację i całe otoczenie (Burp CA cert, Drozer and Frida głównie). Dlatego urządzenie z rootem (emulowane lub nie) jest wysoce zalecane.
Online Dynamic analysis
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.
.png)
Thanks to the ADB connection you can use Drozer and Frida inside the emulators.
Local Dynamic Analysis
Using an 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:
- 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:
.png)
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).
Use a physical device
You need to activate the debugging options and it will be cool if you can root it:
- Settings.
- (FromAndroid 8.0) Select System.
- Select About phone.
- Press Build number 7 times.
- 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
Unintended Data Leakage
Logging
Deweloperzy powinni zachować ostrożność przy ujawnianiu informacji debugowych publicznie, ponieważ może to prowadzić do wycieków danych wrażliwych. Narzędzia pidcat oraz adb logcat są zalecane do monitorowania logów aplikacji w celu identyfikacji i ochrony informacji wrażliwych. Pidcat jest preferowany ze względu na łatwość użycia i czytelność.
Warning
Zauważ, że od wersji nowszych niż Android 4.0, aplikacje mają dostęp tylko do swoich własnych logów. Więc aplikacje nie mogą uzyskać dostępu do logów innych aplikacji.
Mimo to, nadal zaleca się nie logować informacji wrażliwych.
Copy/Paste Buffer Caching
Androidowy framework oparty na schowku umożliwia funkcję kopiuj-wklej w aplikacjach, ale niesie ryzyko, ponieważ inne aplikacje mogą mieć dostęp do schowka i potencjalnie ujawnić dane wrażliwe. Ważne jest, aby wyłączyć funkcje kopiuj/wklej dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych.
Crash Logs
Jeśli aplikacja crashuje i zapisuje logi, te logi mogą pomóc atakującym, zwłaszcza gdy aplikacja nie może zostać odwrócona. Aby zminimalizować ryzyko, unikaj logowania przy crashach, a jeśli logi muszą być przesyłane przez sieć, upewnij się, że są wysyłane przez kanał SSL.
Jako pentester, spróbuj rzucić okiem na te logi.
Analytics Data Sent To 3rd Parties
Aplikacje często integrują usługi takie jak Google Adsense, które mogą przypadkowo leak sensitive data z powodu nieprawidłowej implementacji przez deweloperów. Aby zidentyfikować potencjalne wycieki, warto przechwycić ruch aplikacji i sprawdzić, czy jakiekolwiek informacje wrażliwe są wysyłane do usług third-party.
SQLite DBs
Większość aplikacji będzie używać wewnętrznych baz SQLite do zapisywania informacji. Podczas pentestu przyjrzyj się bazom danych utworzonym, nazwom tabel i kolumn oraz wszystkim zapisanym danym, ponieważ możesz znaleźć informacje wrażliwe (co byłoby podatnością).
Bazy danych powinny znajdować się w /data/data/the.package.name/databases, np. /data/data/com.mwr.example.sieve/databases
Jeśli baza danych zapisuje poufne informacje i jest encrypted but możesz find the password inside the application it’s still a vulnerability.
Wylicz tabele używając .tables i wyświetl schemat kolumn tabeli poleceniem .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.
Authorisation bypass
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 wykryje jako złośliwe użycie singleTask/singleInstance jako android:launchMode w activity, ale zgodnie z tym, najwyraźniej jest to niebezpieczne tylko w starych wersjach (API versions < 21).
Tip
Zwróć uwagę, że authorisation bypass nie zawsze jest podatnością — zależy to od tego, jak działa bypass i które informacje są ujawniane.
Sensitive information leakage
Activities can also return results. Jeśli uda Ci się znaleźć eksportowaną i niezabezpieczoną activity wywołującą metodę setResult i zwracającą informacje wrażliwe, występuje wyciek informacji wrażliwych.
Tapjacking
Jeżeli Tapjacking nie jest zapobiegany, możesz nadużyć eksportowanej activity, aby zmusić użytkownika do wykonania nieoczekiwanych działań. Więcej informacji o 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 są zasadniczo używane do dzielenia się danymi. Jeśli aplikacja posiada dostępne content providers, możesz być w stanie wyekstrahować z nich wrażliwe dane. Warto też testować możliwe SQL injections i Path Traversals, ponieważ mogą być podatne.
Learn how to exploit Content Providers with Drozer.
Exploiting Services
Read this if you want to refresh what is a Service.
Pamiętaj, że akcje Service zaczynają się w metodzie onStartCommand.
Service to w zasadzie coś, co może otrzymywać dane, przetwarzać je i zwracać (lub nie) odpowiedź. Jeżeli aplikacja eksportuje jakieś services, powinieneś sprawdzić kod, aby zrozumieć, co robi, i przetestować to dynamicznie, aby wydobyć poufne informacje, obejść mechanizmy uwierzytelniania itp.
Learn how to exploit Services with Drozer.
Exploiting Broadcast Receivers
Read this if you want to refresh what is a Broadcast Receiver.
Pamiętaj, że akcje Broadcast Receivera zaczynają się w metodzie onReceive.
Broadcast receiver będzie oczekiwał na określony typ wiadomości. W zależności od tego, jak receiver obsługuje wiadomość, może być podatny.
Learn how to exploit Broadcast Receivers with Drozer.
Exploiting Schemes / Deep links
Możesz szukać deep links ręcznie, używając narzędzi takich jak MobSF lub skryptów takich jak this one.
Możesz otworzyć zadeklarowany scheme używając adb lub browser:
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
Pamiętaj, że możesz pominąć nazwę pakietu, a urządzenie mobilne automatycznie wywoła aplikację, która powinna otworzyć ten link.
<!-- 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>
Kod wykonywany
Aby znaleźć code that will be executed in the App, przejdź do activity wywołanej przez deeplink i wyszukaj funkcję onNewIntent.
 (1) (1) (1).png)
Wrażliwe dane
Za każdym razem, gdy znajdziesz deep link, sprawdź, czy nie odbiera wrażliwych danych (np. haseł) przez parametry URL, ponieważ każda inna aplikacja mogłaby podszyć się pod deep link i ukraść te dane!
Parametry w ścieżce
Musisz też sprawdzić, czy którykolwiek deep link używa parametru wewnątrz ścieżki URL, np.: https://api.example.com/v1/users/{username}. W takim przypadku możesz wymusić path traversal, uzyskując dostęp do czegoś w stylu: example://app/users?username=../../unwanted-endpoint%3fparam=value.
Zauważ, że jeśli znajdziesz poprawne endpoints w aplikacji, możesz spowodować Open Redirect (jeśli część ścieżki jest używana jako nazwa domeny), account takeover (jeśli możesz modyfikować dane użytkownika bez tokena CSRF i podatny endpoint używał właściwej metody) oraz inne podatności. Więcej info about this here.
Więcej przykładów
Interesujący bug bounty report o linkach (/.well-known/assetlinks.json).
Inspekcja warstwy transportowej i błędy weryfikacji
- Certificates are not always inspected properly przez aplikacje Android. Często aplikacje pomijają ostrzeżenia i akceptują certyfikaty samopodpisane lub, w niektórych przypadkach, wracają do korzystania z połączeń HTTP.
- Negotiations during the SSL/TLS handshake are sometimes weak, używając niebezpiecznych zestawów szyfrów. Ta podatność naraża połączenie na ataki man-in-the-middle (MITM), pozwalając atakującemu odszyfrować dane.
- Leakage of private information jest ryzykiem, gdy aplikacje uwierzytelniają się używając bezpiecznych kanałów, a następnie komunikują się przez kanały niezabezpieczone. Taki sposób nie chroni wrażliwych danych, jak ciasteczka sesyjne czy dane użytkownika, przed przechwyceniem przez złośliwe podmioty.
Weryfikacja certyfikatu
Skupimy się na certificate verification. Integralność certyfikatu serwera musi być weryfikowana, aby zwiększyć bezpieczeństwo. Jest to kluczowe, ponieważ niebezpieczne konfiguracje TLS oraz przesyłanie wrażliwych danych przez kanały niezabezpieczone mogą powodować poważne ryzyka. Dla szczegółowych kroków dotyczących weryfikacji certyfikatów serwera i naprawy podatności, this resource zawiera obszerne wskazówki.
SSL Pinning
SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfikat serwera względem znanej kopii przechowywanej w samej aplikacji. Metoda ta jest istotna w zapobieganiu atakom MITM. Wdrożenie SSL Pinning jest zdecydowanie zalecane dla aplikacji przetwarzających wrażliwe informacje.
Inspekcja ruchu
Aby inspekcjonować ruch HTTP, konieczne jest zainstalowanie certyfikatu narzędzia proxy (np. Burp). Bez zainstalowania tego certyfikatu zaszyfrowany ruch może być niewidoczny przez proxy. Przewodnik instalacji własnego CA certificate znajdziesz pod click here.
Aplikacje targetujące API Level 24 and above wymagają modyfikacji Network Security Config, aby zaakceptować proxy’s CA certificate. Ten krok jest kluczowy do inspekcji zaszyfrowanego ruchu. Instrukcje dotyczące modyfikacji Network Security Config są dostępne w refer to this tutorial.
Jeśli używany jest Flutter, musisz postępować zgodnie z instrukcjami na this page. Wynika to z faktu, że samo dodanie certyfikatu do store może nie zadziałać, ponieważ Flutter ma własną listę zaufanych CA.
Statyczne wykrywanie SSL/TLS pinning
Zanim spróbujesz bypassów w czasie wykonywania, szybko zmapuj miejsca, gdzie pinning jest egzekwowany w APK. Odkrywanie statyczne pomaga zaplanować hooks/patches i skoncentrować się na właściwych ścieżkach kodu.
Tool: SSLPinDetect
- Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations.
- Reports exact file path, line number, and a code snippet for each match.
- Covers common frameworks and custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins.
Install
- Prereqs: Python >= 3.8, Java on PATH, apktool
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
pip install -r requirements.txt
Użycie
# 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
Przykładowe reguły wzorców (JSON) Użyj lub rozszerz sygnatur, aby wykrywać własnościowe/niestandardowe style pinowania. Możesz załadować własne JSON i skanować na dużą skalę.
{
"OkHttp Certificate Pinning": [
"Lcom/squareup/okhttp/CertificatePinner;",
"Lokhttp3/CertificatePinner;",
"setCertificatePinner"
],
"TrustManager Override": [
"Ljavax/net/ssl/X509TrustManager;",
"checkServerTrusted"
]
}
Uwagi i wskazówki
- Szybkie skanowanie dużych aplikacji przy użyciu wielowątkowości i memory-mapped I/O; wstępnie skompilowane regexy zmniejszają narzut/fałszywe pozytywy.
- Zbiór wzorców: https://github.com/aancw/smali-sslpin-patterns
- Typowe cele detekcji do dalszej analizy:
- OkHttp: użycie CertificatePinner, setCertificatePinner, odwołania do pakietu okhttp3/okhttp
- Niestandardowe TrustManagery: javax.net.ssl.X509TrustManager, nadpisania checkServerTrusted
- Niestandardowe konteksty SSL: SSLContext.getInstance + SSLContext.init z niestandardowymi managerami
- Deklaratywne piny w res/xml network security config oraz odwołania w manifest
- Wykorzystaj dopasowane lokalizacje do zaplanowania hooków Frida, statycznych patchy lub przeglądu konfiguracji przed testami dynamicznymi.
Omijanie SSL Pinning
Gdy SSL Pinning jest zaimplementowane, konieczne staje się jego ominięcie, aby przeanalizować ruch HTTPS. Istnieje kilka metod do tego celu:
- Automatycznie zmodyfikuj apk, aby obejść SSLPinning za pomocą apk-mitm. Największą zaletą tej opcji jest to, że nie będziesz potrzebować roota do ominięcia SSL Pinning, ale będziesz musiał usunąć aplikację i zainstalować nową, i to nie zawsze zadziała.
- Możesz użyć Frida (opisane poniżej) do obejścia tej ochrony. Tutaj jest przewodnik jak użyć Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
- Możesz też spróbować automatycznie ominąć SSL Pinning używając objection:
objection --gadget com.package.app explore --startup-command "android sslpinning disable" - Możesz też spróbować automatycznie ominąć SSL Pinning używając MobSF dynamic analysis (opisane poniżej)
- Jeśli nadal uważasz, że istnieje ruch, którego nie przechwytujesz, możesz spróbować przekierować ruch do Burp używając iptables. Przeczytaj ten wpis na blogu: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62
Wyszukiwanie typowych podatności webowych
Ważne jest również poszukiwanie typowych podatności webowych wewnątrz aplikacji. Szczegółowe informacje na temat identyfikacji i łagodzenia tych podatności wykraczają poza zakres tego streszczenia, ale są szeroko omówione w innych źródłach.
Frida
Frida to toolkit do dynamicznej instrumentacji dla developerów, reverse-engineerów i badaczy bezpieczeństwa.
Możesz uzyskać dostęp do uruchomionej aplikacji i hookować metody w czasie wykonywania, aby zmienić zachowanie, zmienić wartości, wyodrębnić wartości, uruchomić inny kod…
Jeśli chcesz pentestować aplikacje Android, musisz umieć używać Frida.
- Naucz się używać Frida: Frida tutorial
- Pewne “GUI” do działań z Frida: https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
- objection świetnie automatyzuje użycie Frida: https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
- Znajdziesz tu kilka Awesome Frida scripts: https://codeshare.frida.re/
- Spróbuj ominąć mechanizmy anti-debugging / anti-frida ładując Frida tak, jak wskazano w https://erfur.github.io/blog/dev/code-injection-without-ptrace (narzędzie linjector)
Anti-instrumentation & SSL pinning bypass workflow
Android Anti Instrumentation And Ssl Pinning Bypass
Zrzucanie pamięci - Fridump
Sprawdź, czy aplikacja nie przechowuje w pamięci wrażliwych informacji, których nie powinna, takich jak hasła czy mnemoniczne frazy.
Używając Fridump3 możesz zrzucić pamięć aplikacji za pomocą:
# With PID
python3 fridump3.py -u <PID>
# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"
To zrzuci pamięć do folderu ./dump, a tam możesz użyć grep, np.:
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]+$"
Wrażliwe dane w Keystore
W Androidzie Keystore jest najlepszym miejscem do przechowywania wrażliwych danych, jednak przy wystarczających uprawnieniach nadal jest możliwe uzyskanie do niego dostępu. Ponieważ aplikacje mają tendencję do przechowywania tutaj sensitive data in clear text, pentests powinny to sprawdzić, gdyż root user lub ktoś z fizycznym dostępem do urządzenia mógłby ukraść te dane.
Nawet jeśli aplikacja przechowuje dane w keystore, powinny one być zaszyfrowane.
Aby uzyskać dostęp do danych w keystore, możesz użyć tego skryptu Frida: 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
Za pomocą poniższego skryptu Frida możliwe może być bypass fingerprint authentication, które aplikacje Android mogą wykonywać, aby chronić niektóre wrażliwe obszary:
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
Obrazy w tle
Gdy umieścisz aplikację w tle, Android przechowuje migawkę aplikacji, więc po przywróceniu jej na pierwszy plan najpierw ładowany jest obraz przed aplikacją, dzięki czemu wydaje się, że aplikacja uruchomiła się szybciej.
Jednak jeśli ta migawka zawiera wrażliwe informacje, osoba mająca dostęp do migawki może ukraść te informacje (uwaga: dostęp wymaga root).
Migawki są zazwyczaj przechowywane w: /data/system_ce/0/snapshots
Android udostępnia sposób, aby zapobiec przechwytywaniu zrzutów ekranu poprzez ustawienie parametru layout FLAG_SECURE. Użycie tej flagi powoduje, że zawartość okna jest traktowana jako zabezpieczona, co uniemożliwia jej pojawianie się na zrzutach ekranu lub wyświetlanie na niechronionych ekranach.
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Android Application Analyzer
To narzędzie może pomóc w zarządzaniu różnymi narzędziami podczas analizy dynamicznej: https://github.com/NotSoSecure/android_application_analyzer
Intent Injection
Developerzy często tworzą proxy components takie jak activities, services oraz broadcast receivers, które obsługują te Intents i przekazują je do metod takich jak startActivity(...) lub sendBroadcast(...), co może być ryzykowne.
Niebezpieczeństwo polega na pozwoleniu atakującym na wywołanie nieeksportowanych komponentów aplikacji lub dostęp do wrażliwych content providers poprzez przekierowanie tych Intents. Przykładem jest komponent WebView konwertujący URL-e na obiekty Intent za pomocą Intent.parseUri(...) i następnie je wykonujący, co potencjalnie prowadzi do złośliwych Intent injections.
Essential Takeaways
- Intent Injection jest podobny do webowego problemu Open Redirect.
- Eksploity polegają na przekazywaniu obiektów
Intentjako extras, które mogą być przekierowane do wykonania niebezpiecznych operacji. - Może to ujawnić nieeksportowane komponenty i content providers atakującym.
- Konwersja URL do
IntentwWebViewmoże ułatwiać niezamierzone akcje.
Android Client Side Injections and others
Pewnie znasz tego rodzaju podatności z Web. Trzeba być szczególnie ostrożnym z tymi podatnościami w aplikacji Android:
- SQL Injection: Przy pracy z dynamicznymi zapytaniami lub Content-Providers upewnij się, że używasz zapytań parametryzowanych.
- JavaScript Injection (XSS): Zweryfikuj, że wsparcie dla JavaScript i Pluginów jest wyłączone dla wszelkich WebViews (wyłączone domyślnie). Więcej informacji tutaj.
- Local File Inclusion: WebViews powinny mieć dostęp do systemu plików wyłączony (włączony domyślnie) -
(webview.getSettings().setAllowFileAccess(false);). Więcej informacji tutaj. - Eternal cookies: W wielu przypadkach gdy aplikacja Android kończy sesję, cookie nie jest unieważnione lub może być nawet zapisane na dysku
- Secure Flag in cookies
Automatic Analysis
MobSF
Static analysis
.png)
Vulnerability assessment of the application przy użyciu przyjemnego webowego frontendu. Możesz również wykonać analizę dynamiczną (ale musisz przygotować środowisko).
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.
Assisted Dynamic analysis with MobSF
MobSF can also be very helpful for dynamic analysis in Android, but in that case you will need to install MobSF and genymotion in your host (a VM or Docker won’t work). Note: You need to start first a VM in genymotion and then MobSF.
The MobSF dynamic analyser can:
- 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). All of this is done automatically except for the screenshots, you need to press when you want a screenshot or you need to press “Exported Activity Tester” to obtain screenshots of all the exported activities.
- 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 can also 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”).
.png)
Moreover, you have some Auxiliary Frida functionalities:
- Enumerate Loaded Classes: It will print all the loaded classes
- Capture Strings: It will print all the capture strings while using the application (super noisy)
- Capture String Comparisons: Could be very useful. It will show the 2 strings being compared and if the result was True or False.
- Enumerate Class Methods: Put the class name (like “java.io.File”) and it will print all the methods of the class.
- Search Class Pattern: Search classes by pattern
- Trace Class Methods: Trace a whole class (see inputs and outputs of all methods of th class). Remember that by default MobSF traces several interesting Android Api methods.
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 also brings you a shell with some adb commands, MobSF commands, and common shell commands at the bottom of the dynamic analysis page. Some interesting commands:
help
shell ls
activities
exported_activities
services
receivers
HTTP tools
Kiedy ruch HTTP zostanie przechwycony, możesz zobaczyć nieładny widok przechwyconego ruchu w przycisku “HTTP(S) Traffic” albo ładniejszy widok w zielonym przycisku “Start HTTPTools”. Z drugiej opcji możesz wysłać przechwycone żądania do proxies takich jak Burp lub Owasp ZAP.
Aby to zrobić, włącz Burp –> wyłącz Intercept –> w MobSF HTTPTools wybierz żądanie –> naciśnij “Send to Fuzzer” –> wybierz adres proxy (http://127.0.0.1:8080\).
Po zakończeniu analizy dynamicznej w MobSF możesz kliknąć “Start Web API Fuzzer”, aby fuzzować żądania http i szukać podatności.
Tip
Po wykonaniu analizy dynamicznej w MobSF ustawienia proxy mogą być nieprawidłowo skonfigurowane i nie będziesz w stanie ich naprawić z poziomu GUI. Możesz naprawić ustawienia proxy wykonując:
adb shell settings put global http_proxy :0
Assisted Dynamic Analysis with Inspeckage
Narzędzie można pobrać z Inspeckage.
To narzędzie użyje kilku Hooks, aby pokazać Ci co dzieje się w aplikacji podczas przeprowadzania analizy dynamicznej.
Yaazhini
To świetne narzędzie do przeprowadzania analizy statycznej z GUI
.png)
Qark
To narzędzie zostało zaprojektowane do wyszukiwania różnych luki związane z bezpieczeństwem w aplikacjach Android, zarówno w kodzie źródłowym, jak i w opakowanych APKs. Narzędzie jest również zdolne do tworzenia “Proof-of-Concept” deployable APK oraz ADB commands, aby wykorzystać niektóre z wykrytych podatności (Exposed activities, intents, tapjacking…). Podobnie jak w przypadku Drozer, nie ma potrzeby rootowania urządzenia testowego.
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
- Wyświetla wszystkie wyodrębnione pliki dla łatwego odniesienia
- Automatycznie dekompiluje pliki APK do formatu Java i Smali
- Analizuje AndroidManifest.xml pod kątem typowych podatności i zachowań
- Statyczna analiza kodu źródłowego pod kątem typowych podatności i zachowań
- Informacje o urządzeniu
- i więcej
reverse-apk relative/path/to/APP.apk
SUPER Android Analyzer
SUPER to aplikacja wiersza poleceń, którą można używać na Windows, MacOS X i Linux, analizująca .apk w poszukiwaniu podatności. Robi to poprzez dekompresję plików APK i zastosowanie serii reguł w celu wykrycia tych podatności.
Wszystkie reguły są umieszczone w pliku rules.json; każda firma lub tester może stworzyć własne reguły, aby analizować to, czego potrzebuje.
Pobierz najnowsze binaria ze download page
super-analyzer {apk_file}
StaCoAn
.png)
StaCoAn to wieloplatformowe narzędzie, które pomaga deweloperom, bugbounty hunters i ethical hackers w wykonywaniu static code analysis aplikacji mobilnych.
Koncepcja polega na tym, że przeciągasz i upuszczasz plik aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, a ona wygeneruje dla Ciebie wizualny i przenośny raport. Możesz dostosować ustawienia i wordlists, aby uzyskać spersonalizowane doświadczenie.
Pobierz latest release:
./stacoan
AndroBugs
AndroBugs Framework to system analizy podatności dla Androida, który pomaga deweloperom lub hackers znaleźć potencjalne podatności w aplikacjach na Androida.
Windows releases
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
Androwarn
Androwarn to narzędzie, którego głównym celem jest wykrywanie i ostrzeganie użytkownika o potencjalnych złośliwych zachowaniach aplikacji Android.
Wykrywanie jest przeprowadzane za pomocą static analysis bajtkodu Dalvik aplikacji, reprezentowanego jako Smali, przy użyciu biblioteki androguard.
Narzędzie wyszukuje powszechne zachowania “złych” aplikacji takie jak: 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
.png)
MARA is a Mobile Application Reverse engineering and Analysis Framework. Jest narzędziem, które łączy powszechnie używane narzędzia do reverse engineeringu i analizy aplikacji mobilnych, aby wspomagać testowanie aplikacji mobilnych przeciwko OWASP mobile security threats. Celem jest uproszczenie tego zadania i uczynienie go bardziej przyjaznym dla deweloperów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa.
It is able to:
- Extract Java and Smali code using different tools
- Analyze APKs using: smalisca, ClassyShark, androbugs, androwarn, APKiD
- Extract private information from the APK using regexps.
- Analyze the Manifest.
- Analyze found domains using: pyssltest, testssl and whatweb
- Deobfuscate APK via apk-deguard.com
Koodous
Przydatne do wykrywania malware: https://koodous.com/
Obfuskacja/Deobfuskacja kodu
Zwróć uwagę, że w zależności od usługi i konfiguracji użytej do obfuskacji kodu, sekrety mogą, ale nie muszą zostać obfuskowane.
ProGuard
From Wikipedia: ProGuard is an open source command-line tool that shrinks, optimizes and obfuscates Java code. Potrafi optymalizować bytecode oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest wolnym oprogramowaniem i jest rozpowszechniany na licencji GNU General Public License, version 2.
ProGuard jest dystrybuowany jako część Android SDK i uruchamiany podczas budowania aplikacji w trybie release.
DexGuard
Find a step-by-step guide to deobfuscate the apk in https://blog.lexfo.fr/dexguard.html
(From that guide) Last time we checked, the Dexguard mode of operation was:
- załaduj zasób jako InputStream;
- przekaż wynik do klasy dziedziczącej po FilterInputStream, aby go zdeszyfrować;
- wykonaj jakąś bezużyteczną obfuskację, żeby zmarnować kilka minut pracy reversera;
- przekaż odszyfrowany wynik do ZipInputStream, aby otrzymać plik DEX;
- na końcu załaduj powstały DEX jako Resource używając metody
loadDex.
DeGuard
DeGuard odwraca proces obfuskacji wykonywany przez narzędzia do obfuskacji Androida. Umożliwia to liczne analizy bezpieczeństwa, w tym inspekcję kodu i identyfikację bibliotek.
Możesz przesłać obfuskowany APK na ich platformę.
[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
To narzędzie LLM do znajdowania potencjalnych luk w zabezpieczeniach w aplikacjach android oraz deobfuskacji kodu aplikacji android. Wykorzystuje publiczne API Google’s Gemini.
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. Każdy typ optymalizacji jest prosty i ogólny, więc nie ma znaczenia, jaki konkretny rodzaj obfuskacji został użyty.
APKiD
APKiD gives you information about how an APK was made. Identyfikuje wiele compilers, packers, obfuscators, i innych dziwnych rzeczy. It’s PEiD for Android.
Manual
Przeczytaj ten tutorial, aby poznać kilka trików dotyczących how to reverse custom obfuscation
Labs
Androl4b
AndroL4b to wirtualna maszyna do zadań związanych z bezpieczeństwem Androida oparta na ubuntu-mate. Zawiera zbiór najnowszych frameworków, tutoriali i laboratoriów od różnych pasjonatów bezpieczeństwa i badaczy do reverse engineering i malware analysis.
References
- Play Integrity API: How It Works & How to Bypass It
- https://owasp.org/www-project-mobile-app-security/
- https://appsecwiki.com/#/ To świetna lista zasobów
- https://maddiestone.github.io/AndroidAppRE/ Szybki kurs Androida
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
- https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
- SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis
- SSLPinDetect GitHub
- smali-sslpin-patterns
- Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa
- CoRPhone — Android in-memory JNI execution and packaging pipeline
- justapk — multi-source APK downloader with Cloudflare bypass
- Jezail rooted Android pentesting toolkit (REST API + Flutter UI)
- BeatBanker: A dual‑mode Android Trojan
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


