Il modo migliore per proteggere il codice .NET (.dll) per APK è quello di consentire Ahead Of Time (AOT) la compilazione:
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.
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
Perché utilizzare il tag iOS? Xamarin.iOS utilizza AOT per compilare già in modo nativo. –
@LexLi grazie per averlo menzionato. Ho appena rimosso il tag. –