Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
apk-reverse — Agent-Skill für Android-APK-Reverse-Engineering: DEX-Patching, Entpacken, Neuverpacken, Entfernen von Werbung und Paywalls, Analyse nativer .so-Dateien und Laufzeit-Instrumentierung mit Frida. | Kitploit
Tools/GitHubGitHub/newliver666/apk-reverse
Android-SicherheitStatische AnalyseDynamische Analyse (Sandboxing)Code-AnalyseMobile App-PenetrationstestsReverse EngineeringScripting & AutomatisierungMalware-AnalyseMobile SicherheitBinäranalyseLernen & Bildung
1.4k37910vor 1 TagNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHubnewliver666/apk-reverse

apk-reverse

Agent-Skill für Android-APK-Reverse-Engineering: DEX-Patching, Entpacken, Neuverpacken, Entfernen von Werbung und Paywalls, Analyse nativer .so-Dateien und Laufzeit-Instrumentierung mit Frida.

Repository anzeigen

apk-reverse

English · 简体中文

stars forks license python android ci

Fähigkeiten · Struktur · Installation · Voraussetzungen · Fehlerkatalog · Umfang · Wartung · Haftungsausschluss

apk-reverse

Ein Agent Skill für Android-APK-Reverse-Engineering, Debloating, Werbeentfernung, chirurgisches Dex-Patching, Repacking und Laufzeit-/Server-Analyse.

Es ist ein Skill, kein Tutorial: Es ist darauf ausgelegt, von einem Agenten (Claude Code, Codex oder einem beliebigen Harness, der das Agent-Skills-Format unterstützt) während der Arbeit geladen zu werden, und ist daher für progressive Offenlegung organisiert — eine kurze, entscheidungsorientierte SKILL.md, detaillierte Referenzen, die nur bei Bedarf geladen werden, und parametrisierte Skripte, die direkt ausgeführt werden können.

Wie ein Agent dies konsumieren soll

SKILL.md ist bewusst als Prozedur mit Gates geschrieben und nicht als Ratschlag, denn der beobachtete Fehlermodus ist nicht Unwissenheit — es ist ein Modell, das das Ganze liest, zustimmt und dann trotzdem von ersten Prinzipien aus argumentiert.

Daher gibt es vier Dinge im Text, die befolgt und nicht nur gelesen werden sollen:

  • Vier Override-Regeln (R1–R4). Wo sie mit dem aktuellen Plan kollidieren, gewinnen sie, bis Beweise sie außer Kraft setzen.
  • Ein Symptom-Index. Jede Zeile ist ein Fehler, der bereits bezahlt wurde. Eine passende Zeile ist ein Stoppsignal: Lade diese Datei, bevor du einen weiteren Befehl ausführst, nicht erst nach ein paar weiteren Versuchen. Über ein bekanntes Symptom hinwegzureden ist der Weg, dieselben Stunden zweimal zu verbringen.
  • Vier Gates (G1–G4), jeweils eine Aktion mit einem Bestehenskriterium. „Ich verstehe die Idee" besteht kein Gate. Sie existieren, damit Klassifizierung, Umgebungswahrheit und ein Kontroll-Build vor dem ersten Patch stattfinden, nicht nach dem dritten Fehlschlag.
  • Eine Zwei-Treffer-Regel und Stoppbedingungen. Zwei Fehlschläge derselben Form bedeuten, dass das Modell falsch liegt, nicht die Parameter. Die dritte Variante einer Hypothese, die bereits zweimal gescheitert ist, ist der Ort, an dem Runden sterben.

Und eine Sache am Ende, die zurückgehalten werden soll: „Fertig" hat eine Definition (sechs Punkte). Ein sauberes Log ist keiner davon. Alles, was nicht alle sechs erfüllt, ist ein Checkpoint und sollte als Checkpoint mit dem Verbleibenden gemeldet werden.

Wenn du ein Agent bist, der dies liest: Der günstigste mögliche erste Befehl ist python skills/apk-reverse/scripts/doctor.py. Er sagt dir, welche dieser Tools hier existieren, welche Skripte tatsächlich ausgeführt werden können und ob etwas in der Umgebung bereits deine Messungen vergiftet.

Was es gut kann

  • Schnell entscheiden, ob eine Anfrage clientseitig überhaupt machbar ist, statt Stunden mit einer Paywall zu verbrennen, die serverseitig durchgesetzt wird.
  • Entscheiden, welche Form das Ergebnis haben muss, bevor irgendeine Arbeit beginnt — ein ungerootetes, eigenständiges Artefakt ist ein anderes Problem als „mach es auf dieser Maschine lauffähig", und die beiden zu verwechseln ist die teuerste Abweichung in diesem Bereich.
  • Die sicherste Patch-Ebene für eine gegebene Änderung wählen und die Ebenen vermeiden, die die App kaputt machen.
  • Den Repack-Fehler erkennen, der wie Erfolg aussieht: eine App, die sich installiert, startet und perfekt rendert, während jede signierte Anfrage abgelehnt wird, weil der Client seinen Anfrage-Signaturschlüssel aus seinem eigenen Signaturzertifikat ableitet.
  • Deine eigenen Fehler von den Problemen der App oder des Servers trennen — ein funktionsbezogener Fehler (Login, Registrierung, Zahlung) ist oft ein TLS-/Zertifikatsproblem auf einem Codepfad, keine Folge des gerade gebauten Patches. Gerätezustand, ein toter Geräteserver und Uhrzeitdrift tarnen sich auf dieselbe Weise.
  • Feststellen, welche Architektur und welche Bibliothek tatsächlich ausgeführt werden, statt darauf zu vertrauen, was das Manifest mitliefert oder was das Gerät behauptet.
  • Gepackte/gehärtete Ziele durcharbeiten: den Packer identifizieren, entpacken und einen Speicherauszug zurück in eine gepatchte, installierbare APK verwandeln.
  • Eine gehärtete Bibliothek handhaben, die den Prozess absichtlich beendet — einschließlich der Form des absichtlichen Absturzes (fault addr 0x4), die genau wie ein gewöhnlicher Null-Dereferenzierungs-Bug aussieht, und der Regel „neutralisiere es, aber niemals, indem du bewirkst, dass es nicht zurückkehrt", die entscheidet, ob der Fix funktioniert oder die ganze App auf eine Weise einfriert, die überhaupt nicht wie die Ursache aussieht.
  • Wissen, zu welchen Tools man greifen sollte und wo jedes einzelne lügt — einschließlich derer, die nur als GUI existieren, sodass man nach einem Menschen fragt, statt stillschweigend eine schwächere Methode zu substituieren.
  • Einen gepatchten Build gepatcht halten: Versionsprüfungen, erzwungene Upgrade-Dialoge und Selbst-Update-Installer neutralisieren, damit die Arbeit nicht remote abgeschaltet werden kann — und den Hot-Update-/Remote-Config-Kanal erkennen, der sie ohne jede Versionsänderung still und leise rückgängig machen kann.
  • Ein clientseitiges Anmelde-Gate (patchbar) von einer trennen (leer, weil der Server nichts zu antworten hat), und wissen, dass das Fälschen einer Session einen Zustand erzeugt, der schlimmer ist als abgemeldet zu sein.

Struktur

