Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
egodeath — Un offuscatore JavaScript basato su tecniche di offuscamento a indistinguibilità crittografica. | Kitploit
Strumenti/GitHubGitHub/nstarke/egodeath
Analisi StaticaAnalisi del CodiceReverse EngineeringPaper e RicercaApprendimento e Formazione
GitHubnstarke/egodeath

egodeath

Un offuscatore JavaScript basato su tecniche di offuscamento a indistinguibilità crittografica.

Vedi Repository
5351 mese faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

egodeath

Questo progetto non raggiunge l'offuscamento indistinguibile. Non dovresti usare questo prodotto per proteggere segreti. Serve a scoraggiare il reverse engineering, non a prevenirlo

Tests

images/screenshot.png Un offuscatore JavaScript progettato per rendere il codice estremamente difficile da leggere e analizzare sia per umani che per LLM. Scritto in TypeScript. Implementa tecniche dalla ricerca crittografica sull'offuscamento sottoposta a revisione paritaria.

Installazione

root@kitploit:~
npm install
npm run build

Utilizzo da riga di comando

root@kitploit:~
# Utilizzo base
node dist/index.js input.js > output.js

# Con budget di token target (default: 2.000.000)
node dist/index.js --target-tokens 500000 input.js > output.js

# Offuscamento minimale (output piccolo)
node dist/index.js --target-tokens 10000 input.js > output.js

# Massimo gonfiaggio (10M token)
node dist/index.js --target-tokens 10000000 input.js > output.js

# Utilizzo di variabile d'ambiente
INPUT_FILE=input.js node dist/index.js > output.js

# Aiuto
node dist/index.js --help

Opzioni

OpzionePredefinitoDescrizione
--target-tokens <n>2000000Dimensione target dell'output in token. Input piccoli vengono gonfiati fino a questo limite. Input grandi producono meno gonfiaggio per rimanere entro il budget.
--help, -hMostra il messaggio di aiuto

Script npm

root@kitploit:~
npm run build              # Compila TypeScript in dist/
npm run start              # Esegue l'offuscatore (legge input.js)
npm run test               # Esegue la suite di test
npm run obfuscate-package  # Esegue test di compatibilità su pacchetti npm

API programmatica

root@kitploit:~
const { obfuscate } = require('./dist/obfuscator');

const code = 'function add(a, b) { return a + b; }';
const obfuscated = obfuscate(code);

// Con opzioni
const obfuscated = obfuscate(code, { targetTokens: 500000 });

Pipeline di trasformazione

L'offuscatore applica 20 trasformazioni in 4 fasi. Ogni stadio si basa sul precedente.

Fase 1: Pre-trasformazioni di sicurezza e anti-analisi

Fase 2: Pre-trasformazioni strutturali

Fase 3: Passaggi sugli identificatori

Fase 4: Post-trasformazioni

Iniezione di Codice Morto

Il codice morto viene iniettato in più punti con due strategie di generazione:

StrategiaSorgente

Punti di iniezione del codice morto:

  • Casi CFF morti dei switch (~30% extra per funzione, scalato in base al budget)
  • Ramificazioni else dei predicati opachi
  • Blocchi morti indipendenti in funzioni non-CFF (controllati dal budget)

Riferimenti a Ricerche Accademiche

Diverse trasformazioni sono ispirate dalla ricerca crittografica sull'offuscamento sottoposta a revisione paritaria:

Strumenti di Verifica

Due strumenti di verifica misurano la qualità dell'offuscamento, situati in src/verification/:

Test di Circuito Nullo (verification/nullCircuitTest.ts)

Offusca una funzione reale e una funzione "nulla" (stessa forma, non fa nulla), quindi confronta 14 metriche strutturali per valutare quanto siano distinguibili. Maggiore somiglianza = migliore offuscamento.

root@kitploit:~
import { runNullCircuitTest } from './verification/nullCircuitTest';
const result = runNullCircuitTest(realCode, paramCount, stmtCount, threshold, targetTokens);
console.log('Similarità:', result.similarity); // 0.0-1.0

Test per Funzioni Non Offuscabili (verification/unobfuscatableTests.ts)

7 casi di test dalle dimostrazioni di impossibilità del Paper 1 che tentano di estrarre segreti da codice offuscato:

root@kitploit:~
import { runAllTests, printSummary } from './verification/unobfuscatableTests';
console.log(printSummary(runAllTests(10000)));

Test: funzione punto (password), numeri magici, stringhe canarino, chiavi incorporate, URL, pattern regex, firme del flusso di controllo.

Budget di Dimensione dell'Output

L'opzione --target-tokens controlla la dimensione dell'output tramite un budget di gonfiaggio che scala l'iniezione di codice morto (la principale leva di volume). Trasformazioni controllate dal budget:

Rapporto BudgetTrasformazioni Abilitate
> 3Anti-debug, inneschi, CFF, predicati opachi, fusione a virgola
> 5Funzioni proxy, codifica chiavi proprietà, iniezione rumore, auto-integrità
> 8Esaurimento finestra di contesto
> 10Codifica variabili globali

Il moltiplicatore del codice morto scala da 1x (rapporto 30) a 150x (rapporto 1500+), controllando il numero e la dimensione dei casi switch morti e dei rami dei predicati opachi.

Struttura del Progetto

root@kitploit:~
src/
  index.ts              Punto di ingresso CLI
  obfuscator.ts         Orchestratore della pipeline principale (20 trasformazioni)
  options.ts            Sistema di budget e opzioni
  types.ts              Definizioni dei tipi AST
  random.ts             Generazione di nomi Unicode casuali (6-16 caratteri, 16 intervalli di script)
  ast.ts                Funzioni factory per nodi AST
  keywords.ts           Scoperta dinamica delle parole chiave (globalThis + pacchetto window)
  globals.ts            Gestione dello stato globale (mappe a prototipo nullo)
  substitute.ts         Utility per la sostituzione degli identificatori
  declarations.d.ts     Dichiarazioni di tipo per moduli
  passes/
    firstPass.ts        Catalogazione degli identificatori
    secondPass.ts       Sostituzione degli identificatori + codifica delle stringhe
    thirdPass.ts        Iniezione di parametri fittizi
  transforms/
    antiDebug.ts        Trappole eval("debugger") + cicli setInterval
    tripwires.ts        Controlli per input segreti su programma punturato [Paper 4]
    noiseInjection.ts   Rumore aritmetico ispirato a LPN [Paper 7]
    controlFlowFlattening.ts  while/switch + invio aritmetico modulare [Paper 3]
    opaquePredicates.ts       15 predicati matematici sempre vero/falso
    proxyFunctions.ts         Dispatcher per appiattimento del grafo delle chiamate
    contextExhaustion.ts      Rumore ternario/void per riempimento contesto LLM
    commaExpressions.ts       Fusione di istruzioni tramite operatore virgola
    globalVariableEncoding.ts eval+replace per globali
    propertyKeyEncoding.ts    Accesso calcolato a proprietà con registri per ambito
    numberEncoding.ts         11 strategie di codifica bit a bit/aritmetica
    selfIntegrity.ts          Controlli runtime anti-manomissione [Paper 10]
    stringArrayExtraction.ts  XOR a catena + errori sparsi posizionali [Papers 2, 9]
    deadCodeInjection.ts      Codice morto basato su template + mutazione [Paper 3]
  verification/
    nullCircuitTest.ts        Valutazione qualità codice morto [Paper 10]
    unobfuscatableTests.ts    Casi di test per estrazione segreti [Paper 1]
  __tests__/                  300+ test unitari in 21 suite
tools/
  obfuscate-package.ts  Test di compatibilità pacchetti npm basati su webpack
tests/
  input*.js             File di input di test originali

Test

root@kitploit:~
# Esegue tutti i test
npm test

# Esegue una suite di test specifica
npx jest controlFlowFlattening
npx jest tripwires
npx jest noiseInjection

# Test contro pacchetti npm (clona repository, webpack-bundle, offusca, esegue test)
npm run obfuscate-package                    # Tutti i 10 pacchetti
npm run obfuscate-package -- minimist semver # Pacchetti specifici

Strumento di Test di Compatibilità

Lo strumento tools/obfuscate-package.ts testa l'offuscatore contro pacchetti npm reali:

  1. Clona il repository git del pacchetto
  2. Installa tutte le dipendenze (incluse devDependencies per il testing)
  3. Costruisce il pacchetto se ha uno script di build
  4. Usa webpack per creare un bundle del punto di ingresso principale della libreria in un singolo file CommonJS
  5. Esegue l'offuscatore sul file bundle
  6. Sostituisce il punto di ingresso principale della libreria con il bundle offuscato
  7. Esegue la suite di test della libreria contro la versione offuscata

