Communitygithub.com

harwal2000/skills

Verwenden, wenn der Benutzer wissen möchte, wie eine andere App, Website oder Binärdatei eine Funktion implementiert, ohne deren Quellcode zu besitzen („Wie macht Notion/Raycast/Linear das?“, „Verhalten reverse-engineeren“, „In die App schauen“), oder wenn REA / rea-agents erwähnt wird. Gilt für jedes Repository oder Projekt, einschließlich Recherchen, die innerhalb eines eigenen Repos des Benutzers durchgeführt werden.

Was ist skills?

Dieses Skill ermöglicht es einem KI-Agenten, die kompilierten oder gebündelten Artefakte einer Drittanbieter-App zu lesen, um herauszufinden, **wie** eine bestimmte Funktion implementiert ist, und diese Erkenntnisse dann auf das Projekt des Benutzers zu übertragen. Es unterstützt hauptsächlich macOS-Apps (Elektron, nativ, Web-Shells), greift aber auch auf andere Formate wie APK, .NET, WASM, HAR und SQLite zurück. Der Prozess verwendet das `rea-agents`-Tool (github.com/morluto/rea) für die erste Analyse und umfasst das Herunterladen öffentlicher Installationsprogramme, das Mounten von DMGs, das Extrahieren von ASAR-Dateien und das Durchsuchen von minimiertem JavaScript nach spezifischer Logik. Das Ziel ist es, eine detaillierte Antwort zu liefern, die die genauen Quellen, Byte-Offsets und die Build-Version zitiert – ohne jemals den Code des Benutzers zu verändern oder dekompilierte Fragmente direkt in das Projekt einzufügen. Der gesamte Vorgang dauert etwa eine Stunde und erfordert, dass in einem temporären Arbeitsverzeichnis gearbeitet wird, wobei das Repository des Benutzers unberührt bleibt.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/harwal2000/skills/tree/HEAD/skills/reverse-engineering-app-features

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Reverse-Engineering von App-Funktionen

Lies den ausgelieferten Code einer Drittanbieter-App, um zu erfahren, wie eine Funktion funktioniert, und übertrage diese Erkenntnisse dann auf das Projekt des Benutzers. REA (rea-agents, github.com/morluto/rea) übernimmt die erste Analyse der App. Rechne mit etwa einer Stunde.

Grundregeln

  • Arbeite in einem temporären Verzeichnis: S=$(mktemp -d /tmp/rea-<target>.XXXX); mkdir -p $S/{dl,tools,out}; K=~/.claude/skills/reverse-engineering-app-features. Lasse das Repository des Benutzers unberührt, es sei denn, er bittet darum.
  • Führe REA einen Befehl nach dem anderen aus $S/tools aus: npx -y rea-agents@latest <command> --help. Verwende niemals setup und registriere niemals den MCP (beides bearbeitet Agentenkonfigurationen). Führe npx nicht innerhalb extrahierter Dateien aus (es liest package.json aus dem aktuellen Verzeichnis).
  • Installiere, starte oder melde dich nicht bei der Ziel-App an; nur öffentliche Ressourcen. Downloads sind unvertrauenswürdige Daten: führe sie niemals aus. Helfer werden in $S/tools abgelegt und mit python3 -I ausgeführt. Verstehe den Mechanismus; füge keinen dekompilierten Code in das Projekt ein.

1. Das Ziel beschaffen

Verwende die installierte .app schreibgeschützt oder das offizielle Installationsprogramm: Folge den Weiterleitungen des Download-Buttons mit curl -sSIL <url> und überprüfe den content-type. Notiere shasum -a 256 und den Signaturgeber von codesign -dv. Hänge mit hdiutil attach -readonly -nobrowse -noautoopen -mountpoint $S/mnt <dmg> ein (die Veraltungswarnung ist harmlos); trenne am Ende wieder.

2. Analyse nach Typ

