Je pense que je suis un peu confus au sujet de la compilation .NET byte-code en code natif, ou peut-être que je suis confus sur le résultat final. Donc, s'il vous plaît garder avec moi comme j'essaye de faire le tri dans ce que je crois comprendre de sorte que vous pouvez m'aider à comprendre ce que je suis absent.
Ce que je voudrais faire est de compiler mon application écrite en C# vers le bas à la régulière en code natif , comme je serais si je l'avais écrit en C. Mon raisonnement n'a rien à voir avec la performance, mais plutôt avec un certain degré de protection. Je comprends que mon objectif final n'est pas impossible (ou même pas vraiment ce que difficile à contourner, mais j'ai juste envie de renverser x86 assemblée est plus difficile que le renversement de ce Réflecteur me donne.
Pour l'instant, si je lance mon application C# dans le Réflecteur, en gros, j'ai obtenir mon code source en arrière. Généralement, lorsque je jette mon non géré applications C/C++ dans IDAPro et l'utilisation de la HexRays decompiler, je n'arrive pas à obtenir le même degré de décompilation et j'ai du avoir recours à patauger dans des x86 démontage de comprendre la logique de flux. C'est ma compréhension que ces grands décompilation vient de Réflecteur en raison de la demande en MSIL au lieu de la plus laconique code natif HexRays essaie de le décompiler.
Je n'ai pas de préoccupations au sujet de la machine client ont encore besoin de l' .NET runtimes, je ne suis pas d'essayer de contourner cela. Je voudrais lancer un logiciel normal de la dissimulation de programmes, comme upx
sur mon programme, et de le faire tant que .NET binaire échoue.
C'était ma compréhension de cette question connexe, qui ngen
fait ce que je veux. J'ai essayé à l'aide d' ngen
. Mais après avoir copié le fichier de sortie à partir de l' C:\Windows\assemblies\...\applicationName.ni.exe
répertoire quelque part je peux double-cliquer dessus et d'essayer de l'exécuter, il se produit une erreur ce n'est pas "une application Win32 valide". De plus, lorsque je mets de l' applicationName.ni.exe
dans le Réflecteur, j'obtiens le même résultat que j'ai fait juste de la applicationName.exe
. Depuis applicationName.ni.exe
est censé être en code natif, je m'attendais à Réflecteur à l'erreur, mais il n'a pas. Si ce la façon dont je suis censé faire cela, pourquoi n'Réflecteur me donnent encore un grand décompilation?
Donc, pour résumer ma question principale: Comment puis-je compiler mon .NET programme dans un fichier binaire natif qui Réflecteur ne sera pas si facilement décompiler? Ou ce qui est de certaines des meilleures pratiques pour la protection d'un produit écrit dans un .NET langue de newbie inverse ingénieurs?
Si j'ai besoin d'un autre outil, je préfère quelque chose de libre et pas quelque chose comme Codewall.
Merci!
Mise à JOUR: je comprends que ce que je suis à la recherche pourrait limiter certaines des caractéristiques de la langue comme Réflexion, mais je pense que je suis bien avec. Aucun de mon code n'explicite Assembly.Load
des appels ou quoi que ce soit de la sorte. Mais ne pouvait pas juste être remplacé par GetProcAddress/LoadLibrary
des appels de toute façon?