| name | jamboree-android-security-testing |
| description | Configure and orchestrate Android security testing environments with Magisk, Burp Suite, Objection, and rooted emulators for mobile penetration testing |
| triggers | ["set up android security testing environment","configure burp suite with android emulator","install magisk modules for security testing","intercept android app traffic with burp","use objection to bypass ssl pinning","root android emulator for penetration testing","set up jamboree android testing framework","configure frida and objection for android"] |
JAMBOREE Android Security Testing
Skill by ara.so — Security Skills collection
JAMBOREE (Java Android Magisk Burp Objection Root Emulator Easy) is a unified Android security testing framework that integrates Magisk module management, Burp Suite proxy configuration, Objection runtime exploration, and rooted emulator environments into a single orchestrated workflow for mobile penetration testing.
What JAMBOREE Does
JAMBOREE provides:
- Automated Magisk module deployment for systemless root and BusyBox
- Burp Suite proxy integration with automatic CA certificate installation
- Objection/Frida runtime hooks for SSL pinning bypass and method tracing
- Pre-configured Android emulator environments optimized for security testing
- Self-healing configuration that detects and repairs broken proxy chains
Installation
Prerequisites
Ensure the following tools are installed:
java -version
adb --version
python3 --version
pip3 --version
pip3 install frida-tools objection
Clone and Initialize
git clone https://github.com/hero-mike/Android-Mobile-Security-Sandbox-Testing.git
cd Android-Mobile-Security-Sandbox-Testing
./orchestration/validators/check-environment.sh
./orchestration/deployers/install-all.sh
Environment Variables
Configure these in your shell profile or .env file:
export ANDROID_HOME="$HOME/Android/Sdk"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export BURP_PROXY_HOST="127.0.0.1"
export BURP_PROXY_PORT="8080"
export BURP_CERT_PATH="$HOME/.jamboree/burp-cert.der"
export FRIDA_SERVER_VERSION="16.1.4"
export OBJECTION_STARTUP_SCRIPT="$HOME/.jamboree/objection-init.js"
Key Components
1. Emulator Setup
Create and configure a rooted Android emulator:
avdmanager create avd -n jamboree-test \
-k "system-images;android-30;google_apis_playstore;x86_64" \
-d "pixel_5"
emulator -avd jamboree-test -writable-system -no-snapshot-load &
adb wait-for-device
./modules/magisk/systemless/install-magisk.sh
2. Burp Suite Certificate Installation
Install Burp CA certificate as system certificate:
./modules/burp/certificates/install-burp-cert.sh
adb shell "ls /system/etc/security/cacerts/ | grep burp"
Manual certificate installation script:
#!/bin/bash
CERT_PATH="${BURP_CERT_PATH}"
CERT_HASH=$(openssl x509 -inform DER -in "$CERT_PATH" -subject_hash_old -noout)
adb root
adb remount
adb push "$CERT_PATH" "/system/etc/security/cacerts/${CERT_HASH}.0"
adb shell "chmod 644 /system/etc/security/cacerts/${CERT_HASH}.0"
adb reboot
3. Proxy Configuration
Configure device to route traffic through Burp Suite:
adb shell settings put global http_proxy "${BURP_PROXY_HOST}:${BURP_PROXY_PORT}"
adb shell settings get global http_proxy
adb shell settings put global http_proxy :0
4. Objection Runtime Hooks
Launch Objection against target application:
frida-ps -Ua
objection -g com.example.targetapp explore
objection -g com.example.targetapp explore --startup-script "$OBJECTION_STARTUP_SCRIPT"
Common Objection commands:
android sslpinning disable
android hooking list activities
android hooking watch class_method com.example.MainActivity.getData --dump-args --dump-return
android shared_preferences dump
android sqlite execute "SELECT name FROM sqlite_master WHERE type='table';"
file ls /data/data/com.example.targetapp/
memory search "password" --string
5. Custom Frida Scripts
Create persistent hooks with Frida:
Java.perform(function() {
console.log("[*] JAMBOREE: Loading custom hooks");
var RootBeer = Java.use("com.scottyab.rootbeer.RootBeer");
RootBeer.isRooted.implementation = function() {
console.log("[*] Root detection bypassed");
return false;
};
var Cipher = Java.use("javax.crypto.Cipher");
Cipher.doFinal.overload("[B").implementation = function(input) {
console.log("[*] Cipher.doFinal called");
console.log("[*] Input: " + bytesToHex(input));
var result = this.doFinal(input);
console.log("[*] Output: " + bytesToHex(result));
return result;
};
var OkHttpClient = Java.use("okhttp3.OkHttpClient");
var Interceptor = Java.use("okhttp3.Interceptor");
OkHttpClient.build.implementation = function() {
var client = this.build();
console.log("[*] OkHttp client intercepted");
return client;
};
function bytesToHex(bytes) {
var hex = "";
for (var i = 0; i < bytes.length; i++) {
hex += ("0" + (bytes[i] & 0xFF).toString(16)).slice(-2);
}
return hex;
}
});
Run Frida script directly:
frida -U -f com.example.targetapp -l hooks.js --no-pause
Configuration Files
Magisk Module Configuration
id=jamboree-systemless
name=JAMBOREE Systemless Root
version=1.0
versionCode=1
author=JAMBOREE
description=Systemless root with BusyBox for security testing
Burp Suite Extension Configuration
{
"proxy": {
"host": "${BURP_PROXY_HOST}",
"port": "${BURP_PROXY_PORT}",
"ssl_pass_through": [
"*.google.com",
"*.gstatic.com"
]
},
"certificate": {
"auto_install": true,
"path": "${BURP_CERT_PATH}"
},
"logging": {
"level": "info",
"file": "/var/log/jamboree-burp.log"
}
}
Orchestration Configuration
environment:
android_version: "30"
emulator_name: "jamboree-test"
root_method: "magisk"
proxy:
enabled: true
host: "${BURP_PROXY_HOST}"
port: "${BURP_PROXY_PORT}"
certificate_pinning_bypass: true
objection:
auto_start: true
startup_script: "${OBJECTION_STARTUP_SCRIPT}"
hooks:
- ssl_pinning_bypass
- root_detection_bypass
- certificate_validation_bypass
logging:
verbose: true
output_dir: "./logs"
Common Testing Workflows
Workflow 1: Intercept HTTPS Traffic
./orchestration/deployers/start-environment.sh
adb install target-app.apk
adb shell settings put global http_proxy "127.0.0.1:8080"
objection -g com.example.targetapp explore
Workflow 2: Bypass Certificate Pinning
cat > bypass-pinning.js << 'EOF'
Java.perform(function() {
// TrustManager bypass
var TrustManager = Java.use("javax.net.ssl.X509TrustManager");
var SSLContext = Java.use("javax.net.ssl.SSLContext");
var TrustManagerImpl = Java.registerClass({
name: "com.jamboree.TrustManagerImpl",
implements: [TrustManager],
methods: {
checkClientTrusted: function(chain, authType) {},
checkServerTrusted: function(chain, authType) {},
getAcceptedIssuers: function() { return []; }
}
});
var TrustManagers = [TrustManagerImpl.$new()];
var SSLContextInstance = SSLContext.getInstance("TLS");
SSLContextInstance.init(null, TrustManagers, null);
console.log("[*] Certificate pinning bypassed");
});
EOF
frida -U -f com.example.targetapp -l bypass-pinning.js --no-pause
Workflow 3: Extract Cryptographic Keys
Java.perform(function() {
var SecretKeySpec = Java.use("javax.crypto.spec.SecretKeySpec");
SecretKeySpec.$init.overload("[B", "java.lang.String").implementation = function(keyBytes, algorithm) {
console.log("[*] SecretKeySpec created");
console.log("[*] Algorithm: " + algorithm);
console.log("[*] Key (hex): " + bytesToHex(keyBytes));
var File = Java.use("java.io.File");
var FileOutputStream = Java.use("java.io.FileOutputStream");
var path = "/sdcard/Download/extracted_key.bin";
var file = File.$new(path);
var fos = FileOutputStream.$new(file);
fos.write(keyBytes);
fos.close();
console.log("[*] Key saved to: " + path);
return this.$init(keyBytes, algorithm);
};
function bytesToHex(bytes) {
var hex = "";
for (var i = 0; i < bytes.length; i++) {
hex += ("0" + (bytes[i] & 0xFF).toString(16)).slice(-2);
}
return hex;
}
});
Workflow 4: Database Analysis
objection -g com.example.targetapp explore
adb pull /data/data/com.example.targetapp/databases/app.db ./
sqlitebrowser app.db
Troubleshooting
Certificate Not Trusted
If HTTPS interception fails:
adb shell "ls -la /system/etc/security/cacerts/ | grep $(openssl x509 -inform DER -in $BURP_CERT_PATH -subject_hash_old -noout)"
adb shell "date"
adb root
adb remount
./modules/burp/certificates/install-burp-cert.sh
adb reboot
Frida Server Connection Issues
adb shell "ps -A | grep frida"
adb shell "su -c 'killall frida-server'"
adb push frida-server-${FRIDA_SERVER_VERSION}-android-x86_64 /data/local/tmp/frida-server
adb shell "chmod 755 /data/local/tmp/frida-server"
adb shell "su -c '/data/local/tmp/frida-server &'"
frida-ps -U
Magisk Module Not Loading
adb reboot
adb shell "su -c 'rm -rf /data/adb/modules/conflicting-module'"
adb shell "su -c 'rm -rf /data/adb/magisk.db'"
./modules/magisk/systemless/install-magisk.sh
Proxy Not Working
adb shell settings get global http_proxy
adb shell "curl -x 127.0.0.1:8080 http://example.com"
adb shell "su -c 'iptables -t nat -L'"
App Detects Emulator
Modify AVD to mimic physical device:
echo "hw.device.manufacturer=Samsung" >> ~/.android/avd/jamboree-test.avd/config.ini
echo "hw.device.name=Galaxy S21" >> ~/.android/avd/jamboree-test.avd/config.ini
adb shell "su -c 'magiskhide enable'"
adb shell "su -c 'magiskhide add com.example.targetapp'"
Integration with CI/CD
Automate testing in GitLab CI:
android_security_test:
image: androidsdk/android-30
services:
- name: budtmo/docker-android-x86-11.0
alias: android
script:
- ./orchestration/validators/check-environment.sh
- ./orchestration/deployers/install-all.sh
- adb connect android:5555
- adb install target-app.apk
- objection -g com.example.targetapp explore --startup-script test-hooks.js
artifacts:
paths:
- logs/
- reports/
Advanced Usage
Custom Module Development
Create a new Magisk module:
mkdir -p custom-hooks/{system,META-INF/com/google/android}
cat > custom-hooks/module.prop << EOF
id=custom-hooks
name=Custom Security Hooks
version=1.0
versionCode=1
author=Security Team
description=Custom hooks for targeted app analysis
EOF
cat > custom-hooks/install.sh << 'EOF'
MODPATH=${0%/*}
ui_print "Installing custom hooks..."
EOF
chmod +x custom-hooks/install.sh
zip -r custom-hooks.zip custom-hooks/
adb push custom-hooks.zip /sdcard/
This skill provides comprehensive guidance for AI coding agents to help developers set up and use the JAMBOREE Android security testing framework effectively.