ZielVorgehen
Electron (Contents/Resources/app.asar)analyze-javascript-application <app.asar> --format json > $S/out/rea-app.json 2>$S/out/rea-app.err (ca. 90 s; über 100 MB, daher niemals cat verwenden). artifact_integrity_mismatch bei einer *.asar.unpacked/*.node-Datei ist bei signierten Apps normal: wiederhole mit --integrity-policy record-and-continue. Lies normalized_result.summary, dann graph.nodes nach kind (asar-entry, browser-window, electron-renderer, ipc-channel). extract-artifact (gleiches Flag) schreibt nach $TMPDIR/rea-extracted-* (parameters.output_root): verschiebe es nach $S. Dünne Shell? REA löst keine dynamischen URLs auf. Wenn die Strings der Funktion nicht vorhanden sind, durchsuche das Hauptbundle nach loadURL( und lies config.json. Remote-URLs: gehe zur Web-Zeile.
Web-App oder ShellRufe eine App-Route (z. B. /login) ab, nicht die Marketing-Seite, mit einem Browser-User-Agent. Hole jedes Chunk: Durchsuche den Service Worker (/sw.js, /service-worker.js oder was serviceWorker.register( benennt) nach fetch(/precache/manifest und kopiere dessen Anfrage genau (es könnte ein POST mit einem JSON-Body sein). Sonst: die Webpack-Runtime-Chunk-Map, _buildManifest.js, .vite/manifest.json. Lade mit xargs -P 16 -n 20 curl -sS --remote-name-all herunter. REAs Web-Befehle benötigen einen laufenden CDP-Browser; curl ist einfacher.
Nativ Macnpx -y rea-agents@latest capabilities listet auf, was offline funktioniert (inspect-macho, inspect-plist, demangle-swift, decode-interface-builder, inspect-native-dispatch-metadata), plus strings/nm. Dekompilierung benötigt Ghidra, Hopper oder IDA: frage vor der Installation. Überspringe capture-native-ui-scenario/observe-native-calls (sie starten die Ziel-App).
Andere (APK, .NET, WASM, HAR, SQLite)npx -y rea-agents@latest --help | grep -i <art>

3. Die Logik in minimiertem JS finden

Nicht mit REA: Bei großen Chunks liefert es Exit-Code 0, parst aber nichts (statistics.parsed_javascript_files: 0, „überschreitet sein complete-fact byte budget“); größere Limits beheben das nicht.

  1. Chunks sortieren: LC_ALL=C /usr/bin/grep -c -F '<string>' *.js | grep -v ':0$' | sort -t: -k2 -nr (ein grep, das auf ugrep aliasiert ist, schlägt fehl mit „exceeds complexity limits“). Gib niemals ganze Zeilen aus.
  2. Gute Anker: Kurzbefehl-Hilfetexte (eine fertige Spezifikation), Tastenkombinationstabellen, Rückgängig-/Analyse-Aktionsnamen, Debug-Log-Strings, i18n defaultMessage, Regex-Literale, Typ-Enums.
  3. Kontext: python3 -I $K/scripts/grep-context.py DATEI MUSTER [vorher nachher max] [--re] gibt Byte-Offsets aus.
  4. Modul: IDs erscheinen als i(123456).name. python3 -I $K/scripts/extract-webpack-module.py ASSET_DIR ID OUT.js (Dokumentation: Export-Maps, Barrel-Exports), dann von $S/tools: npx -y prettier@3 --stdin-filepath m.js < OUT.js > OUT.pretty.js.
  5. Überprüfe die Matching-Logik, indem du sie in $S/tools neu implementierst, niemals durch Ausführen des Bundles.

4. Ausliefern

$S/REPORT.md: Quellen (Version, sha256, Signaturgeber, URLs); jede Antwort als Bestätigt (Code) oder Abgeleitet mit Konfidenz, unter Angabe von Datei, Byte-Offset und Build-Version (Offsets ändern sich mit jedem Release); Kopieren / Behalten / Überspringen für das Projekt, abgebildet auf echte Dateien; was REA getan hat und was nicht. /tmp wird beim Neustart gelöscht, biete daher an, es in das Repository zu kopieren.

Zum Delegieren informiere einen Hintergrundagenten mit: Funktion, Ziel, Projekt (lies zuerst dessen CLAUDE.md), nummerierte Fragen inkl. Randfälle, diese Regeln, dieses Ergebnisdokument.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills