| name | android-app-pentest-environment |
| description | Set up and use a complete Android app penetration testing environment in Android Studio with root, Magisk, Xposed, and traffic interception tools |
| triggers | ["set up android pentest environment","configure android studio for app security testing","install magisk and xposed on android emulator","how do i test android app security","intercept android app traffic with burp","root android emulator for penetration testing","bypass ssl pinning on android apps","configure android app testing with frida"] |
Android App Penetration Testing Environment
Skill by ara.so — Security Skills collection.
This skill enables AI agents to help developers set up a complete Android application penetration testing environment using Android Studio emulators with root access, Magisk modules, SSL certificate management, and traffic interception capabilities.
What This Project Provides
A comprehensive guide and toolset for creating a 2026-ready Android app security testing environment including:
- Rooted Android emulator (API 36 / Android 16)
- Magisk (面具) for root management and module support
- SSL/TLS certificate bypasses for traffic interception
- Xposed framework integration
- Frida dynamic instrumentation setup
- BurpSuite/Charles proxy configuration
Prerequisites
Install Android Studio and SDK
Configure Environment Variables
macOS/Linux (bash):
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/emulator
source ~/.bash_profile
Windows (PowerShell):
# Add to system environment variables
setx ANDROID_HOME "C:\Users\$env:USERNAME\AppData\Local\Android\Sdk"
setx PATH "$env:PATH;$env:ANDROID_HOME\platform-tools;$env:ANDROID_HOME\emulator"
Verify ADB Installation
adb version
Create Android Emulator
Recommended Configuration
Launch Emulator via CLI
emulator -list-avds
emulator -avd Pixel_9_Pro_API_36 &
emulator -avd Pixel_9_Pro_API_36 -writable-system &
Install Magisk (Root Framework)
Method A: rootAVD (Recommended - Automated)
git clone https://gitlab.com/newbit/rootAVD.git
cd rootAVD
curl -L -o Magisk.zip https://github.com/topjohnwu/Magisk/releases/download/v28.1/Magisk-v28.1.apk
./rootAVD.sh ListAllAVDs
./rootAVD.sh system-images/android-36.1/google_apis/arm64-v8a/ramdisk.img
adb reboot
Method B: Manual Magisk Patching
emulator -avd Pixel_9_Pro_API_36 -writable-system &
adb root
adb install Magisk-v28.1.apk
adb push $ANDROID_HOME/system-images/android-36.1/google_apis/arm64-v8a/ramdisk.img /sdcard/Download/
adb pull /sdcard/Download/magisk_patched_*.img ./
cp magisk_patched_*.img $ANDROID_HOME/system-images/android-36.1/google_apis/arm64-v8a/ramdisk.img
adb reboot
Verify Root Access
adb root
adb shell su -c "id"
Configure Magisk
adb shell su -c "magiskhide enable"
adb shell su -c "magiskhide add <package.name>"
Install Magisk Modules
LSPosed (Xposed Framework)
curl -L -o LSPosed.zip https://github.com/LSPosed/LSPosed/releases/download/v1.9.2/LSPosed-v1.9.2-7024-zygisk-release.zip
adb push LSPosed.zip /sdcard/Download/
adb reboot
SSL Certificate Unpinning Modules
JustTrustMe:
adb push JustTrustMe.apk /sdcard/Download/
adb install /sdcard/Download/JustTrustMe.apk
TrustMeAlready:
adb push TrustMeAlready.zip /sdcard/Download/
MagiskTrustUserCerts
adb push MagiskTrustUserCerts.zip /sdcard/Download/
SSL Certificate Installation
Install BurpSuite/Charles Certificate
openssl x509 -inform DER -in cacert.der -out cacert.pem
HASH=$(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1)
cp cacert.pem ${HASH}.0
adb root
adb remount
adb push ${HASH}.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/${HASH}.0
adb reboot
Verify Certificate Installation
adb shell ls -la /system/etc/security/cacerts/ | grep $(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1)
Traffic Interception Setup
Configure Proxy
adb shell settings put global http_proxy 10.0.2.2:8080
adb shell settings put global http_proxy :0
BurpSuite Configuration
Test Traffic Capture
adb install target_app.apk
Install Frida for Dynamic Analysis
Install Frida Server
curl -L -o frida-server https://github.com/frida/frida/releases/download/16.5.9/frida-server-16.5.9-android-arm64.xz
unxz frida-server-16.5.9-android-arm64.xz
adb push frida-server /data/local/tmp/
adb shell chmod 755 /data/local/tmp/frida-server
adb shell "/data/local/tmp/frida-server &"
Install Frida Tools (Host)
pip3 install frida-tools
frida-ps -U
Basic Frida Usage
import frida
import sys
def on_message(message, data):
print(f"[*] {message}")
device = frida.get_usb_device()
session = device.attach("com.target.app")
script_code = """
Java.perform(function() {
var MainActivity = Java.use('com.target.app.MainActivity');
MainActivity.secretMethod.implementation = function() {
console.log('[*] secretMethod called');
return this.secretMethod();
};
});
"""
script = session.create_script(script_code)
script.on('message', on_message)
script.load()
sys.stdin.read()
python3 example_frida_hook.py
Common Commands Reference
ADB Essentials
adb devices
adb install app.apk
adb install -r app.apk
adb uninstall com.package.name
adb shell pm list packages
adb shell pm list packages -3
adb shell pm path com.package.name
adb pull /data/app/~~hash/com.package.name-hash/base.apk
adb shell run-as com.package.name
adb logcat | grep "com.package.name"
adb logcat -c
adb exec-out screencap -p > screenshot.png
adb shell screenrecord /sdcard/demo.mp4
adb pull /sdcard/demo.mp4
File System Access
adb root
adb remount
adb push local_file /sdcard/
adb pull /sdcard/remote_file ./
adb shell
cd /data/data/com.package.name
ls -la
Process and App Management
adb shell am start -n com.package.name/.MainActivity
adb shell am force-stop com.package.name
adb shell pm clear com.package.name
adb shell ps | grep package.name
Troubleshooting
Emulator Won't Boot After Magisk
cd $ANDROID_HOME/system-images/android-36.1/google_apis/arm64-v8a/
ADB Not Detecting Emulator
adb kill-server
adb start-server
adb devices
SSL Pinning Still Active
Java.perform(function() {
var CertificatePinner = Java.use('okhttp3.CertificatePinner');
CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function() {
console.log('[*] SSL Pinning bypassed');
};
});
Magisk Modules Not Working
adb shell su -c "magisk --denylist status"
adb shell su -c "magisk --denylist rm com.package.name"
App Detects Emulator/Root
adb shell su -c "magiskhide enable"
adb shell su -c "magiskhide add com.package.name"
adb shell su -c "mount -o rw,remount /system"
adb shell su -c "sed -i 's/ro.build.fingerprint=.*/ro.build.fingerprint=google\/redfin\/redfin:13\/TP1A.220624.021\/8877034:user\/release-keys/' /system/build.prop"
Traffic Not Appearing in Proxy
adb shell settings get global http_proxy
adb shell ls /system/etc/security/cacerts/ | grep $(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1)
adb shell curl -x http://10.0.2.2:8080 https://www.google.com
Advanced Patterns
Automated APK Analysis Script
#!/bin/bash
APK=$1
PACKAGE=$(aapt dump badging "$APK" | grep package | awk '{print $2}' | sed "s/name='\(.*\)'/\1/")
echo "[*] Installing $APK..."
adb install "$APK"
echo "[*] Starting Frida..."
frida -U -f "$PACKAGE" --no-pause -l ssl_bypass.js
echo "[*] Proxy configured. Monitor Burp for traffic."
adb shell settings put global http_proxy 10.0.2.2:8080
echo "[*] Press Enter to stop and cleanup..."
read
adb uninstall "$PACKAGE"
adb shell settings put global http_proxy :0
Certificate Rotation Script
#!/bin/bash
CERT_DER=$1
openssl x509 -inform DER -in "$CERT_DER" -out /tmp/cacert.pem
HASH=$(openssl x509 -inform PEM -subject_hash_old -in /tmp/cacert.pem | head -1)
adb root
adb remount
adb shell rm -f /system/etc/security/cacerts/${HASH}.0
adb push /tmp/cacert.pem /system/etc/security/cacerts/${HASH}.0
adb shell chmod 644 /system/etc/security/cacerts/${HASH}.0
adb reboot
echo "[*] Certificate updated: ${HASH}.0"
Environment Variables
export ANDROID_HOME=$HOME/Library/Android/sdk
export BURP_PROXY="10.0.2.2:8080"
export FRIDA_SERVER_PORT=27042
export ADB_PORT=5037
Security Considerations
- This environment is for legal penetration testing only
- Always obtain proper authorization before testing applications
- Do not use these techniques on apps without permission
- Some techniques may violate app terms of service
- Keep tools updated to avoid detection by modern anti-root/emulator checks
Further Resources