Full security platform with web dashboard, 16 Flask blueprints, 26 modules, autonomous AI agent, WebUSB hardware support, and Archon Android companion app. Includes Hash Toolkit, debug console, anti-stalkerware shield, Metasploit/RouterSploit integration, WireGuard VPN, OSINT reconnaissance, and multi-backend LLM support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
164 lines
5.3 KiB
Python
164 lines
5.3 KiB
Python
"""
|
|
Android Root Methods - Root detection, Magisk install, exploit-based rooting
|
|
"""
|
|
|
|
DESCRIPTION = "Android root methods (Magisk, exploits, root detection)"
|
|
AUTHOR = "AUTARCH"
|
|
VERSION = "1.0"
|
|
CATEGORY = "offense"
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
|
|
|
|
class AndroidRoot:
|
|
"""Interactive menu for Android rooting operations."""
|
|
|
|
def __init__(self):
|
|
from core.android_exploit import get_exploit_manager
|
|
from core.hardware import get_hardware_manager
|
|
self.mgr = get_exploit_manager()
|
|
self.hw = get_hardware_manager()
|
|
self.serial = None
|
|
|
|
def _select_device(self):
|
|
devices = self.hw.adb_devices()
|
|
if not devices:
|
|
print(" No ADB devices connected.")
|
|
return
|
|
if len(devices) == 1:
|
|
self.serial = devices[0]['serial']
|
|
print(f" Selected: {self.serial}")
|
|
return
|
|
print("\n Select device:")
|
|
for i, d in enumerate(devices, 1):
|
|
model = d.get('model', '')
|
|
print(f" {i}) {d['serial']} {model}")
|
|
try:
|
|
choice = int(input(" > ").strip())
|
|
if 1 <= choice <= len(devices):
|
|
self.serial = devices[choice - 1]['serial']
|
|
except (ValueError, EOFError, KeyboardInterrupt):
|
|
pass
|
|
|
|
def _ensure_device(self):
|
|
if not self.serial:
|
|
self._select_device()
|
|
return self.serial is not None
|
|
|
|
def show_menu(self):
|
|
print(f"\n{'='*50}")
|
|
print(" Root Methods")
|
|
print(f"{'='*50}")
|
|
print(f" Device: {self.serial or '(none)'}")
|
|
print()
|
|
print(" [1] Check Root Status")
|
|
print(" [2] Install Magisk APK")
|
|
print(" [3] Pull Patched Boot Image")
|
|
print(" [4] Root via Exploit")
|
|
print(" [5] ADB Root Shell (debug builds)")
|
|
print(" [s] Select Device")
|
|
print(" [0] Back")
|
|
print()
|
|
|
|
def check_root(self):
|
|
if not self._ensure_device():
|
|
return
|
|
print(" Checking root status...")
|
|
result = self.mgr.check_root(self.serial)
|
|
print(f"\n Rooted: {'YES' if result['rooted'] else 'NO'}")
|
|
if result['method']:
|
|
print(f" Method: {result['method']}")
|
|
if result['version']:
|
|
print(f" Version: {result['version']}")
|
|
details = result.get('details', {})
|
|
if details:
|
|
print(f" Details:")
|
|
for k, v in details.items():
|
|
print(f" {k}: {v}")
|
|
|
|
def install_magisk(self):
|
|
if not self._ensure_device():
|
|
return
|
|
try:
|
|
apk = input(" Magisk APK path: ").strip()
|
|
except (EOFError, KeyboardInterrupt):
|
|
return
|
|
if not apk:
|
|
return
|
|
print(" Installing Magisk APK...")
|
|
result = self.mgr.install_magisk(self.serial, apk)
|
|
if result['success']:
|
|
print(" Magisk installed successfully.")
|
|
print(" Next: Open Magisk app, patch boot image, then flash patched boot.")
|
|
else:
|
|
print(f" Error: {result.get('error', result.get('output', 'Failed'))}")
|
|
|
|
def pull_patched(self):
|
|
if not self._ensure_device():
|
|
return
|
|
print(" Looking for patched boot image...")
|
|
result = self.mgr.pull_patched_boot(self.serial)
|
|
if result['success']:
|
|
size_mb = result['size'] / (1024 * 1024)
|
|
print(f" Saved: {result['local_path']} ({size_mb:.1f} MB)")
|
|
print(" Next: Reboot to fastboot, flash this as boot partition.")
|
|
else:
|
|
print(f" Error: {result.get('error', 'Failed')}")
|
|
|
|
def root_exploit(self):
|
|
if not self._ensure_device():
|
|
return
|
|
try:
|
|
exploit = input(" Exploit binary path: ").strip()
|
|
except (EOFError, KeyboardInterrupt):
|
|
return
|
|
if not exploit:
|
|
return
|
|
print(" Deploying and executing exploit...")
|
|
result = self.mgr.root_via_exploit(self.serial, exploit)
|
|
if result['success']:
|
|
print(" ROOT OBTAINED!")
|
|
else:
|
|
print(" Root not obtained.")
|
|
print(f" Exploit output:\n{result.get('exploit_output', '')}")
|
|
|
|
def adb_root(self):
|
|
if not self._ensure_device():
|
|
return
|
|
print(" Attempting adb root (userdebug/eng builds only)...")
|
|
result = self.mgr.adb_root_shell(self.serial)
|
|
if result['success']:
|
|
print(" ADB running as root.")
|
|
else:
|
|
print(f" Failed: {result['output']}")
|
|
|
|
def run_interactive(self):
|
|
while True:
|
|
self.show_menu()
|
|
try:
|
|
choice = input(" Select > ").strip().lower()
|
|
except (EOFError, KeyboardInterrupt):
|
|
break
|
|
if choice == '0':
|
|
break
|
|
actions = {
|
|
'1': self.check_root,
|
|
'2': self.install_magisk,
|
|
'3': self.pull_patched,
|
|
'4': self.root_exploit,
|
|
'5': self.adb_root,
|
|
's': self._select_device,
|
|
}
|
|
action = actions.get(choice)
|
|
if action:
|
|
action()
|
|
else:
|
|
print(" Invalid choice.")
|
|
|
|
|
|
def run():
|
|
m = AndroidRoot()
|
|
m.run_interactive()
|