Pergunta

Existe alguma maneira de ofuscar executáveis ​​ou bibliotecas baseadas em C para evitar a descompilação?

Foi útil?

Solução

Não.Você pode fazer mais difícil para descompilar, mas você não pode evitar isto.Meu conselho é parar de desperdiçar seu tempo e, em vez disso, concentrar-se em entregar um produto fantástico com recursos cada vez melhores.

Então as pessoas estarão dispostas a pagar por isso.

Seu principal problema é que a única maneira de tornar seu código indecifrável é torná-lo inexequível.Qualquer coisa que possa ser carregada em um PC pode ser quebrada.As pessoas que fazem engenharia reversa por diversão, lucro ou fama geralmente são muito bom nisso e realmente não será nem um pouco afetado por nada que você faça para tentar detê-los.

Eles têm acesso a ferramentas que tornam o trabalho de decifrar seu código muito mais fácil do que o trabalho que você terá de ofuscá-lo :-) É muito melhor convencer o mundo em geral de que vale a pena comprar seu software e ver a pirataria como uma oportunidade de possivelmente convertê-lo. "ladrões" para usuários genuínos.

Por exemplo, descubra por que eles não estão pagando pelo seu software e tentam consertar isso.Você nunca converterá 100% das pessoas, algumas irão piratear seu código apenas por diversão.

Confira a série de artigos publicados em tecnologia sobre CwF+RtB (conecte-se com os fãs mais motivos para comprar).Descobri que muitos dos pontos levantados poderiam ser aplicáveis ​​à indústria de software.

Outras dicas

O caminho fácil:Compre um produto empacotador/criptografador/ofuscador.Alguns são caros e usados ​​em jogos, outros não.Google para eles por meio de palavras-chave como "proteção contra cópia", etc.

A maneira mais rápida:embalar com UPX e, em seguida, altere o cabeçalho em algum lugar para que ele ainda seja carregado na memória e funcione bem, mas o utilitário upx falhará com um erro (tente o campo de versão).95% desistirão se o utilitário upx falhar.

O jeito difícil:Escreva seu próprio empacotador.

Oh, eu esqueci:

O real jeito fácil:Basta enviá-lo como está.Não, realmente - faça o que fizer, as pessoas ainda podem fazer engenharia reversa em seu código.A quantidade de esforço que você faz apenas restringe quantos podem revertê-lo.

compilar com otimização total.

"executáveis ​​ofuscados" não faz sentido.O hardware deve ser capaz de "entender" o código para executá-lo, e se o hardware puder entendê-lo, um ser humano de engenharia reversa poderá entendê-lo.O máximo que você pode fazer será torná-lo mais tedioso de entender, mas provavelmente não muito e com um custo.

Para dificultar?Claro.Por favor, não faça isso.

Para evitar isso?Não.Qualquer sistema que execute seu binário precisará do software para descriptografar qualquer esquema que você criar.E eles poderão descompilar isso e ver como seus binários obscuros são interpretados.

Eu acho que se você falar sobre binário compilado não há muito que você possa fazer (talvez apenas aplicar UPX ou ferramenta relacionada) o que não faz muito sentido, pois pode ser revertido.

Se você fala sobre escrever novo código, tente Código C automodificável que provavelmente será a maneira mais difícil de reprojetar seu aplicativo.

Compilar o código C com um compilador otimizado torna impossível restaurar o código-fonte original ou qualquer coisa que se pareça remotamente com ele.É muito mais seguro do que qualquer um dos ofuscadores Java ou .NET populares atualmente.Certifique-se de remover o executável se quiser torná-lo menor e ocultar quaisquer nomes de símbolos antes do lançamento.No entanto, observe que isso também torna a depuração (quando o aplicativo trava) praticamente impossível.

Mesmo assim, se alguém realmente quiser hackear seu software, ele o fará no nível assembly, possivelmente com software carregador ou outros truques - não importa o que você tente fazer para impedi-lo.Muitas empresas tentaram, mas nenhuma conseguiu.Usar hacks como esse apenas frustra o usuário final, pois eles podem travar o aplicativo ou até mesmo travar o depurador integrado do Windows.

Pare de perder seu tempo pensando em ofuscação enquanto você deveria melhorar o programa.

