Skip to Content
Nuova versione 12 disponibile 🎉
ObfuscatorProxy dinamicoChiamate interne ed esterne

Chiamate interne ed esterne

Il proxy dinamico può essere applicato a due categorie di chiamate, selezionate con la modalità del proxy:

ModalitàApplica il proxy alle chiamate verso…
externalmetodi e costruttori definiti all’esterno dell’assembly da offuscare: la libreria di classi base di .NET e gli assembly referenziati
internalmetodi e costruttori definiti all’interno dell’assembly da offuscare
allchiamate sia interne sia esterne

Vedi Configurazione per selezionare una modalità dalla riga di comando, da MSBuild o da Babel Desktop.

Chiamate proxy interne

Usare il proxy dinamico per le chiamate ai metodi interni offre diversi vantaggi per l’offuscamento e la protezione del codice. Ecco i principali:

  1. Nascondere i dettagli di implementazione: generando proxy dinamici per i tipi interni, i dettagli di implementazione effettivi di quei tipi restano nascosti al codice esterno e ai potenziali attaccanti. I proxy dinamici fanno da intermediari e schermano la logica e la struttura interna dei tipi, rendendo più difficile per i malintenzionati capire e manipolare il tuo codice.
  2. Schermare le chiamate ai metodi: quando usi i proxy dinamici per i tipi interni, i decompilatori faticano a ricostruire il flusso delle chiamate di un metodo. I decompilatori analizzano il codice compilato per generare una rappresentazione di alto livello del codice sorgente originale. I proxy dinamici introducono però un ulteriore livello di indirezione, che rende difficile per i decompilatori tracciare con precisione la sequenza delle chiamate ai metodi.
  3. Offuscamento rafforzato: l’uso dei proxy dinamici per i tipi interni aggiunge alla tua base di codice un ulteriore strato di offuscamento. I proxy introducono complessità e indirezione, rendendo più difficile per chi fa reverse engineering capire la struttura e le relazioni del tuo codice. Questo può scoraggiare i tentativi di reverse engineering e proteggere la tua proprietà intellettuale.

Usando il proxy dinamico per le chiamate interne crei una barriera che impedisce ai decompilatori di ricostruire con precisione il flusso delle chiamate nel tuo codice. Aggiungi così un ulteriore strato di protezione e rendi più difficile per un attaccante o per chi fa reverse engineering capire la logica e il comportamento della tua applicazione.

Chiamate proxy esterne

Le chiamate proxy esterne di Babel Obfuscator sono un meccanismo di difesa efficace contro i decompilatori che cercano di ricostruire i nomi delle variabili locali a partire dai tipi dedotti. Per ricostruire i nomi originali delle variabili, i decompilatori si basano spesso sui metadati disponibili, come i tipi delle variabili.

Per esempio, nel codice decompilato qui sotto lo strumento ha dedotto i nomi delle variabili list1 e count rispettivamente dalla chiamata al costruttore di istanza del tipo List<string> e dal metodo get_Count().

var list1 = new List<string>(); int count = list1.Count;

Quando le chiamate proxy esterne sono abilitate, Babel Obfuscator sostituisce le chiamate dirette ai metodi del codice esterno con chiamate a classi proxy generate dinamicamente. Queste classi proxy fanno da intermediari: intercettano e reindirizzano le chiamate ai metodi. Di conseguenza le chiamate ai metodi originali e i nomi delle variabili locali associati vengono nascosti e offuscati.

Con il proxy dinamico abilitato, il codice precedente diventa il seguente:

var local1 = new a(); int local2 = local1.b();

I decompilatori che si basano solo sui metadati per ricostruire i nomi delle variabili incontrano difficoltà davanti alle chiamate proxy esterne. Poiché le chiamate ai metodi originali sono sostituite da chiamate proxy, i soli tipi dedotti delle variabili non forniscono alcuna informazione utile sui nomi originali. Il decompilatore perde così la capacità di ricostruire i nomi originali con la sola inferenza dei tipi.

Last updated on