2016-04-05 45 views
8

Come sapete, i progetti di Xamarin sono compilati in assemblaggi di dll di net dot e verrà inserito in un file apk e può essere facilmente riflesso da riflettori come DotPeek.Obfuscation in Xamarin Projects

La mia prima domanda è: Come possiamo proteggere il nostro codice?

mia seconda domanda è: Do strumenti Obfuscator come SmartAssembly sono utilizzabili in progetti Xamarin o progetti Xamarin non li sosterrà?

+0

La maggior parte degli obfuscator (tutti?) Funzionerà da quando si sta parlando di assembly basati su CIL (con gli stessi pro/contro di qualsiasi ambiente .Net/Mono). Per Xamarin.Android puoi anche abilitare "Abilita assembly in codice nativo" se sei un utente VS Enterprise. Ciò incorporerà gli assembly nella libreria di runtime basata su NDK. I tecnici inversi dovranno trascorrere più tempo a trovare i punti di puntamento/finale da estrarre, ma, come qualsiasi obiezione di tipo CIL, chiunque voglia passare il tempo a RE può farlo, indipendentemente dall'offuscamento che si utilizza. – SushiHangover

+0

Perché utilizzare il tag iOS? Xamarin.iOS utilizza AOT per compilare già in modo nativo. –

+0

@LexLi grazie per averlo menzionato. Ho appena rimosso il tag. –

risposta

4

Il modo migliore per proteggere il codice .NET (.dll) per APK è quello di consentire Ahead Of Time (AOT) la compilazione:

enter image description here

La compilazione AOT compilerà il codice IL (.dlls) delle applicazioni in istruzioni native. Il codice finale che è impacchettato nell'APK è quindi X86, istruzioni di braccio ecc piuttosto che codice IL gestito.

La compilazione AOT è disponibile solo in licenze Enterprise e superiori.

Mentre AOT aumenta la difficoltà del reverse engineering, non è ancora al 100% a prova di errore. I file binari finali possono ancora essere estratti da un dispositivo rooted e invertiti mediante software come IDA pro. È molto più difficile dell'utilizzo di DotPeek ma è ancora possibile.

È anche importante notare i lati negativi dell'abilitazione della compilazione AOT. I tempi di creazione delle applicazioni aumentano in modo significativo in quanto ogni assembly a cui fa riferimento l'app deve essere compilato; le mie esperienze indicavano che dovresti aspettarti un aumento del 200% -300% dei tempi di costruzione quando è abilitato AOT.

Inoltre, la compilazione AOT aumenterà la dimensione dell'APK finale.

+0

Come tutti sappiamo, la compilazione AOT era disponibile solo per la licenza Enterprise. Ora Xamarin è gratuito, quindi è disponibile in Visual Studio Community? –

+0

Grazie per aver evidenziato che, AOT è effettivamente disponibile solo per le licenze Enterprise. Aggiornamento della risposta. – matthewrdev

+0

Secondo questo: https://developer.xamarin.com/guides/android/deployment%2C_testing%2C_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/#aot il codice nativo risultante è incluso nel APK insieme con i gruppi non compilati. Questo significa che sono incluse sia le versioni compilate che quelle non compilate, e AOT non aiuta veramente a offuscare? – HelloWorld

3

Per la prima domanda, è possibile utilizzare alcuni strumenti per offuscare il codice Xamarin. Ad esempio, Crypto Obfuscator, Babel Obfuscator e Dotfuscator

Per la seconda domanda, sembra possibile l'offuscamento di SmartAssembly. Controlla la parte Windows Phone here.

1

Non è possibile proteggere completamente il codice al 100% da eventuali decompilazioni e ricerche.

Si potrebbe passare un sacco di tempo a modificare tutti i metodi e le variabili e quindi passare un sacco di tempo a creare una sorta di interprete di applicazioni che comprenderà il codice offuscato, ma anche quello verrà esaminato, esaminato e infine danneggiato .

Vedi anche: How can I protect my .NET assemblies from decompilation?

Protect .NET code from reverse engineering?

2

Dotfuscator ha il supporto per Xamarin e le istruzioni sono online (per Dotfuscator Professional o il Community Edition gratuito) per come integrarlo.In sostanza, il processo è:

  1. Configurare l'accumulo di eseguire Dotfuscator tramite un AfterBuild bersaglio
  2. Configura Dotfuscator:
    1. Specificare gli ingressi
    2. Escludi cose da rinominare, come al solito/se necessario
    3. utilizzare solo trasforma compatibili con Mono (Pro-only)
  3. Configura un compito di copia o di un evento post-generazione per copiare i file binari offuscato tornare alle loro posizioni originali
  4. Genera, verificare offuscamento, e la prova

Full disclosure: io lavoro per PreEmptive Solutions.