È possibile creare la propria mappa privato per ottenere nuovi nomi di quelli vecchi. Mapper deve scrivere tavolo di una sorta di disco/db con struttura seguente: Module (eseguibile), N, OriginalType, ObfuscatedType
Creare applicazione console "Mapper" che opera su due modi basati su un argomento: L'applicazione riceverà come argomento percorso eseguibile
- Assembly Load
- GetTypes da loadedAssembly
- PreObfuscation elimina tutte le voci e scrive nuovamente gli indici ei valori OriginalType. aggiornamenti PostObfuscation ObfuscatedType in base all'indice. Gli eventi post di compilazione devono essere le seguenti:
- Mapper.exe "target.exe" "Pre"
- [Oscurazione]
- Mapper.exe "target.exe" "Post"
Ora è necessario una funzione per getObfuscatedName da OriginalName e il gioco è fatto.
noti che questa soluzione non funzionerà con potatura come il numero di tipi cambierà e indici non corrispondono più tra
OriginalAssembly.GetTypes()
e
ObfuscatedAssembly.GetTypes()
membri Normalmente pubbliche non sono offuscati (o almeno c'è un'opzione per non offuscare i membri pubblici) – xanatos
@asbjornu - Esiste un metodo per riflettere ed evitare di usare il nome dei membri? – amirhosseinab
Una soluzione (o non) sarebbe creare una classe statica, che ha un dizionario System.Type e quindi quando è necessario utilizzare reflection, ottenere il tipo da questo dizionario. Quindi non importa quale nome il metodo/classe sia diventato dopo l'obsfucator, hai ancora un riferimento per questo. Naturalmente, se si dispone di tipi non numerabili nell'assieme, si finirà con un gigante, senza alcuna classe statica del modello di progettazione, che potrebbe causare problemi di esecuzione nell'applicazione e anche eccezioni non gestite. –