Posizioni di output

PercorsoContenuto
dist/obfuscated/<pacchetto>/bundle.jsIl bundle webpack offuscato per ogni pacchetto
dist/obfuscated/report.jsonReport JSON completo con dimensioni dei bundle, stato di offuscamento, output dei test

Licenza

MIT - Copyright 2026 Nicholas Starke

Scarica lo strumento
OrdineTrasformazioneFileDescrizione
1Trappole Anti-Debugtransforms/antiDebug.tsInietta istruzioni eval("debugger") e 10-20 cicli setInterval con intervalli di numeri primi (5s-600s) che attivano ripetutamente breakpoint del debugger. Ogni istanza utilizza stringhe codificate uniche.
2Inneschi per Programmi Punturatitransforms/tripwires.tsIncorpora controlli nascosti che confrontano hash di parametri con valori segreti. 5 modelli di hash (impronta bit a bit, aritmetica modulare, charCodeAt, hash numerico, typeof+length). Attiva corruzione silenziosa dello stato, cicli infiniti o lancia eccezioni su input segreti. [Paper 4]
3Iniezione di Rumore LPNtransforms/noiseInjection.tsAggiunge e annulla rumore casuale attraverso percorsi divisi in calcoli aritmetici. 6 modelli: add/sub, XOR, mul/div, variabile doppia divisa, catena di hash calcolata, rotazione di bit. I valori intermedi sono privi di significato senza tracciare l'intera cancellazione. [Paper 7]
OrdineTrasformazioneFileDescrizione
4Appiattimento del Flusso di Controllotransforms/controlFlowFlattening.tsConverte i corpi delle funzioni in macchine a stati while(true) { switch((_s * P) % M) { ... } } con invio aritmetico modulare — i valori dei case sono codificati tramite (idStato * moltiplicatore) % modulo usando parametri primi casuali. [Paper 3]
5Predicati Opachitransforms/opaquePredicates.tsInietta condizioni if che valutano sempre vero o falso ma sono matematicamente difficili da dimostrare (ad es., (x*x+x)%2===0). 15 formule di predicato tra aritmetica modulare, bit a bit e categorie di tipo.
6Funzioni Proxytransforms/proxyFunctions.tsInstrada tutte le chiamate di funzione attraverso due dispatcher: _fc(fn, ...args) per chiamate semplici, _mc(obj, prop, ...args) per chiamate di metodo. Utilizza Function.prototype.apply catturato in una variabile locale per robustezza.
7Esaurimento della Finestra di Contestotransforms/contextExhaustion.tsAvvolge le espressioni in ternari profondamente annidati con condizioni opache, catene di espressioni void e padding condizionale void. Costringe i LLM a sprecare token della finestra di contesto in rumore.
8Fusione di Espressioni a Virgolatransforms/commaExpressions.tsComprime istruzioni di espressioni consecutive in singole espressioni a virgola: a(); b(); return c() diventa return a(), b(), c().
OrdinePassaggioFileDescrizione
9Passaggio 1: Catalogazionepasses/firstPass.tsAttraversa l'AST e cataloga ogni identificatore, costruendo una mappa dei globali che assegna a ciascuno un nome Unicode casuale di 6-16 caratteri scelto da 16 intervalli di script (CJK, Hangul, Greco, Cirillico, Devanagari, Thai, Arabo, Katakana, ecc.).
10Passaggio 2: Sostituzionepasses/secondPass.tsSostituisce tutti i nomi di identificatore con i loro equivalenti Unicode offuscati. Codifica gli argomenti di require() come String.fromCharCode(...). Codifica le sorgenti statiche di import/export come stringhe letterali con escape Unicode. Sostituisce i riferimenti a superClass delle classi, le espressioni di template literal, i pattern di destrutturazione.
11Passaggio 3: Parametri Fittizipasses/thirdPass.tsInietta 0-15 parametri casuali non utilizzati in ogni dichiarazione ed espressione di funzione. Salta le funzioni con parametri rest. Rimuove tutti i commenti.
OrdineTrasformazioneFileDescrizione
12Codifica delle Variabili Globalitransforms/globalVariableEncoding.tsSostituisce i riferimenti a globali (scoperti dinamicamente da globalThis + pacchetto window) con eval("Nome<suffisso>".replace(new RegExp("<suffisso>$"), "")). Entrambe le stringhe fluiscono attraverso l'array di stringhe.
13Codifica delle Chiavi di Proprietàtransforms/propertyKeyEncoding.tsConverte l'accesso con punto in accesso calcolato con registri per ambito. L'accesso tra ambiti funziona perché tutti i suffissi risolvono allo stesso nome di proprietà in fase di esecuzione tramite .replace().
14Codifica dei Numeritransforms/numberEncoding.ts11 strategie di codifica: shift+add, identità XOR, complemento, divisione, shift annidati, doppio-NOT, modulare, ecc. Ogni istanza è generata in modo univoco. Salta le chiavi di proprietà e i valori dei case di switch.
15Verifica dell'Integrità Personaletransforms/selfIntegrity.tsInietta 2-4 controlli runtime: verifica del codice nativo di eval, integrità di Function.prototype.toString, rilevamento di anomalie temporali, validazione della struttura del codice. Risposte anti-manomissione: busy wait, eccezione, corruzione silenziosa. [Paper 10]
16Estrazione dell'Array di Stringhetransforms/stringArrayExtraction.tsRaccoglie tutte le stringhe in un singolo array con decifratura XOR a catena (la chiave per la voce N dipende dal contenuto decodificato della voce N-1) e pattern di errore sparsi dipendenti dalla posizione (ogni carattere ottiene una chiave XOR diversa, con errori sparsi ispirati a LPN in posizioni selezionate). [Papers 2, 9]
17Stub della Consoleobfuscator.tsScopre dinamicamente tutti i metodi di console e imposta ciascuno su una funzione no-op.
18Minificazione Terserobfuscator.tsRimuove spazi bianchi e formattazione tramite terser (mangle: false, compress: false). Ricorre a rimozione basata su regex se terser non riesce a analizzare l'output.
Descrizione
Basata su templatetransforms/deadCodeInjection.ts9 tipi di template: accumulo con loop, costruzione di array, manipolazione di oggetti, concatenazione di stringhe, condizionali annidati, try/catch, countdown con while, switch calcolato, catene bit a bit. I template fanno riferimento a variabili reali dell'ambito.
Basata su mutazionetransforms/deadCodeInjection.tsClona istruzioni REALI e le muta: scambia operatori all'interno di gruppi di equivalenza, altera costanti, rinomina identificatori. Produce codice morto strutturalmente identico all'AST del codice reale, indistinguibile da esso solo per struttura. [Paper 3]
PaperAutoriTecnica Implementata
[Paper 1] On the (Im)possibility of Obfuscating ProgramsBarak, Goldreich, Impagliazzo, Rudich, Sahai, Vadhan, YangCasi di test per funzioni non offuscabili — strumento di verifica che testa se i segreti sopravvivono all'offuscamento
[Paper 2] Candidate iO and Functional Encryption for all CircuitsGarg, Gentry, Halevi, Raykova, Sahai, WatersDecifratura a catena di stringhe — randomizzazione stile Kilian in cui la chiave di ogni voce dipende dalla stringa decodificata precedente
[Paper 3] iO from the Multilinear Subgroup Elimination AssumptionGentry, Lewko, Sahai, WatersCodice morto basato su mutazione (strutturalmente identico al codice reale); transizioni di stato aritmetiche modulari in CFF
[Paper 4] How to Use iO: Deniable Encryption, and MoreSahai, WatersInneschi per programmi punturati — controlli nascosti che si attivano su input segreti
[Paper 7] iO from Well-Founded AssumptionsJain, Lin, SahaiIniezione di rumore ispirata a LPN in calcoli numerici
[Paper 9] iO from Bilinear Maps and LPN VariantsRagavan, Vafa, VaikuntanathanCodifica XOR sparsa con pattern di errore dipendenti dalla posizione
[Paper 10] iO of Null Quantum Circuits and ApplicationsBartusek, MalavoltaTest di circuito nullo per verifica qualità del codice morto; verifica dell'integrità personale (doppia modalità)