
Una finestra dello strumento UI di Frida all'interno di PyCharm / JetBrains IDEs.
中文 | [English](https://github.com/yilongmd/zafrida-ui/blob/main/README.en-US.md)

ZAFrida UI - Plugin Frida per PyCharm
===============
Versione attuale: 0.3.8
[](LICENSE)
[](https://github.com/yilongmd/zafrida-ui)
[](https://plugins.jetbrains.com/)
[](https://github.com/yilongmd/zafrida-ui)
## Principali aggiornamenti 0.3.8
- Il pannello Session separa "Dispositivo" e "Modalità di connessione" in due righe di selezione indipendenti: la riga Device elenca solo i dispositivi reali, la riga Mode seleziona USB / Remote / Gadget e l'endpoint. Il port forwarding adb per il loopback Remote/Gadget, Force Stop e Open App agiscono sempre sul telefono attualmente selezionato, senza più utilizzare erroneamente dispositivi storici.
- Alla prima apertura e all'aggiornamento dei dispositivi viene avviato automaticamente il server adb se non in esecuzione, senza dover più eseguire manualmente `adb devices`.
- Quando un dispositivo salvato non è online viene mostrato il segnaposto "Non connesso" e le operazioni correlate vengono bloccate; se è connesso un solo dispositivo USB viene automaticamente utilizzato quello con un avviso nella Console.
- Sotto la riga Mode viene mostrato il routing adb/frida effettivamente eseguito; in modalità Gadget il nome del pacchetto Target è di sola lettura ma selezionabile e copiabile.
- L'API HTTP `/state` include il nuovo risultato di parsing `connection`; `device-select --host` è ancora utilizzabile ma deprecato, per gli endpoint usare `mode-set --host/--port`.
## Principali aggiornamenti 0.3.7
- Ogni ZAFrida Project può selezionare o condividere in modo indipendente l'ambiente Python/Frida, utilizzando per impostazione predefinita l'interprete del progetto PyCharm corrente, con supporto per ambienti locali venv, Conda, uv, Poetry, Pipenv, Hatch e altri.
- Ridisegnata la UI di Session e le Project Settings, con visualizzazione completa delle informazioni su versione del plugin, Python e Frida, e ottimizzazione del pannello log adattivo e trascinabile e dello stato della sessione.
- Supporto completo per `.js` / `.ts`, Frida 16/17, cambio di ambiente multi-progetto e i tre flussi di connessione USB, Remote e Gadget.
- Rafforzate le capacità dell'API HTTP locale, della CLI e dello Skill in cinese per il ripristino dei dispositivi, l'attesa della sessione e i log incrementali; rimosso il livello di adattamento MCP duplicato e instabile.
Introduzione al progetto
-----------------------------------
<h3 align="center">Strumento grafico Frida progettato per PyCharm/IntelliJ</h3>
ZAFrida UI è un plugin di operazioni grafiche per Frida integrato in PyCharm e nella serie di IDE JetBrains. È pensato per risolvere i problemi delle operazioni da riga di comando di Frida, spesso macchinose, e della gestione disordinata degli script, offrendo un set completo di **interfaccia UI interattiva** per gestire dispositivi, processi, script e log.
Il punto di forza principale è il suo **sistema di gestione template "a caselle di controllo"**: l'utente può, selezionando/deselezionando, inserire dinamicamente frammenti di codice nello script principale o commentarli, realizzando così un assemblaggio "a blocchi" degli script di Hook. Allo stesso tempo, il plugin integra una completa **gestione a progetti** (`zafrida-project.xml`), che supporta il rapido cambio di configurazioni multi-dispositivo e multi-ambiente.
ZAFrida non sostituisce Frida, ma funge da potente interfaccia UI per `frida-tools`, integrandosi senza soluzione di continuità con il vostro ambiente Python e Frida esistente.
**Wiki semplificata**: [ZAFrida UI Wiki semplificata (BBS)](https://github.com/yilongmd/zafrida-ui/blob/main/zafrida_ui_wiki_bbs_zh.md) (questa è una Wiki più semplice)
**Tutorial d'uso dettagliato**: [ZAFrida UI Wiki tutorial d'uso dettagliato](https://github.com/yilongmd/zafrida-ui/blob/main/ZAFridaUI_Wiki_zh.md)
## Dimostrazione

Guida rapida
-----------------------------------
1. **Installare il plugin**: cercare "ZAFrida" nel marketplace dei plugin dell'IDE oppure installare da disco.
2. **Configurare l'ambiente predefinito**: per impostazione predefinita viene utilizzato il Python Interpreter del progetto PyCharm corrente; in `Settings` globale -> `Tools` -> `ZAFrida` restano solo i valori predefiniti di nome/percorso degli strumenti.
3. **Creare un progetto**: clic destro nella vista del progetto -> `New Frida Project`.
* Se il progetto richiede una versione diversa di Frida, aprire `Project Settings` di ZAFrida, selezionare l'interprete Python o la directory dell'ambiente e cliccare `Test`.
4. **Scrivere/selezionare lo script**: nel pannello Run selezionare il proprio `agent.js` o `agent.ts`.
5. **Debug dell'Hook**:
* Connettere il dispositivo (USB o Remote o Gadget).
* Selezionare il processo o il nome del pacchetto di destinazione.
* Cliccare **Run**.
6. **Usare i template**: passare alla scheda `Templates` e selezionare le funzionalità Hook desiderate (ad esempio "SSL Pinning Bypass"); il codice verrà automaticamente iniettato nel vostro script.
7. **Automazione Skills (opzionale)**: disattivata per impostazione predefinita. Andare in `Settings/Preferences -> ZAFrida -> Skills HTTP API`, selezionare `Enable Skills` per avviare automaticamente l'API locale (oppure `Start/Stop` manuale), posizioni di CLI e template:
* Skill e CLI principale: `skills-template/zafrida-http-control/`
* Launcher compatibile con il vecchio percorso: `skills-cli/zafrida_skill_cli.py`
Codice QR del gruppo di scambio
-----------------------------------
<img src="https://assets.kitploit.com/production/public/readmes/11475/af2e178a9eee68ad3cbdf0c5b002b39f4c18f0128b73575324967291f19eeddc.jpg" alt="Codice QR del gruppo di scambio ZAFrida e reverse engineering" width="260" />
Funzionalità
-----------------------------------
* **Gestione dispositivi e processi**
Integra `frida-ls-devices` e `frida-ps`, supporta l'aggiornamento della lista dispositivi con un clic, la visualizzazione dei processi in esecuzione, delle App in esecuzione o delle applicazioni installate.
* **Connessione multi-modalità**
Supporto completo delle modalità **USB / Remote / Gadget**, con Host e Port remoti personalizzabili, senza dover comporre manualmente complessi parametri da riga di comando.
* **Esecuzione interattiva di script (Run / Attach)**
* Supporto delle due azioni di esecuzione **Run (Spawn predefinito)** e **Attach**, e non di un semplice "cambio di modalità".
* Supporto di **Force Stop** per terminare forzatamente l'applicazione di destinazione.
* Output di log della console integrato, con salvataggio automatico dei log nella directory del progetto `zafrida-logs/`.
* **Menu contestuale dell'editor JS / TypeScript (importante)**
* Nell'area di modifica dei file Frida `.js` o `.ts`, con il clic destro è possibile selezionare direttamente:
* **Run Frida Script**: esegue il file corrente come script principale (Spawn predefinito).
* **Attach Frida Script**: inietta il file corrente come script di attach nel processo di destinazione già in esecuzione.
* Prima dell'esecuzione il file corrente viene salvato automaticamente e si passa automaticamente allo ZAFrida Project a cui appartiene lo script.
* Adatto per PoC rapide, verifica di Demo, modalità Gadget o iniezione immediata in processi già in esecuzione.
* **Scorciatoie**:
* Windows / Linux: `Ctrl + Alt + S`
* macOS: `⌘ + ⌥ + S`
* **Inserimento Snippets dal menu contestuale dell'editor**
* Nel menu contestuale dell'editor JS / TypeScript è disponibile **ZAFrida Frida Snippets**.
* Inserimento con un clic di frammenti di codice Frida comuni, ad esempio:
* Struttura di wrapping `Java.perform`
* Template di Hook di metodi Java
* Native Hook con `Interceptor.attach`
* Il processo di inserimento segue WriteCommandAction dell'IDE, con undo/redo sicuri.
* **Sistema di template dinamici (innovazione principale)**
* Template Hook comuni integrati per Android / iOS (come SSL Pinning Bypass, Method Hook, Native Hook).
* **Controllo tramite caselle di selezione**: selezionando si inserisce il codice, deselezionando il codice viene automaticamente commentato, senza necessità di modifiche manuali.
* Supporto di template personalizzati, con anteprima del codice del template in tempo reale nell'IDE.
* **Design separato Run Script + Attach Script**
* Supporto della coesistenza di uno **Run Script** principale e di un **Attach Script** indipendente.
* Adatto per disaccoppiare gli "Hook di fase di avvio" dalla "logica di iniezione a runtime", facilitando debug complessi e manutenzione a lungo termine.
* **Configurazione a progetti (ZAFrida Project)**
* Introduce il concetto di ZAFrida Project, salvando dispositivo, target, script, Attach Script, parametri di connessione e altro come contesto di lavoro completo.
* Supporto nella Project View di:
* `New Frida Project` per creare un nuovo progetto
* `Select Frida Project` per cambiare rapidamente il progetto attivo corrente
* `Load Frida Project` per importare una directory di progetto esistente
* Dopo il cambio di progetto, lo stato della UI e la configurazione vengono ripristinati automaticamente.
* **Risoluzione intelligente dell'ambiente Python / Frida**
* Per impostazione predefinita risolve il Python SDK del progetto PyCharm corrente; ogni ZAFrida Project può sovrascrivere singolarmente l'interprete o la directory dell'ambiente.
* Supporto di ambienti locali system/pyenv, venv/virtualenv, Conda, uv, Poetry, Pipenv, Hatch.
* Più ZAFrida Project possono scegliere lo stesso percorso per condividere l'ambiente, senza copiare il venv; adatto per mantenere separatamente ambienti Frida 16/17.
* Se nell'ambiente IDE corrente o nell'ambiente di progetto esplicito manca `frida-tools` viene segnalato direttamente un errore, senza utilizzare silenziosamente un'altra versione presente nel PATH di sistema; `Test` può mostrare la versione effettiva di Frida.
* Gli Interpreter Python remoti come SSH, Docker, Docker Compose, WSL non possono ancora essere utilizzati per il sottoprocesso Frida locale.
* **Frida 17 / TypeScript**
* La selezione dei file, il clic destro Run/Attach e gli Snippets supportano `.js` / `.ts`; la REPL di Frida 17 compila automaticamente `-l agent.ts`.
* I template integrati sono stati migrati alle moderne API Module/NativePointer di Frida 17, mantenendo al contempo la compatibilità con gli ambienti Frida 16 più comuni.
* La REPL di frida-tools include per compatibilità i bridge standard Java/ObjC; quando si usano `import` di moduli npm/di terze parti è necessario gestire le dipendenze tramite `frida-create -t agent` o un progetto equivalente.
* **Interfaccia di automazione locale Skills**
* L'API HTTP locale Skills (disattivata per impostazione predefinita) supporta la scoperta delle capacità, l'ambiente di progetto/Python, dispositivi e processi, Run/Attach, l'elenco dei log storici e la lettura incrementale dei log basata su cursore a byte.
* Lo Skill integra flussi di ripristino con `wait-device` / `wait-session` limitati, e distingue le letture ritentabili in sicurezza dalle operazioni con effetti collaterali non riproducibili automaticamente.
* Modalità di attivazione: `Settings/Preferences -> ZAFrida -> Skills HTTP API`, selezionare `Enable Skills`.
* CLI e template di accompagnamento:
* `skills-template/zafrida-http-control/` (Skill principale e CLI)
* `skills-cli/zafrida_skill_cli.py` (launcher compatibile con il vecchio percorso)
Scenari applicativi
-----------------------------------
ZAFrida UI è adatto a tutti gli scenari di reverse engineering che utilizzano Frida, in particolare:
* Penetration test e analisi di reverse engineering di App Android / iOS.
* Processi di debug che richiedono il frequente cambio di script Hook diversi.
* Ingegneri abituati a usare l'IDE (PyCharm/IDEA) per lo sviluppo misto di Python, JavaScript e TypeScript.
Documentazione tecnica
-----------------------------------
- **Requisiti di ambiente**:
- IntelliJ IDEA o PyCharm (consigliato 2024.3+)
- Python3 e `frida-tools` installati localmente (`pip install frida-tools`)
- Assicurarsi che `frida`, `frida-ps`, `frida-ls-devices` siano nel PATH di sistema o specificarne il percorso nelle impostazioni del plugin.
- **Segnalazione problemi**: [Github Issues](https://github.com/yilongmd/zafrida-ui/issues)
Avvio del progetto
-----------------------------------
1. Clonare il codice sorgente: `git clone https://github.com/yilongmd/zafrida-ui.git`
2. Aprire il progetto con IntelliJ IDEA.
3. Eseguire il task Gradle `runIde` per avviare l'ambiente di debug.
Effetti di sistema
-----------------------------------
##### Interfaccia principale e pannello di esecuzione (Run Panel)
> Offre selezione del dispositivo, selezione dello script, configurazione della modalità di esecuzione e output della console.

##### Gestione dinamica dei template (Template Panel)
> A sinistra si sceglie la categoria, al centro si selezionano i template, a destra si visualizza in tempo reale l'anteprima del codice. Le caselle di controllo controllano direttamente l'attivazione o meno del contenuto dello script.

##### Interfaccia delle impostazioni (Settings)
> Supporta la personalizzazione del percorso degli strumenti Frida, dell'indirizzo di connessione remota e della configurazione dei log.

##### Procedura guidata di creazione progetto
> Crea rapidamente una struttura di progetto Frida standardizzata.

Architettura tecnica
-----------------------------------
#### Ambiente di sviluppo
- Linguaggio: Java 21, Java, script di build con Gradle Kotlin DSL
- Framework: IntelliJ Platform SDK
- Strumento di build: Gradle
- Dipendenze: `frida` `frida-tools` (Python environment)
Ringraziamenti
-----------------------------------
Un ringraziamento speciale ai seguenti esperti per il supporto ai template di script Frida JS forniti a questo progetto:
* **小佳**
* **Lane**
* **迷人**
Per ulteriori contributori e informazioni di ringraziamento vedere: [CONTRIBUTORS.md](https://github.com/yilongmd/zafrida-ui/blob/main/CONTRIBUTORS.md)