Skip to content

Archives

  • Janeiro 2022
  • Dezembro 2021
  • Novembro 2021
  • Outubro 2021
  • Setembro 2021

Categories

  • Sem categorias
Trend RepositoryArticles and guides
Articles

O que é Ofuscação?

On Outubro 25, 2021 by admin
  • O que é Ofuscação de Código?
  • Porquê usar um Obuscador de Código?
  • Como funciona a ofuscação?
  • Rename Obfuscation
  • Criptação de cordas
  • Control Flow Obfuscation
  • Transformação do Padrão de Instrução
  • Inserção de código dummy
  • Retirada de Código e Metadados não utilizados
  • Ligação binária/Fusão
  • Inserção de Predicados Opacos
  • Anti-Tamper
  • Anti-Debug
  • Devo ofuscar minha aplicação?

O que é Ofuscação de Código?

A Ofuscação de Código é o processo de modificação de um executável para que ele não seja mais útil a um hacker, mas permaneça totalmente funcional. Embora o processo possa modificar as instruções do método real ou metadados, ele não altera a saída do programa. Para ser claro, com tempo e esforço suficientes, quase todo o código pode ser modificado de forma inversa. Entretanto, em algumas plataformas como Java, Android, iOS ou .NET (por exemplo, Xamarin, C#, VB.NET, F#) os descompiladores livres podem facilmente reverter o código fonte de um executável ou biblioteca em praticamente nenhum tempo e sem esforço. A ofuscação automatizada do código torna a engenharia reversa um programa difícil e economicamente inviável.

Porquê usar um Obuscador de Código?

Por tornar um aplicativo muito mais difícil de engenharia reversa, você pode proteger contra roubo de segredo comercial (propriedade intelectual), acesso não autorizado, contornar licenças ou outros controles e descoberta de vulnerabilidades.

Como funciona a ofuscação?

A ofuscação de código consiste em muitas técnicas diferentes que podem se complementar umas às outras para criar uma defesa em camadas. É mais eficaz para linguagens que criam alguma forma de instruções de nível intermediário, como Java ou as linguagens .NET como C#, VB.NET, Managed C++, F#, etc. Alguns exemplos típicos de ofuscação e técnicas de segurança de aplicações incluem:

Rename Obfuscation

Renaming altera o nome dos métodos e variáveis. Torna a fonte descompilada mais difícil para um humano compreender, mas não altera a execução do programa. Os novos nomes podem utilizar diferentes esquemas como “a”, “b”, “c”, ou números, caracteres não imprimíveis ou caracteres invisíveis. E os nomes podem ser sobrecarregados desde que tenham um escopo diferente. A ofuscação de nomes é uma transformação básica que é usada pela maioria dos obfuscadores .NET (C#, etc.), iOS, Java e Android.

Criptação de cordas

Em um executável gerenciado, todas as cordas são claramente descobertos e legíveis. Mesmo quando métodos e variáveis são renomeados, strings podem ser usadas para localizar seções críticas de código procurando por referências de strings dentro do binário. Isto inclui mensagens (especialmente mensagens de erro) que são exibidas para o usuário. Para fornecer uma barreira eficaz contra este tipo de ataque, a encriptação de strings esconde as strings no executável e só restaura o seu valor original quando necessário. Decriptar strings em tempo de execução tipicamente incorre em uma leve penalidade de performance em tempo de execução.

Control Flow Obfuscation

Control Flow Obfuscation sintetiza construções condicionais, ramificações e iterativas que produzem lógicas executáveis válidas, mas produzem resultados semânticos não-determinísticos quando descompiladas. Mais simplesmente dito, faz com que o código descompilado pareça lógica spaghetti, o que é muito difícil para um hacker de compreender. Estas técnicas podem afetar a performance em tempo de execução de um método.

Transformação do Padrão de Instrução

Converte instruções comuns criadas pelo compilador para outras construções menos óbvias. Estas são instruções em linguagem de máquina perfeitamente legais que podem não mapear de forma limpa para linguagens de alto nível, tais como Java ou C#. Um exemplo é o cache transiente de variáveis que alavanca a natureza baseada em pilha dos tempos de execução Java e .NET.

Inserção de código dummy

Inserção de código no executável que não afeta a lógica do programa, mas quebra descompiladores ou torna o código de engenharia reversa muito mais difícil de analisar.

Retirada de Código e Metadados não utilizados

Remover informação de depuração, metadados não essenciais e código usado de aplicações torna-os menores e reduz a informação disponível para um atacante. Este procedimento pode melhorar ligeiramente a performance em tempo de execução.

Ligação binária/Fusão

Esta transformação combina múltiplos executáveis/librários de entrada em um ou mais binários de saída. Linking pode ser usado para tornar seu aplicativo menor, especialmente quando usado com renomeamento e poda, Pode simplificar cenários de implantação e pode reduzir informações disponíveis para hackers.

Inserção de Predicados Opacos

Obfuscates adicionando ramos condicionais que sempre avaliam a resultados conhecidos – resultados que não podem ser facilmente determinados via análise estática. Esta é uma maneira de introduzir código potencialmente incorreto que nunca será executado, mas é confuso para atacantes que tentam entender a saída descompilada.

Anti-Tamper

Um obfuscador pode injetar auto-proteção no seu código para verificar se a sua aplicação não foi adulterada de nenhuma maneira. Se a adulteração for detectada, ele pode desligar o aplicativo, limitar a funcionalidade, invocar falhas aleatórias (para disfarçar o motivo da falha), ou executar qualquer outra ação personalizada. Ele também pode enviar uma mensagem para um serviço para fornecer detalhes sobre a violação detectada.

Anti-Debug

Quando um hacker está tentando piratear ou falsificar sua aplicação, roubar seus dados, ou alterar o comportamento de um software de infra-estrutura crítica, eles quase certamente começarão com engenharia reversa e passarão através de sua aplicação com um depurador. Um obfuscator pode se auto-proteger injetando código para detectar se sua aplicação de produção está sendo executada dentro de um depurador. Se um depurador for usado, ele pode corromper dados sensíveis (protegendo-os contra roubo), invocar falhas aleatórias (para disfarçar que a falha foi resultado de uma verificação de depuração), ou executar qualquer outra ação personalizada. Ele também pode enviar uma mensagem para um serviço para fornecer um sinal de aviso.

Devo ofuscar minha aplicação?

Ponderar fortemente a utilização de ofuscação e auto-proteção da aplicação em tempo de execução se você lançar um software que roda em um ambiente não confiável e tem propriedade intelectual, fornece acesso a informações confidenciais, ou tem funcionalidade gated. A ofuscação torna muito mais difficult para os atacantes reverem o código e analisarem o aplicativo. Também torna difícil para os hackers depurarem e manipularem o seu aplicativo. O objetivo final é adicionar uma camada de proteção para torná-lo difficult para extrair ou descobrir informações úteis, tais como segredos comerciais (IP), credenciais ou vulnerabilidades de segurança de uma aplicação. Também deve tornar mais difícil modificar a lógica da aplicação ou reembalar uma aplicação com código malicioso.

Deixe uma resposta Cancelar resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Arquivo

  • Janeiro 2022
  • Dezembro 2021
  • Novembro 2021
  • Outubro 2021
  • Setembro 2021

Meta

  • Iniciar sessão
  • Feed de entradas
  • Feed de comentários
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress