Penso di essere un po 'confuso riguardo la compilazione del codice byte .NET nel codice nativo, o forse sono confuso riguardo al risultato finale. Quindi, per favore, sopportami mentre cerco di capire cosa penso di capire, così puoi aiutarmi a capire cosa mi manca.Compilare C# in Nativo?
Quello che mi piacerebbe fare è compilare la mia applicazione scritta in C# fino al normale codice nativo come se avessi scritto in C. Il mio ragionamento non ha nulla a che fare con le prestazioni, ma piuttosto con un certo grado di protezione. Capisco che il mio obiettivo finale non è impossibile (o anche così difficile) da eludere, ma ho proprio voglia di invertire l'assemblaggio di x86 è più difficile che invertire ciò che Reflector mi dà.
In questo momento se lancio la mia applicazione C# in Reflector, in pratica ottengo il mio codice sorgente. In genere quando lancio le mie applicazioni C/C++ non gestite in IDAPro e utilizzo il decompilatore HexRays, non riesco a ottenere lo stesso grado di decompilazione e devo ricorrere al guado del disassemblaggio x86 per capire il flusso logico. Ho capito che una tale decompilazione deriva da Reflector a causa del fatto che l'applicazione è in MSIL invece del più nativo codice nativo che HexRays tenta di decompilare.
Non ho dubbi sul fatto che la macchina client abbia ancora bisogno dei runtime .NET, non sto cercando di eludere nulla di tutto ciò. Mi piacerebbe eseguire normali programmi di offuscamento del software come upx
sul mio programma, e farlo come un binario .NET fallisce.
Era la mia comprensione da this domanda correlata che ngen
fa quello che voglio. Ho provato a utilizzare ngen
. Ma dopo aver copiato il file di output dalla directory C:\Windows\assemblies\...\applicationName.ni.exe
in un punto in cui posso fare doppio clic e provare a eseguirlo genera un errore in quanto non è "un'applicazione Win32 valida". Inoltre, quando lancio lo applicationName.ni.exe
in Reflector, ottengo la stessa uscita che ho ottenuto dal solo applicationName.exe
. Dal momento che il applicationName.ni.exe
è un codice nativo, mi aspettavo che Reflector si commettesse un errore, ma non lo fece. Se questo è il modo in cui dovrei fare questo, perché Reflector mi ha ancora dato una così grande decompilazione?
Quindi, solo per riassumere la mia domanda principale di nuovo: come posso compilare il mio programma .NET in un binario nativo che Reflector non decomporrà così facilmente? O quali sono le migliori pratiche per proteggere un prodotto scritto in un linguaggio .NET da ingegneri invianti newbie?
Se ho bisogno di uno strumento diverso, preferirei qualcosa di gratuito e non qualcosa come Codewall.
Grazie!
AGGIORNAMENTO: Capisco che ciò che sto cercando potrebbe limitare alcune delle funzionalità del linguaggio come Reflection, ma penso che mi stia bene. Nessuno del mio codice fa alcuna chiamata esplicita Assembly.Load
o qualcosa del genere. Ma non potrebbero essere sostituiti con le chiamate GetProcAddress/LoadLibrary
?
sul codice protettori/obstufactors maggior parte di loro sono commerciali e moderatamente costoso se il vostro non è una società di sviluppo di software però anche il livello superiore quelli commerciali possono avere un sacco di problemi con il tuo codice in realtà funziona subito dopo che lo fa è cosa. –