Compilar c# Para nativo?
O Que Eu gostaria de fazer é compilar minha aplicação escrita em C# até o código nativo regular Como eu teria se eu tivesse escrito em C. meu raciocínio não tem nada a ver com o desempenho, mas sim com algum grau de proteccao. Eu entendo que meu objetivo final não é impossível (ou mesmo tão difícil) de contornar, mas eu apenas sinto que reverter montagem x86 é mais difícil do que reverter o refletor me dá.
Neste momento, se colocar a minha aplicação C# no Reflector, basicamente recupero o meu código-fonte. Normalmente, quando atiro as minhas aplicações C/C++ não geridas para o IDAPro e uso o descompilador HexRays, não consigo o mesmo grau de descompilação e tenho de recorrer a a passar pela desmontagem x86 para entender o fluxo lógico. É do meu conhecimento que uma descompilação tão grande vem do Reflector devido à aplicação estar no MSIL em vez do código nativo mais terso que HexRays tenta descompilar. Não me preocupo com a máquina cliente que ainda precisa do tempo de execução da.NET, não estou a tentar contornar nada disso. Eu gostaria de executar programas normais de ofuscação de software comoupx
no meu programa, e fazê-lo como um binário. net falha.
Foi do meu conhecimento que esta pergunta relacionada com o que eu quero. Eu tentei usar ngen
. Mas depois de copiar o arquivo de saída do diretório C:\Windows\assemblies\...\applicationName.ni.exe
para algum lugar que eu possa fazer duplo clique, e tentar executá-lo produz um erro sobre ele não ser "uma aplicação válida Win32". Além disso, quando atiro o applicationName.ni.exe
para o Reflector, obtenho a mesma saída que obtive apenas do applicationName.exe
. Como applicationName.ni.exe
é suposto ser um código nativo, eu esperava que o Reflector se enganasse, mas ... se é assim que devo fazer isto, porque é que o Reflector ainda me deu uma descompilação tão grande?
então, só para resumir a minha pergunta principal novamente: Como posso compilar o meu programa. net numa binária nativa que o Reflector não se decompõe tão facilmente? Ou quais são as melhores práticas para proteger um produto escrito em uma linguagem. NET de engenheiros reversos novatos?
Se eu precisar de uma ferramenta diferente, prefiro algo livre e não algo como Codewall . Obrigado!ATUALIZAÇÃO: eu entendo que o que eu estou procurando pode limitar algumas das características da linguagem como Reflexo, mas eu acho que eu estou bem com isso. Nenhum dos meus códigos faz chamadas explícitas ou algo do género. Mas isso não pode ser substituído por chamadas?
10 answers
Eu apenas validado Native on VS2015 & O Windows 8.1 (quando configurado correctamente, examine .o projecto para validar) e a construção de uma arquitectura em particular (pode ser um exagero, não foi validado), irá produzir um ficheiro nativo que lhe dará o código "mais difícil de reverter o engenheiro" que está à procura e que, para mim, não foi enviado para ler .DLL via DotPeek (descompilador livre.net de JetBrains).
Ngen.o exe acelera o arranque quente hora da aplicação, só isso.
O meu conselho habitual a qualquer um que esteja interessado em desmontar as minhas assembleias é que as aponte para: sourceforge.net. tem terabytes de código fonte, escrito e mantido por programadores que são geralmente melhores do que eu. Às vezes, mesmo com bons comentários. Se o teu ofuscador não funcionar bem, então procura um melhor. Há muitos.Ontem, em Build 2014 , a Microsoft anunciou . Net Native . De acordo com a FAQ ,"... Inicialmente, estamos focando em aplicativos do Windows Store com o nativo do. NET. A longo prazo, continuaremos a melhorar a compilação nativa para todas as aplicações.net."
A colher (anteriormente Xenocode) tem um produto que pode ajustar-se às suas necessidades. Nós o usamos para um UI instalador baseado em WPF para que não tenhamos que inicializar.net a fim de carregar o programa de configuração em si.
O NGEN adiciona código nativo, mas não remove o MSIL. Portanto, qualquer ferramenta que opere no MSIL ainda pode funcionar. Você também precisa disso para reflexão, algo que seria muito difícil para um verdadeiro compilador nativo.
Isto é finalmente possível usando o compilador nativo do Microsoft. NET
Ele compila automaticamente a versão de lançamento de aplicativos que são escritos em código gerenciado (C# ou Visual Basic) e que visam o Framework.NET e Windows 10 para o código nativo.
..
•os seus aplicativos irão fornecer o desempenho superior do código nativo.
•pode continuar a programar em C# ou Visual Basic.
* pode continuar a aproveitar os recursos fornecidos pelo Framework.net, incluindo sua biblioteca de classes, gerenciamento automático de memória e coleta de lixo, e manuseio de exceções.
Para os utilizadores das suas aplicações, o nativo da. NET oferece estas vantagens:
* tempo de execução rápido
* tempos de arranque consistentemente rápidos
{[1]• * baixos custos de implantação e actualização•utilização optimizada da memória da aplicação
Mas o nativo do. NET envolve mais do que uma compilação para o código nativo. Ele transforma a forma como os aplicativos de Framework. Net são construídos e executados. Em especial:
* durante a pré-compilação, as partes necessárias da estrutura. net estão estaticamente ligadas à sua aplicação. Isso permite que o aplicativo para executar com bibliotecas app-locais do Framework. NET, e o compilador para executar a análise global para entregar o desempenho ganha. Como resultado, os aplicativos são lançados de forma consistentemente mais rápida, mesmo depois de atualizações de Framework.net.
•o tempo de execução nativo do .NET está optimizado para a estática precompilação e, portanto, é capaz de oferecer desempenho superior. Ao mesmo tempo, mantém as características de reflexão que os desenvolvedores acham tão produtivo.
*. Net Native usa o mesmo back end que o compilador C++, que é otimizado para cenários de pré-compressão estáticos.
Https://msdn.microsoft.com/en-us/library/dn584397(v=vs 110).aspx
Isto só está disponível com VS.NET 2015.
Isto é possível usando o compilador IL2CPU. O IL2CPU é desenvolvido pelas mesmas pessoas que fazem o COSMOS (C# Open Source Managed Operating System) e só está disponível baixando o cosmos. IL2CPU produz arquivos ASM que podem ser compilados através da Nasm (alguns outros montadores podem funcionar, mas é melhor usar a nasm). o único problema com o IL2CPU é que ele é construído dentro do projeto Cosmos e é muito difícil fazê-lo funcionar por conta própria.