
Навык агента для обратного проектирования Android APK: патчинг dex, распаковка, перепаковка, удаление рекламы и пейволов, анализ нативных .so и инструментирование во время выполнения с помощью Frida.
English · 简体中文
Возможности · Структура · Установка · Требования · Каталог ошибок · Область применения · Обслуживание · Отказ от ответственности
Agent Skill для обратной разработки Android APK, удаления лишнего, удаления рекламы, точечного патчинга dex, переупаковки и анализа во время выполнения/на стороне сервера.
Это навык, а не руководство: он написан так, чтобы загружаться агентом (Claude Code,
Codex или любым харнессом, поддерживающим формат Agent Skills) во время работы, поэтому он
организован для постепенного раскрытия — короткий SKILL.md, ориентированный на принятие решений, подробные
справочники, загружаемые только когда они нужны на конкретном шаге, и параметризованные скрипты, которые можно запускать
напрямую.
SKILL.md намеренно написан как процедура с воротами, а не как совет, потому что
наблюдаемый режим отказа — это не незнание, а модель, которая читает всё целиком, соглашается с этим, а
затем всё равно рассуждает с нуля.
Поэтому в теле есть четыре вещи, которые предназначены для того, чтобы действовать по ним, а не просто читать:
И одна вещь в конце, которая предназначена для того, чтобы её придержать: у «готово» есть определение (шесть пунктов). Чистый лог — не один из них. Всё, что меньше всех шести, — это контрольная точка, и о ней следует сообщать как о контрольной точке с указанием того, что осталось.
Если вы агент, читающий это: самая дешёвая возможная первая команда —
python skills/apk-reverse/scripts/doctor.py. Она сообщает вам, какие из этих инструментов здесь есть, какие
скрипты действительно могут запуститься и не отравляет ли что-то в окружении ваши
измерения уже сейчас.
fault addr 0x4), которая выглядит точно как обычная ошибка разыменования null,
и правило «нейтрализовать её, но никогда не делая так, чтобы она не возвращалась», которое решает, будет ли
исправление работать или заморозит всё приложение так, что это совсем не похоже на причину.SKILL.md, references/ и scripts/ находятся внутри каталога навыка, skills/apk-reverse/.
Всё в корне репозитория — это инструментарий обслуживания, общий для навыков, а не часть
установленного навыка.```
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
Репозиторий также содержит **исполняемый** слой тестов, который отличается от
записи доказательств: `tests/` проверяет, что делают скрипты (модульные тесты, контракт CLI,
интеграция без устройства), а `tests/benchmark.md` фиксирует, что делал маршрут на реальной цели. `tests/README.md`
описывает это разделение, а `.github/workflows/ci.yml` запускает проверки и набор тестов.
## Установка
Этот репозиторий является **репозиторием навыков**: навык находится в `skills/apk-reverse/`, что соответствует
структуре, которую разрешает CLI `skills`, и устанавливается по имени, а не путём копирования каталога:```
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
CLI по умолчанию создаёт символическую ссылку на навык в каталоге навыков вашего агента (--copy вместо этого создаёт независимые копии), а -g устанавливает его для всех проектов, а не только для текущего. При наличии одного навыка в репозитории --skill apk-reverse сегодня избыточен; он указан здесь потому, что именно он выбирает один навык, как только появится второй.
После установки агент загружает SKILL.md, когда задача соответствует его описанию, и подтягивает references/* только по мере необходимости. Никакого глобального состояния, никаких путей, специфичных для конкретной машины, и никакого этапа сборки.
Ничего не является обязательным; каждый скрипт проверяет то, что ему нужно. skills/apk-reverse/scripts/doctor.py сообщает, какие из этих компонентов присутствуют здесь, какие скрипты, следовательно, могут выполняться, и — что полезно — какие инструменты существуют где-то вне PATH.
Если ваш инструментарий находится вне PATH (локальный для проекта каталог tools/, папка версионированного SDK, исполняемый .jar вместо команды), задайте APKREV_TOOLS как один или несколько каталогов, и doctor.py найдёт их:```
set APKREV_TOOLS=
Сами скрипты — это обычный `python3`, и предполагается, что они одинаково работают на Windows, macOS и
Linux; там, где фрагмент только для POSIX, это указано. Здесь ничто не предполагает наличия Unix-шелла.
| Инструмент | Для чего используется |
|---|---|
| Python 3.9+ | все скрипты |
| **`droidasc`** (ASC) (**необязательно, но настоятельно рекомендуется — установите его первым**) | индекс перекрёстных ссылок по всему APK: `findrefs` / `listclass` / `getclass` / `getmanifest`. Один `pip install droidasc`, без JVM, без SDK, без сборки индекса. Превращает вопрос «какой из N тысяч классов упоминает эту строку» в запрос, выполняемый за доли секунды, и это единственный путь к классу, чьё имя искалечил R8. **Это инструмент, к которому агенту следует обратиться до любого полного декомпилирования** — см. `skills/apk-reverse/references/toolchain.md` §droidasc (ASC) — спросить у APK «кто ссылается на это?» одним запросом |
| `ddc` (необязательно, но настоятельно рекомендуется) | однобинарный декомпилятор dex→Java с подкомандами-запросами (`info`, `findrefs`, `strings --with-locations`, декомпиляция отдельного класса). Без JVM. **Читает** то, что ASC **находит**; также надёжно сообщает идентичность пакета — см. `skills/apk-reverse/references/toolchain.md` §ddc — dex-to-Java с подкомандами-запросами (стоит взять на вооружение) |
| `baksmali` / `smali` + jar-файлы `dexlib2` | дизассемблирование, ассемблирование, точечное патчирование |
| JDK (`javac`, `java`) | сборка/запуск патчера dexlib2; также предоставляет `keytool`/`jarsigner` |
| Android SDK build-tools (`aapt`, `zipalign`, `apksigner`) | информация о манифесте, выравнивание, подпись. **`apksigner` — это тот инструмент подписи, который нужно использовать** — `jarsigner` перезаписывает архив и нарушает выравнивание, требуемое Android R+ |
| `uber-apk-signer` (необязательно) | выравнивание + подпись в один шаг |
| ADB | работа с устройством |
| Frida (хост-пакет + совпадающий сервер на устройстве) | динамический анализ |
| рутованное устройство или эмулятор | всё, что выходит за рамки статического анализа |
Ничто из этого не обязано быть в `PATH`: каждый скрипт принимает явный путь к
инструментам, которые он вызывает, а `skills/apk-reverse/references/toolchain.md` описывает, как найти
установку, о которой `PATH` не знает (обычный случай для `apksigner` и
`keytool`).
## Сначала прочитайте это
**Этот проект публикуется только для обучения, исследований и авторизованного тестирования безопасности.** Он не содержит
эксплойт-пейлоадов, данных о целях и сторонних бинарников — это метод, набор скриптов
и запись доказательств. Вы несёте ответственность за наличие права анализировать то, на что вы его направляете;
см. **Отказ от ответственности** в конце этого файла.
`skills/apk-reverse/references/pitfalls.md`. Это самый ценный файл здесь — каждая запись в нём — это
сбой, который породил сломанный артефакт, выглядя при этом совершенно здоровым.
Четыре самых болезненных:
1. Удаление всего `META-INF/` при перепаковке уничтожает регистрации ServiceLoader,
и приложение умирает при запуске с ошибкой, называющей не связанную с этим библиотеку.
2. Патчинг строки на байтовом уровне без сохранения порядка `string_ids` приводит к тому, что весь
dex отвергается, при этом контрольные суммы и подписи проверяются идеально.
3. Пересборка dex с полным круговым проходом smali по всему дереву незаметно повреждает вывод R8 —
таблицы классов сравниваются чисто, и всё взрывается только во время выполнения.
4. Нейтрализация нативного пути завершения путём принудительного **невозврата** из него. Крутящаяся заглушка не
подавляет проверку; она замораживает вызывающего и каждый поток за ним. Приложение зависает *без
какой-либо записи о падении*, и итоговую смерть списывают на то, что убило замороженный процесс.
## Область применения
Создан для работы с вашими собственными приложениями, с образцами, которые вам разрешено анализировать,
и в песочницах CTF/соревнований. Он не содержит встроенных сторонних бинарников и никаких
данных, специфичных для целей.
Что он покрывает и что намеренно не покрывает, указано в начале `SKILL.md`
в разделе **Coverage**. Краткая версия: только Android (без iOS), и глубоко на тех слоях,
которые были реально проработаны — патчинг dex, перепаковка, упаковщики и кастомные
загрузчики, нативная реакция на вмешательство и Flutter/Dart AOT. Проход расширения добавил второй
уровень документированных маршрутов: **доставка на стороне модуля**, когда перепаковка заблокирована,
**восстановление извлекающей оболочки** и её граница VMP, **эмуляция и живой RPC** для
вызова, а не чтения, **трассировка на уровне инструкций** против OLLVM, **реверс протоколов**
за пределами REST, карта **маршрута на стороне ядра** для случаев, когда хукинг в пользовательском пространстве доказуемо недостижим,
и **инструментарий на устройстве**. Затем **проход бенчмарков** поставил публичные
цели под эти маршруты (`tests/benchmark.md`): он добавил **дискриминацию Java2C** (ошибочный диагноз,
который отправляет агента на охоту за расшифрованным DEX, которого никогда не существует), **обработку split APK /
App Bundle**, **декодирование protobuf без схемы**, дифференциальный стенд **Dex-VMP**
и **шаблоны модулей ядра с их версионными ограничениями** — и он исправил два более ранних утверждения,
измерения которых с ними не согласились. Восстановление логики Unity/IL2CPP,
внутренности байткода React Native/Hermes и победа над серверным авторитетом **не**
покрываются, и навык написан так, чтобы сказать об этом и остановиться, а не применять ближайшую
документированную процедуру к цели, для которой он не был написан.
Четыре оговорки, которые раздел Coverage излагает полностью и которые также уместны здесь:
- **Анализ Flutter/Dart AOT имеет зависимость.** Рабочий процесс начинается с листинга пула
(вывод класса `pp.txt`). Чтобы его получить, нужен декомпилятор, декодирующий снапшот — aotopsy (статический
бинарник, без тулчейна) или blutter (собирается из исходников, ~80 с) — и этот репозиторий не содержит
его. Он назван как предварительное условие, а не оставлен неявным.
- **Не за каждым утверждением в этом репозитории стоит запуск.** `docs/tool-verification/` фиксирует,
что было фактически измерено, на какой цели и с какой независимой перекрёстной проверкой; всё, что не
покрыто там, документировано из опыта и должно читаться как *выведенное*, согласно собственной
лестнице утверждений этого навыка.
- **Проход расширения записан отдельно и в основном является *выведенным*.** Его доказательства живут в
`docs/tool-verification/EXTENSION-*.md`, по одному файлу на тему, с собственной заметкой о силе доказательств. Общая
картина там такова: *инструмент был измерен, маршрут — нет* — поэтому прочитайте те файлы, прежде чем
относиться к любому из более новых документов как к проверенному пути.
- **Проход бенчмарков записан построчно, с собственной силой доказательств для каждой строки.** `tests/benchmark.md`
называет каждую публичную цель, скрипты, которые задействует строка, что фактически произошло (включая
строки, которые провалились, и строки, которые никто не запускал), и насколько сильны доказательства. Строки, помеченные
`unverified`, — это утверждения о доказательствах в этом репозитории, а не о механизме.
## Обслуживание репозитория
Четыре инструмента находятся в корне и не являются частью установленного навыка:```
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)
У согласованности есть естественное противодействие — сломанный путь громко падает, и кто-то его чинит. У раздутости такого нет, поэтому и существует третий инструмент: каждый проход добавляет ссылку, строку индекса и заявление о покрытии, и без измерения ничего в репозитории этого не замечает.
tests/benchmark.md содержит матрицу регрессии: измерение -> публичная цель -> скрипты, которые
задействует строка -> измеренный результат -> метка силы. Это контрольный список для повторного запуска перед тем, как доверять
любому утверждению в docs/tool-verification/. Образцы скачиваются в tools/_work/ и никогда не
коммитятся, поэтому каждая строка называет свой публичный источник и записывает хеш, против которого она запускалась.
docs/tool-verification/ также не является частью установленного навыка. Это запись доказательств
для одного прохода измерения против реальной цели: что на самом деле делал каждый скрипт, какой независимый
метод это подтвердил, какие дефекты были найдены и какие сценарии цель не смогла задействовать.
Он существует для того, чтобы утверждения о Coverage в SKILL.md можно было проверить по запускам, а не доверять им,
и чтобы пробелы были записаны там, где их найдёт следующий человек.
При поддержке сообщества LINUX DO.
Только для обучения, исследований и авторизованного тестирования безопасности. Каждый скрипт, справочный материал и записанный результат в этом репозитории существует, чтобы объяснить, как работает анализ Android-приложений, чтобы практики могли рассуждать об инструментах, которые у них уже есть. Ничто здесь не является сервисом, продуктом или одобрением какого-либо конкретного использования.
.so, сохранённые данные приложения), а некоторые работают на рутованном устройстве. Храните свои копии, работайте на
дубликатах и прочитайте раздел о шлюзах в SKILL.md, прежде чем запускать что-либо против того, что вам дорого..gitignore их исключает) и находятся только в локальном, игнорируемом рабочем пространстве. Всё, что вы
получите, чтобы следовать за материалом, — ваше, и вы должны хранить это в безопасности и удалить, когда закончите, — следуйте вашим
локальным правилам и условиям, которые прилагались к образцу. Этот репозиторий публикует метод и доказательства,
со всей удалённой идентификацией цели.frida отклонён. Что измерение может
и не может увидеть, описано в skills/apk-reverse/references/advanced-unpacking.md.svc-сисколлы,
раннее обнаружение через init_array), что реально может сделать следующий слой выше и ниже и когда эскалация —
неправильный ответ..so.pm install-multiple или объединять элементы кода/нативных библиотек
в автономный APK, когда это законно..soJava_*-fvisibility=hidden.sopmps--show-exemptsvc--contextTracerPid