SKILL.md, references/ und scripts/ befinden sich alle im Skill-Verzeichnis, skills/apk-reverse/. Alles im Repository-Root ist Wartungs-Tooling, das über Skills hinweg geteilt wird, und nicht Teil eines installierten Skills.``` SKILL.md a procedure with gates, not background reading: how-to-use -> four override rules (R1-R4) symptom index (a matching row is a stop signal) four gates (G1-G4, actions with pass criteria) thirteen classification questions the workflow, with a per-step skip condition and a two-strike rule what "done" means -> stop conditions -> constraints -> indexes references/ loaded on demand, one topic each recon.md identify packer, SDKs, code location, tamper checks; unpacking server-config-and-updates.md the most common shape of "ad" and the one usually mis-diagnosed: the server supplies UI the client renders (launch screen, popup, announcement, tab set). The two-layer fetch that proves it, how to find the config DTOs by the field names data classes keep, why you patch the decision and not the data, deciding the scope of "remove", and remote re-enable / cached config durability byte-level-patching.md equal-length byte edits: why they beat method rebuilding (measured), locating an instruction's exact offset without scraping listings, the instruction width traps that desynchronise a decode, neutralise a branch vs redirect it, dex header integrity field order, and the verifier's move-result rule packers.md hardened targets: rejection signals, measuring the validation boundary with single-variable tests, choosing a native host code-virtualization-and-custom-linkers.md the layer between "packed" and "clean": whole classes turned into native declarations, a private loader whose SONAME does not match its filename, an embedded self-decrypting payload, a Java-layer "signature killer" that logs success while a native check kills you. The keep-it/drop-it deadlock, how to separate the checker from the implementation, and the string-redirect technique that ends it without neutralizing anything framework-runtimes.md Flutter / React Native / Unity: which layer owns the UI, and how to find logic when there are no symbols (string encoding traps) dart-aot.md Dart AOT in depth: version pinning and building a matching decompiler, the object pool and reference indexes, register/boolean conventions, the three signatures that identify business logic, locating, patching. Begins with the snapshot-decoding front end it depends on (aotopsy or blutter) because the pool listing is an input, not something this skill produces itself native-and-so.md .so hosts, DT_NEEDED vs JNI_OnLoad, relocation limits, relocation-free bootstrapping, replacing Java methods natively, and which ABI/library is native-tamper-and-suicide.md how a hardened library kills its own process: the visible mechanisms, how to tell which one actually fires, how to find the site, forged section headers, function boundaries from PT_GNU_EH_FRAME, scanner traps, and neutralising safely detection-and-anti-analysis.md when the app fights back or the tool cannot run here: telling detection apart from a broken environment, deciding by cost instead of escalating, recognising an environment where dynamic analysis simply does not work, and keeping the "blocks my analysis" question separate from "blocks the deliverable" toolchain.md what to install, how to invoke it non-interactively, which tools are GUI-only, version-alignment traps, working offline, , and which signer to use long-task-discipline.md live record, conclusion grading, drift control, timeout and wait calibration, deliverable-form drift, captures-you-never-looked-at, long-context decay, handover ad-removal.md ad taxonomy, wrapper mapping, callback trap, global gates, verification updates-and-forced-upgrade.md keeping a patched build alive: locating the version check, the two-layer patch (no-op the routine, neutralise the comparison), what not to touch (manifest version, installer permission, host blocking), self-update and hot-update/remote-config channels, verifying that no version request is issued at all account-gates.md sign-in walls, forced phone binding, guest mode: telling a client-side gate (patchable) apart from an account-scoped resource (not), why fabricating a session is worse than staying signed out, and the unavoidable session loss after a reinstall signature-derived-keys.md when the app's own signing certificate is used as key material: detection greps, why offline extraction is unreliable, the hardcode-then-verify procedure membership-and-limits.md server vs client authority; what is and is not patchable server-api.md probe an app's API; prove who owns the gate tls-and-cert.md feature-scoped network failures: expired certs, dual trust chains third-party-builds.md auditing a "cracked"/"modded" APK before trusting it dex-patching.md patch-layer table + dexlib2 technique in depth patch-audit.md proving a patch and is : length-vs-bytes comparison, the equal-length-replacement blind spot, verifier-level legality (move-result adjacency) checked statically, text-matching patch traps, and reporting a missing patch repack-and-sign.md repack rules, unpack-and-repack, signing, post-install hazards runtime-data.md DataStore / SharedPreferences / SQLite / protobuf; when the app rewrites your edit, and decoding a value that looks encrypted dynamic-frida.md Frida setup, version pinning, the four-layer probe, hook strategy environment.md device/emulator setup, root, ADB, offline devices, log signals, emulator console control and recovery, preflight, look-at-the-screen verification.md the claim ladder; what "done" means desensitization-and-leak-scans.md publishing discipline: what must be desensitized and what must stay, the do-not-anonymize list, the leak scanner and its exit states, and the entry-point file as a prompt surface precedents/ the positive case library: route including dead ends, a grade per assertion, measured pit-falls, and the write-back checklist routing.md the on-demand inventory: every reference with when to load it, every script with what it does, and a mirror of the symptom index rasc-and-droidsaw.md the Rust re-implementation of the ASC indexer: measured speedup and identical class sets, the enum shape where it silently drops bodies, and how to build and verify it evidence-summary.md the condensation that ships with the skill: capability, one-line conclusion, strength, and the evidence you can actually open in an installed copy

../evals/ NOT a spec directory either, but the location the Agent Skills guidance recommends: evals.json holds the with-skill / without-skill cases this skill has not run, with the method for running them written into the file ../evidence/ NOT a spec directory: the machine-readable companions to the evidence summary reference above -- capability-matrix.json (the same rows with more fields), tested-tool-versions.json (versions and the probe behind each), known-limitations.md (the installer-facing limit list). Shipped inside the skill so an installed copy can answer "was this verified, and how strongly" without the repository pitfalls.md the failure catalogue -- read before building advanced-unpacking.md the dump landed but the bodies are empty: extraction-shell diagnosis by trivial-body ratio, FART-style active invocation and why its classic hooks died on Android 12-16, code_item splicing, the root-side dump for when frida itself is refused, and the honest VMP boundary lsposed-and-modules.md the repack is refused, so deliver a system-level hook module instead: module anatomy, a gradle-free build chain, scope configuration and how to verify injection, and the layer a Java module cannot reach emulation-and-rpc.md call the routine instead of reading it: Unidbg/Unicorn emulation and its environment-filling cost, versus service-ifying a live function over Frida RPC native-dbi-and-deobfuscation.md OLLVM shapes, Frida-Stalker traces, the trace-to-CFG route, the Stalker/QBDI/emulation decision, and two measured boundaries (a follow that delivers no events, and a crash from following a hot libc export) protocol-reverse.md protobuf without a schema, schema recovery from decompiled code, gRPC frame capture, the QUIC/HTTP3 limit, and native-side certificate pinning kernel-and-environment-hardening.md userspace hooking provably cannot reach the check: raw svc, init_array-early detection, what each root scheme hides, the kernel-route map with its version gate, and when to stop escalating on-device-tooling.md working from the phone itself: MT Manager edit/repack/sign and its APK MCP, LSPosed Manager, Termux+frida, on-device data inspection java2c-and-jni-sinking.md Java2C and JNI sinking, the two hardening shapes most easily confused with an extraction shell: the table that separates landing shell / extraction shell / VMP / Java2C / JNI sinking, why the code is in the and in a dumped dex, and why a symbol search comes back empty (dynamic registration, ) split-apk.md App Bundle / split APK sets: what the set is, pulling it off a device, merging into one APK vs signing the set as a unit, the install refusals and what each means, and making an installable fixture from a pulled set vmp-differential-analysis.md the known-plaintext differential for a real Dex VMP: which links can be automated and which cannot (the upload is the bottleneck), the coverage a compiled fixture can reach, how to a derived private-opcode table, smali generation, and when the route is closed coverage-and-limits.md the claim ladder applied to the skill itself: the evidence behind each covered item, the dependencies this skill does not ship, and what was never exercised handoff-boundaries.md where this skill ends and another discipline begins: the JNI form table, the packer-versus-loader split, and what "verified" means for each of the four deliverable forms scripts/ parameterized, path-agnostic doctor.py run this first: capability report + per-script runnability, finds tools installed off-PATH or as runnable jars, and surfaces the environment facts that poison experiments (clock skew, leftover adb forward / proxy, a device-side frida process already running) dexutil.py dependency-free dex reader: structural walk + exact instruction decode, dex header recompute/verify (correct checksum/signature order), branch-target and operand helpers. Library shared by the dex scripts, also runs standalone to dump one method with offsets dex_find_insn.py locate an instruction by decoded semantics and print its exact byte offset with context and both sides of any branch -- how you find a patch site instead of guessing offsets dex_patch_bytes.py equal-length byte patches from a JSON spec: semantic match, polarity pin via expect_next, equal-length enforcement, verifier check, dex header recompute, re-decode to prove it landed (--dry-run first) dex_check_verifier.py tier-3 check: does any conditional branch target a move-result (bypassing its producer)? Compares two builds and separates pre-existing findings from regressions your patch introduced coldstart.py cold-launch capture: timed screenshot burst + logcat signals + installed-build facts + launch timing, and warns when the foreground activity is not your app so_constpatch.py same-length in-place rewrite of an isolated string constant, for redirecting a library load instead of defeating a check smtool.py baksmali/smali wrapper with a configurable classpath dexpatch/ dexlib2 method-level rewriter (for changes that need new instructions) patch_smali.py method-body replacement in a smali tree dex_strpatch.py byte-level string patch with a string_ids ordering guard dex_classdiff.py prove a dex edit was surgical dex_strings.py strings/URLs/SDK markers without a decompiler dart_pool_strings.py recover literals from a Dart AOT snapshot (framed entries, the one-byte vs UTF-16 split, file offsets, run-length noise filter) dart_pprefs.py build/query the object-pool -> code-site index for a Dart snapshot dart_disasm.py annotated windowed disassembly of Dart AOT code + B/BL caller index find_refs.py count callers of a method before patching it repack.py rebuild APK, strip only signatures, keep META-INF/services/, write a 4-byte-aligned archive (resources.arsc STORED+aligned), sign, verify; also split APK / App Bundle sets: inventory, sign every member with one keystore, or merge code/native members into a standalone APK devsh.py quoting-safe ADB shell helper usb_net_proxy.py give an offline device network over USB datastore_inject.py encode/inject AndroidX DataStore preferences safely probe_api.py probe an HTTP API with the right headers grab_crash.py recover stacks hidden by a crash-reporter SDK install_test.py install + launch health check with logcat signal scan frida_probe.js four-layer runtime probe (app net layer + OkHttp + java.net + exceptions) run_probe.py inject the probe, stream it to a log file, stay resident tls_check.py strict certificate check for one or more hosts preflight.py environment check before every experiment block (device, root, ABI/translation, clock skew, leftover proxy/forwards, dead server) lib_map.py what is into a live process: per-library path, base, architecture, and whether it came from the APK or was materialized at runtime elf_plt.py resolve a PLT stub to its imported symbol (x86_64 + aarch64) from the relocation table; list a symbol's callers; byte-diff two libraries and name the symbol each changed stub belongs to apk_diff.py entry-level diff of two builds: changed / added / removed, by content hash so same-size replacements are caught native_crash.py locate a native death from a log or tombstone: signal, fault address, registers, frames split app vs system, the faulting instruction, and a flag when the fault looks blob_decode.py search, don't guess, the framing of a stored value (base64/hex x rotation x deflate); re-encode the edited payload snap.py bounded burst screenshots + control-tree capture with a stall detector, and a verdict on whether the tree is usable at all sig_probe.py find the exact signatures[0].toCharsString() value — offline candidates from an APK, or the authoritative read from a device spawn_patch_detach.py spawn under a Frida probe, detach, then launch and capture: under spawn mode the Activity stack often never comes up, and memory writes survive detach while hooks do not hook_patch_only.js the minimal probe for spawn_patch_detach.py — neutralise one native death site by offset and report PATCHED dex_dump_validate.py dedupe, validate and rank a directory of dumped dex images: sha256 grouping, header integrity, the trivial-body ratio that separates a real dump from an extraction-shell skeleton, and a most-likely-original ranking (--trim for page-aligned /proc//mem captures) dex_mem_scan.py search memory captures for embedded dex images and extract each at the size its own header declares -- for a decrypted dex sitting in an anonymous mapping no maps entry names lsposed_scaffold.py generate a minimal LSPosed/Xposed module project (manifest with the xposed meta-data, assets/xposed_init, hook class, gradle-free build notes) frida_rpc_serve.py bridge a Frida script's rpc.exports to a local caller with reconnect handling, so a live native function can be called rather than reversed rpc_template.js the editable companion to frida_rpc_serve.py stalker_trace.js instruction-level tracing with Frida Stalker: configurable targets, trigger selection, the event stream, and output-size rules stalker_report.py reduce a stalker_trace.js log to block histograms and call sequences, with an explicit diagnostic for the measured zero-event case mt_mcp_probe.py probe MT Manager's on-device APK MCP (Streamable HTTP, port 8787): JSON-RPC handshake plus the grouped tool inventory java2c_probe.py collect the evidence that separates Java2C from an extraction shell, a VMP and ordinary JNI sinking: native density and stub ratio from the dex, JNI_OnLoad / dynamic registration / toolchain strings from the , each item labelled strong/medium/weak protobuf_decode_raw.py schema-free protobuf decode: hex / file / stdin to a JSON tree, every length-delimited field kept as a candidate set with ties labelled rather than guessed, plus a byte-exact re-encode to check a round trip vmp_diff_harness.py build a labelled opcode-coverage fixture, derive a candidate private- opcode map from an original/hardened dex pair, verify the comparison in a closed loop, and render a restored stream as a smali skeleton kernelsu_syscall_mask.py generate a KernelSU/APatch syscall-masking scaffold: an installable userspace module skeleton plus KPM/LKM/eBPF kernel-side templates, each with its version gate and an explicit unverified label rasc_build.py build and verify rasc, the Rust ASC re-implementation: --check what is present, --build clone plus cargo, --verify an APK against droidasc and fail on any class-set difference scan_leaks.py scan a repository for target identity before publishing it: bundle ids in manifest / / contexts, serial-shaped tokens, PATs, inline appkey assignments, literal endpoints, host user paths. Exemptions for everything that must stay (tools, libraries, CVEs, hardening products, public crackmes, placeholders), findings carry their context, prints why a hit was suppressed, exit 0/1/2 svc_scan.py name the syscall behind an inline and the segment it sits in, which decides whether a libc-level hook can observe the call at all; shows neighbours because a byte scan also matches data anti_detect_probe.js observer-only Frida probe (patches nothing): path/loader/thread/kill hooks with caller module + offset, an environment self-report (, frida-named mappings), and live streaming so a sub-second self-destructing target still yields evidence

root@kitploit:~
Das Repository enthält außerdem eine **ausführbare** Testebene, die sich von der
Nachweisaufzeichnung unterscheidet: `tests/` prüft, was die Skripte tun (Unit-, CLI-Vertrag-, No-Device-
Integration), und `tests/benchmark.md` zeichnet auf, was eine Route auf einem realen Ziel ausgeführt hat. `tests/README.md`
beschreibt die Aufteilung, und `.github/workflows/ci.yml` führt die Gates plus die Suite aus.

## Installation

Dieses Repository ist ein **Skills-Repository**: Der Skill liegt unter `skills/apk-reverse/`, was dem
Layout entspricht, das die `skills`-CLI auflöst, und er wird namentlich installiert statt durch Kopieren eines Verzeichnisses:```
npx skills add newliver666/apk-reverse              # install every skill in the repo
npx skills add newliver666/apk-reverse --list       # list what is here, install nothing
npx skills add newliver666/apk-reverse --skill apk-reverse -y
npx skills use  newliver666/apk-reverse@apk-reverse # use it once, without installing

