Pergunta

Eu gostaria de um passo a passo através de como a Salamandra faz o que faz?Vou incluir alguns pontos im particularmente interessado em

-

Link Demanda

O vinculador começa com a entrada de métodos (que você pode configurar), e passa recursivamente o gráfico de chamadas para ligar apenas o necessário bits de código MSIL.O código não utilizado não serão vinculadas para a montagem final.Portanto, o código torna-se mais eficiente e o tamanho do arquivo passa a ser menor.

-

Link para o Quadro de APIs

O linker é tão poderosa que até mesmo a Microsoft .NET Framework assemblies, como System.Windows.Forms.dll podem ser ligados em seu próprio país .NET assembléias.Desde que os links on demand, só a parte requerida será vinculada.Isto é muito útil para proteger o seu código, de aplicação simples de implantação e solução de problemas por depuração para o quadro próprio código.

-

Nativo Compliation

O compilador nativo converte todos os assemblies gerenciados, incluindo o sistema de assembléias, em x86 código nativo.Nenhuma instrução MSIL será enviado, sem a compilação JIT em tempo de execução.Isso fornece a melhor proteção contra desmontagem e descompilação, e ele também melhora o desempenho e o tempo de inicialização.

-

Simples e Rápido de Implantação sem completo da Microsoft .NET Framework de Instalação

O mini-implantação de ferramenta reúne o conjunto mínimo de CLR arquivos de tempo de execução e assemblagens dependentes que podem ser simplesmente copiadas para uma pasta em uma máquina de destino, e seu aplicativo é executado como se todo o framework é instalado.Desde a instalação é isolado em uma única pasta, não haverá conflitos com o futuro .Instalação de rede.Quando a ligação é utilizada para a assemblagens dependentes, que irá reduzir ainda mais o tamanho do arquivo.

-

Código De Proteção Não é um problema que nenhum dos atuais obfuscators endereço, isto é, não importa o quão boa a incompreensão é, não são chamadas de biblioteca do sistema e outras referências externas espalhadas em seu código (ver em vermelho abaixo).Uma vez que estas são chamadas de referências externas, obfuscators terá de mantê-las inalteradas.No entanto, estas referências ajudar muito a entender o código descompilado, porque eles estão bem documentados e APIs públicas.O vinculador remove ou reduz tais APIs públicas, vinculando o quadro de APIs em seu próprio código, e, portanto, torna o seu código mais difícil de se decompor depois de ofuscamento.Abaixo mostra o exemplo de código MSIL antes e depois do linker é usado.

antes:(nenhum obfuscators são capazes de mudar o código a seguir, uma vez que eles são externos APIs públicas)

IL_0000:  ldarg.0
IL_0001:  call       instance void [System.Windows.Forms]System.Windows.Forms.Form::.ctor()
IL_0006:  ldarg.0
IL_0007:  newobj     instance void  [System.Windows.Forms]System.Windows.Forms.TextBox::.ctor()
IL_000c:  stfld      class [System.Windows.Forms]System.Windows.Forms.TextBox A.A::A
IL_0011:  ldarg.0
IL_0012:  ldfld      class [System.Windows.Forms]System.Windows.Forms.TextBox A.A::A
IL_0017:  call       valuetype  [System.Drawing]System.Drawing.Color [System.Drawing]System.Drawing.Color::get_Cyan()
IL_001c:  callvirt   instance void  [System.Windows.Forms]System.Windows.Forms.TextBoxBase::set_BackColor(valuetype [System.Drawing]System.Drawing.Color)
IL_0021:  ldarg.0

depois:(absolutamente nenhuma pista do Windows.Formas APIs são utilizadas, uma alta obstáculo para um hacker para entender isso publicitário não solicitado)

IL_0000:  ldarg.0
IL_0001:  call       instance void a.A::.ctor()
IL_0006:  ldarg.0
IL_0007:  newobj     instance void  D.c::.ctor()
IL_000c:  stfld      class D.c A.A::A
IL_0011:  ldarg.0
IL_0012:  ldfld      class f.aA.A::A 
IL_0017:  call  valuetype        a.B()
IL_001c:  callvirt  instance   void  D.c(valuetype g.e)
IL_0021:  ldarg.0  

Algumas dessas coisas defletor de mim, e eu estava me perguntando se alguém sabia como as coisas funcionavam?

Foi útil?

Solução

Nativo Compliation, Simples e Rápido de Implantação sem completo da Microsoft .NET Framework de Instalação, Código De Proteção:

Eles são a compilação "YourApp" + ".NetFramework' em uma dll nativa.Isso não tem IL e sem símbolos, de modo que é muito mais difícil de engenharia reversa.

Link Demanda, Link para o Quadro de APIs:

Para manter .dll de um razoável tamanho, eles têm de deixar de fora o código morto (o código que nunca vai ser chamado) da dll.Para fazer isso eles andam a chamada árvore a partir da raiz, geralmente Main(), e apenas incluir esses métodos.Pode haver problemas com o código que está sendo chamado através de reflexão, então eu acho que eles permitem que mais de 1 raiz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top