Android Penetration Test Check List
1. Static Analysis
| Check Item | Details | Test Cases / Method | Tools |
|---|---|---|---|
| Weak Signer Certificate | The app is signed with a weak or compromised certificate (e.g., a debug certificate or one using a weak algorithm like SHA1withRSA). | 1. Use apksigner or jarsigner to verify the certificate’s algorithm and details. <br> 2. Check for Janus vulnerability. <br> 3. Check if the certificate is a known public debug certificate. |
apksigner, jarsigner, Jadx |
| Source Code Obfuscation | The app’s source code is not obfuscated, making it easy to reverse engineer. | 1. Decompile the APK and check if class, method, and variable names are readable or have been renamed to meaningless characters. | Jadx, Ghidra, Bytecode-Viewer |
| Hardcoded Sensitive Information | Sensitive data like API keys, tokens, or passwords are hardcoded directly in the source code or resource files. | 1. Decompile the app and search the source code for keywords like API_KEY, token, password, secret. |
Jadx, MobSF, grep |
| Insecure Coding Practices | The app uses insecure functions, weak random number generators, or weak encryption algorithms. | 1. Review code for use of java.util.Random instead of SecureRandom. <br> 2. Look for weak crypto algorithms like MD5, SHA1, or Base64 used for encryption. |
Jadx, Ghidra |
| Missing Integrity Checks | The app does not verify its own integrity, allowing for repackaging attacks. | 1. Decompile the app, modify its code (e.g., Smali), recompile, sign it, and check if it still functions properly. | apktool, apksigner |
| Insecure Manifest Configuration | The AndroidManifest.xml file has insecure flags set, such as allowBackup=true or debuggable=true. |
1. Review the manifest file for android:debuggable="true", android:allowBackup="true", and network_security_config allowing cleartext traffic. |
Jadx, apktool, MobSF |
2. Dynamic Analysis
| Check Item | Details | Test Cases / Method | Tools |
|---|---|---|---|
| SSL Pinning | The app does not properly verify the server’s SSL certificate, allowing for Man-in-the-Middle (MitM) attacks. | 1. Intercept traffic to check if pinning is implemented. <br> 2. Use hooking frameworks to bypass pinning logic in common libraries (OkHttp, etc.). | Burp Suite, Frida, Objection |
| Root Detection | The app does not properly detect and prevent access by rooted devices, allowing for unauthorized access to data or functionality. | 1. Run the app on a rooted device to check for detection. <br> 2. Use hooking frameworks to bypass functions that check for root indicators (e.g., su binary, specific packages). | Frida, Xposed Framework, Magisk |
| Emulator Detection | The app does not properly detect and prevent access by emulators, allowing users to bypass security controls. | 1. Run the app on an emulator (Android Studio, Genymotion). <br> 2. Use Frida to hook and bypass functions that check for emulator-specific properties. | Frida, Android Studio Emulator |
| Sensitive Data in Application Memory | Unencrypted sensitive data is stored in the application’s memory, making it vulnerable to memory dumping attacks. | 1. While the app is running, use memory dumping scripts to extract the app’s memory heap. <br> 2. Search the memory dump for sensitive strings. | Frida, fridump.py, GameGuardian |
| Vulnerable Android Activities | Activities are improperly configured, leading to auth bypass, hijacking, or Denial of Service. | 1. Use adb or drozer to directly launch non-exported or protected activities, bypassing login screens. <br> 2. Check if activities can be hijacked or cause a crash. |
adb, drozer |
| WebView Vulnerabilities | The app’s WebView component is insecurely configured, allowing for XSS, LFI, or remote code execution. | 1. Check if JavaScript is enabled (setJavaScriptEnabled). <br> 2. Test for insecure addJavascriptInterface usage. <br> 3. Check for insecure file access flags. |
Frida, Drozer, Burp Suite |
| Insecure Intent Handling | Intent data is not properly filtered or validated, leading to spoofing, sniffing, or redirection vulnerabilities. | 1. Use drozer to craft and send malicious intents to exported components. <br> 2. Check for vulnerabilities related to PendingIntent or sticky broadcasts. |
drozer, adb |
| Vulnerable Broadcast Receivers | An exported broadcast receiver without proper permission checks can be triggered by any app on the device. | 1. Identify exported receivers in the manifest. <br> 2. Use drozer or adb to send a broadcast intent and trigger the receiver. |
drozer, adb, Jadx |
| Insecure Content Provider | Content providers leak information due to missing security controls, leading to SQL Injection or Path Traversal. | 1. Use drozer to query content provider URIs. <br> 2. Attempt to inject SQL or path traversal sequences into the query. |
drozer, SQLmap |
| Insecure Deeplinks | Deeplinks are not properly validated, allowing attackers to access sensitive data or functionality within the app. | 1. Identify URL schemes in the manifest. <br> 2. Use adb to invoke the deeplink with manipulated parameters to test for vulnerabilities. |
adb, drozer, Web Browser |
| Biometric/Lock Auth Bypass | Application logic that relies on biometric or screen lock authentication can be bypassed at runtime. | 1. Use Frida to hook the methods that handle the authentication result and force them to return true. |
Frida, Xposed Framework |
| Task Hijacking | A malicious app manipulates the Android Task stack to take over a legitimate app’s task due to taskAffinity misconfigurations. |
1. Check taskAffinity and launchMode attributes in the manifest. <br> 2. Create a PoC app with the same taskAffinity to attempt hijacking. |
Jadx, Custom PoC App |
| Tapjacking | A malicious app draws an overlay to trick the user into clicking on the underlying victim app. | 1. Check if filterTouchesWhenObscured is set to true. <br> 2. Create a PoC overlay app to test exploitability. |
Custom PoC App, Jadx |
| Custom URL Scheme Abuse | The app does not safely parse data from custom URL schemes (myapp://), leading to data leakage or injection. |
1. Fuzz the parameters and paths of the custom URL scheme. <br> 2. Test for injection vulnerabilities (SQLi, XSS) through the URL parameters. | adb, drozer, Frida |
3. Data Storage & Network Analysis
| Check Item | Details | Test Cases / Method | Tools |
|---|---|---|---|
| Sensitive Data in ADB Logcat | The app logs sensitive data (passwords, tokens, personal info) to the system log, exposing it via ADB. | 1. Run adb logcat while using the app, especially during login or data entry. <br> 2. Filter logs for keywords like password, token, key. |
adb logcat, PIDcat |
| Sensitive Data in Local Storage | Sensitive data is stored in an unencrypted or unsecured manner in SharedPreferences, databases, or other local files. | 1. Access the app’s data directory (/data/data/<package>) on a rooted device. <br> 2. Examine the contents of SharedPreferences XML files and SQLite databases. |
adb shell, SQLite Browser |
| Background Screen Caching | The OS takes a screenshot of the app for the task switcher, which could expose sensitive data. | 1. Navigate to a screen with sensitive info. <br> 2. Send the app to the background and check the app switcher preview. <br> 3. Check if FLAG_SECURE is used. |
OS Functionality |
| Insecure File Permissions | The app creates files with world-readable or world-writable permissions in its internal storage. | 1. Use adb shell and ls -l in the app’s data directory to check file permissions. <br> 2. Check for use of MODE_WORLD_READABLE/WRITABLE. |
adb shell, drozer |
| Insecure Firebase Database | The Firebase database has misconfigured security rules, allowing for unauthorized read/write access. | 1. Append .json to the end of the Firebase database URL. <br> 2. Try to write data using a curl PUT request. |
Web Browser, cURL, Burp Suite |
| API & Network Security | The APIs used by the app have common web vulnerabilities like broken access control, injection, or data exposure. | 1. Intercept all traffic with a proxy. <br> 2. Perform standard web API pentesting (fuzzing, injection, access control checks). | Burp Suite, Postman, SQLmap |