Die CLI verlinkt den Skill standardmäßig in das Skills-Verzeichnis deines Agenten (mit --copy werden stattdessen unabhängige Kopien erstellt), und -g installiert für jedes Projekt statt nur für das aktuelle. Mit einem einzigen Skill im Repository ist --skill apk-reverse heute überflüssig; es wird hier ausgeschrieben, weil es den einzelnen Skill auswählt, sobald ein zweiter existiert.

Nach der Installation lädt der Agent SKILL.md, wenn eine Aufgabe zu dessen Beschreibung passt, und zieht references/* nur bei Bedarf hinzu. Kein globaler Zustand, keine maschinenspezifischen Pfade und kein Build-Schritt.

Anforderungen

Nichts ist zwingend erforderlich; jedes Skript prüft, was es benötigt. skills/apk-reverse/scripts/doctor.py meldet, welche davon hier vorhanden sind, welche Skripte daher ausgeführt werden können und — nützlicherweise — welche Tools an einem anderen Ort als PATH existieren.

Wenn deine Toolchain außerhalb von PATH liegt (ein projektlokales tools/-Verzeichnis, ein versionierter SDK-Ordner, eine ausführbare .jar statt eines Befehls), setze APKREV_TOOLS auf ein oder mehrere Verzeichnisse, und doctor.py findet sie:``` set APKREV_TOOLS=

; # Windows, e.g. an SDK or project-local tools dir export APKREV_TOOLS=: # POSIX

root@kitploit:~
Die Skripte selbst sind reines `python3` und sollen identisch unter Windows, macOS und
Linux funktionieren; wo ein Snippet nur POSIX-kompatibel ist, wird es gekennzeichnet. Nichts hier setzt eine Unix-Shell voraus.

| Tool | Verwendet für |
|---|---|
| Python 3.9+ | alle Skripte |
| **`droidasc`** (ASC) (**optional, aber dringend empfohlen — zuerst installieren**) | Ganz-APK-übergreifender Referenzindex: `findrefs` / `listclass` / `getclass` / `getmanifest`. Ein `pip install droidasc`, keine JVM, kein SDK, kein Index-Build. Verwandelt „welche von N tausend Klassen erwähnt diesen String" in eine Sub-Sekunden-Abfrage, und es ist der einzige Weg zu einer Klasse, deren Name R8 verstümmelt hat. **Dies ist das Tool, zu dem ein Agent vor jedem vollständigen Decompile greifen sollte** — siehe `skills/apk-reverse/references/toolchain.md` §droidasc (ASC) — frage ein APK „wer referenziert dies?", in einer Abfrage |
| `ddc` (optional, aber dringend empfohlen) | Single-Binary-Dex→Java-Decompiler mit Query-Subkommandos (`info`, `findrefs`, `strings --with-locations`, Per-Class-Decompile). Keine JVM. **Liest**, was ASC **lokalisiert**; meldet außerdem die Paketidentität zuverlässig — siehe `skills/apk-reverse/references/toolchain.md` §ddc — Dex-zu-Java mit Query-Subkommandos (übernahmewürdig) |
| `baksmali` / `smali` + `dexlib2`-Jars | Disassemblierung, Assemblierung, chirurgisches Patchen |
| JDK (`javac`, `java`) | Bauen/Ausführen des dexlib2-Patchers; stellt außerdem `keytool`/`jarsigner` bereit |
| Android SDK build-tools (`aapt`, `zipalign`, `apksigner`) | Manifest-Info, Alignment, Signierung. **`apksigner` ist der zu verwendende Signierer** — `jarsigner` schreibt das Archiv neu und bricht das Alignment, das Android R+ erfordert |
| `uber-apk-signer` (optional) | einstufiges Align + Sign |
| ADB | Gerätearbeit |
| Frida (Host-Paket + passender On-Device-Server) | dynamische Analyse |
| ein gerootetes Gerät oder Emulator | alles jenseits statischer Analyse |

Nichts davon muss im `PATH` liegen: Jedes Skript akzeptiert einen expliziten Pfad für die
Tools, die es aufruft, und `skills/apk-reverse/references/toolchain.md` behandelt das Auffinden
einer Installation, die der `PATH` nicht kennt (der häufige Fall bei `apksigner` und
`keytool`).

## Zuerst lesen

**Dieses Projekt wird ausschließlich zum Lernen, für Forschung und autorisierte Sicherheitstests veröffentlicht.** Es enthält
keine Exploit-Payloads, keine Zieldaten und keine Drittanbieter-Binaries — es ist eine Methode, eine Sammlung von Skripten
und eine Evidenzaufzeichnung. Sie sind dafür verantwortlich, das Recht zu haben, alles zu analysieren, worauf Sie es richten;
siehe **Disclaimer** am Ende dieser Datei.

`skills/apk-reverse/references/pitfalls.md`. Es ist die wertvollste Datei hier — jeder Eintrag ist ein
Fehler, der ein kaputtes Artefakt erzeugte, während er vollkommen gesund aussah.

Die vier, die am meisten schmerzen:

1. Das Entfernen des gesamten `META-INF/` während eines Repacks löscht ServiceLoader-Registrierungen
   und die App stirbt beim Start mit einem Fehler, der eine unzusammenhängende Bibliothek nennt.
2. Das Patchen eines Byte-Level-Strings ohne Beibehaltung der `string_ids`-Reihenfolge führt dazu, dass das gesamte
   dex abgelehnt wird, während Prüfsummen und Signaturen einwandfrei verifizieren.
3. Das Neuerstellen eines dex mit einem Ganzbaum-Smali-Roundtrip beschädigt R8-Output unsichtbar —
   Klassentabellen vergleichen sauber, und es explodiert erst zur Laufzeit.
4. Das Neutralisieren eines nativen Terminate-Pfads, indem man ihn **nicht zurückkehren** lässt. Ein spinnender Stub unterdrückt
   die Prüfung nicht; er friert den Aufrufer und jeden Thread dahinter ein. Die App hängt mit *überhaupt keinem
   Crash-Record*, und der eventuelle Tod wird dem zugeschrieben, was den eingefrorenen Prozess getötet hat.

## Umfang

Gebaut für die Arbeit an eigenen Anwendungen, an Samples, die Sie autorisiert analysieren dürfen,
und in CTF-/Wettbewerbs-Sandboxes. Es enthält keine eingebundenen Drittanbieter-Binaries und keine
zielspezifischen Daten.

Was es abdeckt und was es bewusst nicht abdeckt, steht oben in `SKILL.md`
unter **Coverage**. Die Kurzfassung: nur Android (kein iOS), und tiefgehend auf den Schichten,
die wirklich durchgearbeitet wurden — dex-Patching, Repacking, Packer und Custom
Loader, native Tamper Response und Flutter/Dart AOT. Ein Erweiterungsdurchgang fügte eine zweite
Ebene dokumentierter Routen hinzu: **modulseitige Auslieferung**, wenn ein Repack blockiert ist,
**Extraction-Shell-Recovery** und ihre VMP-Grenze, **Emulation und Live-RPC** zum Aufrufen statt Lesen,
**Instruktions-Level-Tracing** gegen OLLVM, **Protokoll-Reversing** jenseits von REST, die **kernel-seitige Routen**-Karte für den Fall, dass Userspace-Hooking nachweislich außer Reichweite ist, und **On-Device-Tooling**. Ein **Benchmark-Durchgang** setzte dann öffentliche
Ziele unter diese Routen (`tests/benchmark.md`): Er fügte **Java2C-Diskriminierung** hinzu (die
Fehldiagnose, die einen Agenten auf die Jagd nach einem entschlüsselten DEX schickt, das nie existiert), **Split-APK-/
App-Bundle-Handling**, **schemafreie Protobuf-Dekodierung**, eine **Dex-VMP-Differential**-Harness
und **Kernel-Modul-Templates mit ihren Versions-Gates** — und er korrigierte zwei frühere Behauptungen,
deren Messungen ihnen widersprachen. Unity/IL2CPP-Logikwiederherstellung,
React Native/Hermes-Bytecode-Interna und das Besiegen einer serverseitigen Autorität werden **nicht**
abgedeckt, und die Skill ist so geschrieben, dass sie das sagt und aufhört, statt die nächstgelegene
dokumentierte Prozedur auf ein Ziel anzuwenden, für das sie nicht geschrieben wurde.

Vier Qualifikationen, die der Coverage-Abschnitt vollständig darlegt und die auch hierher gehören:

- **Flutter/Dart-AOT-Analyse hat eine Abhängigkeit.** Der Workflow beginnt bei einer Pool-Auflistung
  (`pp.txt`-Klassen-Output). Deren Erzeugung benötigt einen Snapshot-Decoding-Decompiler — aotopsy (ein statisches
  Binary, keine Toolchain) oder blutter (aus dem Quellcode gebaut, ~80 s) — und dieses Repository enthält
  keinen. Er wird als Voraussetzung genannt statt implizit gelassen.
- **Nicht jede Behauptung in diesem Repository hat einen Lauf hinter sich.** `docs/tool-verification/` zeichnet auf,
  was tatsächlich gemessen wurde, an welchem Ziel und mit welchem unabhängigen Cross-Check; alles, was dort nicht
  abgedeckt ist, ist aus Erfahrung dokumentiert und sollte als *abgeleitet* gelesen werden, gemäß der eigenen
  Claim-Leiter dieser Skill.
- **Der Erweiterungsdurchgang ist separat aufgezeichnet und größtenteils *abgeleitet*.** Seine Evidenz liegt in
  `docs/tool-verification/EXTENSION-*.md`, eine Datei pro Thema, mit eigener Stärke-Notiz. Die
  gemeinsame Form dort ist *das Tool wurde gemessen, die Route nicht* — lesen Sie also diese Dateien, bevor
  Sie eines der neueren Dokumente als verifizierten Pfad behandeln.
- **Der Benchmark-Durchgang ist pro Zeile aufgezeichnet, mit der jeweiligen Stärke dieser Zeile.** `tests/benchmark.md`
  nennt jedes öffentliche Ziel, die Skripte, die die Zeile ausübt, was tatsächlich passierte (einschließlich der
  Zeilen, die fehlschlugen, und der Zeilen, die niemand ausführte), und wie stark die Evidenz ist. Zeilen, die als
  `unverified` markiert sind, sind Aussagen über die Evidenz in diesem Repository, nicht über den Mechanismus.

## Repository-Wartung

Vier Tools liegen im Root und sind nicht Teil der installierten Skill:```
check_repo.py      every skill discovered, frontmatter valid, scripts runnable,
                   documented paths resolve, README paths explicit and existing,
                   and -- on the tracked surface only -- no target identity
                   (delegates the rules to skills/apk-reverse/scripts/scan_leaks.py
                   so there is one place to argue with the exemption list)
check_refs.py      every cross-reference that names a section of another
                   document reaches a real heading in that document
check_routing.py   the on-demand inventory still matches the entry point: the
                   symptom mirror agrees with SKILL.md, every reference file is
                   named in skills/apk-reverse/references/routing.md, and every
                   script is too
check_commands.py  every command a document tells you to run is checked against
                   the script's own argparse table -- a documented flag that does
                   not exist is a drift the anchor checks cannot see
check_budget.py    keep the always-loaded part from creeping: SKILL.md's whole
                   body (index lines included, because they load too) measured in
                   lines and tokens, index-row length, long files with no
                   navigable head, and hedged rules reported as a trend
build_scripts.py   audit for machine-specific leftovers (absolute paths, credentials)

Konsistenz hat einen natürlichen Gegendruck – ein kaputter Pfad schlägt laut fehl, und jemand repariert ihn. Bloat hat keinen, weshalb das dritte Werkzeug existiert: Jeder Durchlauf fügt eine Referenz, eine Indexzeile und eine Abdeckungsbehauptung hinzu, und ohne eine Messung bemerkt nichts im Repository etwas davon.

tests/benchmark.md enthält die Regressionsmatrix: Dimension -> öffentliches Ziel -> die Skripte, die die Zeile ausübt -> gemessenes Ergebnis -> Stärke-Label. Sie ist die Checkliste, die vor dem Vertrauen auf irgendeine Behauptung unter docs/tool-verification/ erneut ausgeführt werden muss. Beispiele werden in tools/_work/ heruntergeladen und niemals committet, daher nennt jede Zeile ihre öffentliche Quelle und zeichnet den Hash auf, gegen den sie ausgeführt wurde.

docs/tool-verification/ ist ebenfalls nicht Teil der installierten Skill. Es ist der Nachweisbericht für einen Messdurchlauf gegen ein reales Ziel: was jedes Skript tatsächlich getan hat, welche unabhängige Methode es bestätigt hat, welche Defekte gefunden wurden und welche Szenarien das Ziel nicht ausüben konnte. Es existiert, damit die Coverage-Behauptungen in SKILL.md gegen Läufe geprüft werden können, statt ihnen zu vertrauen, und damit die Lücken dort niedergeschrieben sind, wo die nächste Person sie finden wird.


Stolz unterstützt von der LINUX DO-Community.

Haftungsausschluss

Nur für Lernen, Forschung und autorisiertes Sicherheitstesten. Jedes Skript, jede Referenz und jedes aufgezeichnete Ergebnis in diesem Repository existiert, um zu erklären, wie Android-Anwendungsanalyse funktioniert, damit Praktiker über die Werkzeuge, die sie bereits besitzen, nachdenken können. Nichts hier ist ein Dienst, ein Produkt oder eine Befürwortung einer bestimmten Verwendung.

  • Nur autorisierte Ziele. Verwenden Sie dies bei Anwendungen, die Ihnen gehören oder für die Sie ausdrücklich die Erlaubnis zur Analyse erhalten haben, bei öffentlichem CTF-/Challenge-Material oder in einer Sandbox, die Sie kontrollieren. Die Analyse von Software, für die Sie kein Recht zur Analyse haben, kann dort, wo Sie leben, rechtswidrig sein, und diese Feststellung liegt bei Ihnen, nicht bei diesem Repository.
  • Keine Gewährleistung, keine Eignung für irgendeinen Zweck. Das Material wird wie besehen bereitgestellt, ohne Gewährleistung jeglicher Art. Ergebnisse werden so aufgezeichnet, wie sie auf einer Maschine zu einem Zeitpunkt gemessen wurden; nichts hier verspricht, dass eine Route auf Ihrem Ziel, Ihrem Gerät, Ihrer Toolchain oder der heutigen App-Version funktioniert.
  • Verifizieren Sie, bevor Sie vertrauen; sichern Sie, bevor Sie handeln. Mehrere Skripte verändern Artefakte (dex, APK, .so, gespeicherte App-Daten) und einige arbeiten auf einem gerooteten Gerät. Bewahren Sie Ihre eigenen Kopien auf, arbeiten Sie an Duplikaten und lesen Sie die Gates in SKILL.md, bevor Sie irgendetwas gegen etwas ausführen, das Ihnen wichtig ist.
  • Ihre Verwendung liegt in Ihrer Verantwortung. Die Autoren und Mitwirkenden übernehmen keine Haftung für jeglichen Verlust, Schaden, rechtliche Konsequenz oder Dienstunterbrechung, die aus der Verwendung oder dem Missbrauch dieses Repositorys entstehen, und sind nicht mit irgendeiner Anwendung, irgendeinem Anbieter oder irgendeiner Plattform verbunden, mit der es zur Untersuchung verwendet werden könnte, werden von diesen nicht unterstützt und handeln nicht in deren Auftrag.
  • Testdaten werden hier nicht verteilt. Beispiele, Dumps und Geräteartefakte fehlen absichtlich im Baum (.gitignore schließt sie aus) und leben nur in einem lokalen, ignorierten Arbeitsbereich. Alles, was Sie beschaffen, um mitzumachen, liegt bei Ihnen, es sicher aufzubewahren und zu löschen, wenn Sie damit fertig sind – befolgen Sie Ihre lokalen Regeln und die Bedingungen, die mit dem Beispiel kamen. Was dieses Repository tatsächlich veröffentlicht, ist die Methode und die Beweise, mit aller Zielidentität entfernt.
  • Keine Verbindung. Namen von Werkzeugen, Bibliotheken, Härtungsprodukten und öffentlichen Challenge-Zielen erscheinen nur, um das Material wiederverwendbar zu machen; sie gehören ihren jeweiligen Eigentümern und dieses Projekt ist nicht mit ihnen verbunden.
Tool herunterladen
kontogebundenen Ressource
  • Eine lange Aufgabe ehrlich halten: eine Live-Aufzeichnung, benotete Schlussfolgerungen, kalibrierte Timeouts und begrenzte Wartezeiten, damit Fortschritt nicht verloren geht und derselbe Fehler nicht zweimal gemacht wird.
  • Die spezifischen Fehler vermeiden, die eine APK erzeugen, die perfekt baut und zur Laufzeit stirbt.
  • Entscheiden, was das Ergebnis sein sollte, wenn eine APK keine Option ist — ein Repack, das von mehreren unabhängigen Prüfungen abgelehnt wird, ist blockiert, nicht teuer, und die Fallback-Leiter ist ein systemweites Modul, ein lokaler RPC-Dienst oder ein ehrlicher Bericht mit einer benannten Grenze.
  • Einen echten Speicherauszug von einem Extraktions-Shell-Skelett unterscheiden und wissen, welche Wiederherstellungsroute gilt — einschließlich des Root-seitigen Dumps für den Fall, dass frida selbst abgelehnt wird. Was die Messung sehen kann und was nicht, steht in skills/apk-reverse/references/advanced-unpacking.md.
  • Eine Routine aufrufen, statt sie zu reversen, wenn das Reversen mehr kostet als das Aufrufen: emulierte Ausführung auf dem Host oder eine Live-Funktion, die über Frida RPC als Dienst bereitgestellt wird.
  • Ausführungsnachweise auf Instruktionsebene lesen, wenn eine native Funktion von OLLVM in eine Zustandsmaschine zerlegt wurde — einschließlich der beiden Arten, wie Stalker nachweislich auf einem echten Gerät zurückschlägt.
  • Erkennen, wann Userspace-Hooking die Prüfung überhaupt nicht erreichen kann (rohe svc-Syscalls, init_array-frühe Erkennung), was die nächste Ebene darüber und darunter tatsächlich tun kann und wann Eskalieren die falsche Antwort ist.
  • Protokolle bearbeiten, die nicht REST sind — Protobuf ohne Schema, gRPC, QUIC/HTTP3 — und natives Zertifikats-Pinning, das den System-Trust-Store ignoriert.
  • Vom Telefon selbst aus arbeiten: MT Managers Edit-/Repack-/Sign-Flow und seine APK-MCP- Oberfläche, LSPosed Manager und On-Device-Dateninspektion, Seite an Seite mit der PC-Toolchain statt an ihrer Stelle.
  • Java2C von einer Extraktions-Shell unterscheiden, bevor man Stunden mit der Jagd nach einem entschlüsselten DEX verbringt, das zu keinem Zeitpunkt der Prozesslebensdauer existiert — der Code wurde in eine .so kompiliert.
  • Einen Build handhaben, der als Split-APK-/App-Bundle-Set ankommt: das Set von einem Gerät lesen, jedes Mitglied mit einem Keystore für pm install-multiple signieren oder Code-/Native- Mitglieder zu einer eigenständigen APK zusammenführen, wenn das legal ist.
  • Eine echte Dex VMP mit dem Known-Plaintext-Differential bearbeiten — welche Verknüpfungen automatisiert werden können und welche nicht, was ein kompiliertes Fixture erreichen kann und was nicht, und wie man eine abgeleitete Private-Opcode-Tabelle beweist, statt eine zu behaupten.
  • Veröffentlichen, was es lernt, ohne das Ziel zu veröffentlichen — ein Scanner, der Identitätsformen mit ihrem Kontext meldet, eine explizite Liste dessen, was nicht redigiert werden darf (Tools, Bibliotheken, Protokollfelder, CVEs, Härtungsprodukte, öffentliche Crackmes), weil das Redigieren dieser Dinge den wiederverwendbaren Teil zerstört, und Exit-Codes, die einen Commit gaten.
  • Einen Präzedenzfall lesen, bevor man Arbeit wiederholt, auf die dieses Repository bereits konvergiert ist: die positive Hälfte des Datensatzes, mit der Route einschließlich ihrer Sackgassen, einer Benotung jeder Behauptung und den Dateien, in die der Fall laut eigener Aussage zurückgeschrieben werden soll.
  • actually loaded and executing
    "not on PATH" is not "not installed"
    landed
    legal
    .so
    never
    Java_*
    -fvisibility=hidden
    prove
    actually mapped
    arranged
    .so
    pm
    ps
    --show-exempt
    svc
    --context
    TracerPid