Descompilação (Chega de gotos) e tanto a prática de ofuscação (Tabelas de fluxo) e a teoria (Ofuscação da Indistinguibilidade) são áreas ativas de pesquisa e, portanto, não há soluções – apenas ferramentas, técnicas e conhecimentos especializados.Se você realmente deseja que seu código seja imune à descompilação, crie um aplicativo da web e coloque o código confidencial no lado do servidor.Mas se você está preso ao modelo de dar um binário a alguém, então você deve julgar sabiamente a compensação que deseja fazer entre segurança e desempenho.A ofuscação tem um custo e ainda assim nunca é perfeita.Algumas opções

  • Use um compactador diferente do UPX (o UPX vem instalado em muitas distribuições Linux).O custo de desempenho é baixo e a maioria das pessoas não tem habilidade para descompactar manualmente um binário para análise estática.Mas para reversores experientes, o custo de desembalar é irrelevante
  • Confira o Tigress, um virtualizador/ofuscador diversificado com recursos avançados para ofuscação de fonte a fonte C.Para melhor desempenho, conte com as transformações de suporte, nivelamento de fluxo de controle, fusão/divisão de funções, codificação literal
  • Se você quer uma proteção ainda maior, confira as principais transformações da Tigresa:virtualização, JITing, etc, mas tenho quase certeza de que são mais caros e seus usuários poderão notar uma lentidão se você usar essas transformações.

Não desanime com o trabalho seminal de Barak et al sobre a impossibilidade de ofuscação da caixa preta.Ele apenas prova a impossibilidade de ofuscadores de caixa preta, e não a impossibilidade de muitos ofuscamentos práticos e valiosos.(A ofuscação da caixa preta, sendo o funcionamento interno do programa, é completamente ininteligível) Também não desanime com os piratas.Sempre tem gente que faz questão de comprar seu produto se ele for bom.

Por que ofuscar o código se há um ganho comercial com isso?Para ser honesto, suponha que o código comercial esteja suficientemente otimizado e ofuscado, e funcione, então aconteceu a mãe de uma coisa totalmente embaraçosa - uma falha... você está preso, pois o código binário de produção está ofuscado, tornando mais difícil depurar onde a falha está acontecendo e é difícil de replicar, ele ficará preso na lista de BUGS para sempre...

Por exemplo, ao tentar encontrar o rastreamento de pilha, você acabará perdendo mais fios de cabelo do que tentando descobrir o código desmontado para descobrir que WTF está acontecendo ali, resmas intermináveis ​​de loops de espaguete.Resumindo, não!

Você acabará perdendo dinheiro tentando depurar a falha... ou você precisa ser um especialista em montador brilhante para ler os despejos de memória e resolvê-los a partir do código ofuscado...Não jogue fora, apenas coloque seu lindo produto em funcionamento e venda-o... Claro, há muitas pessoas que têm tempo disponível para quebrá-lo fazendo engenharia reversa do código...

O segredo para vencer isso é seguir o princípio - liberar com frequência, liberar com frequência, faça melhorias à medida que você lança com frequência, de forma que os melhores e mais recentes recursos fiquem mais atualizados do que o tempo que um cracker leva para desmontá-lo e trabalhar!Olhe o código-fonte do Linux, os patches chegam e depois ele é lançado... se você mantiver esse princípio em mente, ao lançar uma nova versão com mais recursos em um ritmo muito mais rápido, você estará ganhando!

Uma maneira de tornar as coisas um pouco mais difíceis é embalá-las. UPX empacotará seus binários, o que tornará mais difícil descompilar imediatamente.Tecnicamente, é possível descompactar e depois descompilar, mas isso aumentará um pouco a fasquia.Supondo que você esteja executando um sistema operacional de usuário básico, não há muito que você possa fazer para evitar a descompilação sem usar truques desagradáveis.

Se você realmente quiser confundir tudo, precisará de um programa separado para fazer isso.Como desenvolvedor, você escreve seu código da forma mais limpa e legível.Após a compilação, você executa o aplicativo separado para fazer a ofuscação.Você pode comprar esses aplicativos por cerca de US$ 100 mil.

Se sua intenção é impedir que o código seja submetido a engenharia reversa, isso provavelmente funcionará.Se sua intenção é impedir que alguém quebre a segurança, a ofuscação por si só não impedirá um invasor determinado.Em algum momento, há uma decisão de sim/não, eles não precisam entender o código para descobrir isso nem para contorná-lo.

Compilador C minúsculo modificado para produzir código ofuscado: http://blogs.conus.info/node/58

Para fornecer algum suporte teórico para as respostas aqui:em 2001 Baraque et.al. provou que a ofuscação do programa é impossível em geral.

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