Compilar c# Para nativo?

Acho que estou um pouco confuso sobre compilar byte.NET para código nativo, ou talvez esteja confuso sobre o resultado final. Então, por favor, tenha paciência comigo enquanto tento perceber o que acho que entendo para que me possa ajudar a descobrir o que estou a perder.

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 como upx 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?

Author: Community, 2009-12-17

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).

 19
Author: Sivx, 2015-06-15 13:54:48
Não é assim que a ngen funciona.a exe trabalha. Ele apenas executa o compilador JIT na frente para gerar o .ni.exe ou .ni.dll módulo. Esse arquivo binário não contém metadados, apenas o código da máquina gerado a partir do IL para os corpos do método. A CLR ainda tem de encontrar a montagem original. Só então ele pode determinar que existe uma imagem ngen-ed disponível para que ele possa usar o código da máquina a partir dele, em vez de gerá-lo a partir do Il do conjunto.

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.
 28
Author: Hans Passant, 2009-12-17 13:21:16
Se queres proteger o teu código, um ofuscador é a abordagem típica. o Dotfuscator está numa corrida de armas com reflector há algum tempo e nós usamo-lo nos nossos produtos. Na prática, no entanto, um humano hábil pode facilmente ler código ofuscado. Compilar para código nativo derrota o propósito de ter uma linguagem gerenciada. O principal benefício é permitir que o tempo de execução do alvo JIT o IL em algo que é perfeitamente palatável para o CPU alvo. Se você quiser de outra forma, você usaria algo como a opção à frente do Tempo em mono .
 16
Author: plinth, 2009-12-17 13:09:21

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.

 8
Author: dkackman, 2011-03-04 16:37:47

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.

 7
Author: MSalters, 2009-12-17 13:10:50
Este é um ofuscador livre, que é muito bom.: eazfuscador
 5
Author: chris, 2010-09-08 12:01:53
Posso afastar-me e perguntar porque procura este tipo de protecção. Não estou a tentar argumentar que não precisas de protecção, mas acho que vale a pena compreender a motivação. Por exemplo, se você quer proteção porque tem um algoritmo no seu sistema onde seria devastador para a segurança se alguém o projetasse de forma reversa, então você pode precisar considerar uma abordagem diferente. Significa que há uma falha no algoritmo e nenhuma quantidade de ofuscação. ou a compilação nativa vai ajudá-lo lá. Se é uma questão de IP, então acho que ofuscação é provavelmente a tua melhor abordagem. É como trancar a porta. Alguém pode Partir a fechadura e entrar, mas eles estão intencionalmente a fazê-lo em vez de apenas entrar na porta.
 4
Author: Brian Genisio, 2009-12-17 13:43:19

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.

 4
Author: Amir, 2015-10-29 15:32:50

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.

 3
Author: Tuomas Laakkonen, 2013-08-04 15:53:27