Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

Prefácio

O texto e as imagens do texto são provenientes da Internet e são apenas para aprendizado e comunicação. Eles não têm uso comercial. Os direitos autorais pertencem ao autor original. Se você tiver alguma dúvida, entre em contato conosco a tempo de processar.

Autor: Wang Ping

PS: Se você precisar de materiais de aprendizado Python, clique no link abaixo para obter http://t.cn/A6Zvjdun

Vamos falar sobre a ofuscação do código Python. Parece absurdo ofuscar o código Python, mas existem algumas necessidades para terceirizar a entrega do projeto.

O objetivo da ofuscação é tornar mais difícil para outras pessoas a análise da lógica e do fluxo do seu código, para que o código pareça confuso e a lógica caótica. Mas o programa deve poder executar normalmente.

Confusão geral

O ponto simples de confusão com o código Python é ofuscar nomes de variáveis ​​/ nomes de classes / strings / constantes, tornando o nome muito longo ou aproximado.

Existem muitas dessas bibliotecas de ofuscação, como a biblioteca Intensio-Obfuscator. Esta biblioteca é dividida em ofuscação simples e complexa. Vamos dar uma olhada no modo simples para ofuscar o código Python:

Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

O lado esquerdo está antes da confusão e o lado direito está depois da confusão, mas apenas o nome da variável e o nome do método são confusos e aumentados.

O significado dessa confusão simples não é significativo, pois as strings e as constantes são claras à primeira vista.A estrutura do código depende da análise estática e o contexto do código ainda é claro.

Uma confusão um pouco mais complicada é ocultar o código da chave e adicionar algum código inválido ao código.

Ou o modo de ofuscação complexo da biblioteca Intensio-Obfuscator, vamos dar uma olhada:

 

Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

À primeira vista, à direita, não parece ser um código Python.De fato, a string à direita é o código Python à esquerda, mas apenas o código unicode. Como o Python possui uma função interna exec () que pode executar programas de string, assim:

>> exec("1+1")>> 2

Vamos imprimir o conteúdo dessa string em utf8 e ver o conteúdo:

Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

 

Como mostrado na figura acima, sua confusão é que o nome da variável é mais longo e o segundo é que algum código de interferência é adicionado ao código.Para a marca vermelha, o código original originalmente não tinha instruções for e if e o código ofuscado está disponível. Parece que é muito difícil analisar estaticamente esse código.De fato, se os nomes das variáveis ​​forem renomeados e abreviados, essa parte do extra para e se por meio da análise estática ainda é mais fácil de pular.

Para resumir o modo complexo de ofuscação da biblioteca Intensio-Obfuscator, primeiro o nome da função da variável de código é feito muito longo, depois o código inválido é adicionado ao código e, finalmente, o código-fonte é compactado como uma string, que é executada com exec.

Ofuscação de árvore de sintaxe abstrata

O método de ofuscação acima é relativamente simples e pode ser ofuscado por análise estática. Uma confusão mais complicada é a confusão do fluxo de controle. Normalmente, o fluxo de execução do programa é muito organizado e a confusão do fluxo de controle é confundir o fluxo de execução do programa.

Por exemplo, há muito tempo para instruções if e até lamdb no código, que alteram as operações de atribuição, adição e subtração em operações de bit e assim por diante. É difícil ver qual é o objetivo e a lógica do código através da análise estática.

Como obter a confusão do fluxo de controle, através da árvore de sintaxe abstrata (AST), através da árvore de sintaxe abstrata, você pode executar o programa para modificar o programa. Através da árvore de sintaxe abstrata, você pode saber exatamente o que o programa está fazendo, para poder modificar o código com muita precisão.

Vamos dar uma olhada no exemplo simples de confundir o programa através da árvore de sintaxe abstrata ou usar o programa acima como exemplo.

 

Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

À esquerda está o código antes da ofuscação, e na parte traseira está o pós-confusão. Este exemplo também confunde nomes de variáveis, confunde seqüências de caracteres e constantes e importa. A dificuldade de suavização de serrilhado é um pouco maior que a acima. É necessário saber o que o programa está fazendo através da depuração dinâmica.

O que é uma árvore de sintaxe abstrata

Conhecer o significado é abstrair o programa em uma árvore e as instruções no código são divididas em nós da árvore. Existe um módulo AST no Python para fazer isso, ou o código-fonte acima, e ver como ele é depois de ser dividido em nós pelo AST.

 

Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

 

Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

A segunda figura é criar a primeira figura como uma árvore de sintaxe abstrata e imprimir o código fonte de acordo com os nós da árvore.

 

A seta vermelha indica que há nó de importação, nó de atribuição, nó de função, nó de adição e assim por diante. Esta árvore pode expressar completamente o procedimento acima. Podemos modificar o programa, visitando esta árvore.

Introdução ao Python controla a ofuscação de código de fluxo, dificultando a análise de sua lógica e fluxo de código por outras pessoas

 

 

Personalize uma classe, herda ast.NodeTransformer, por exemplo, se você deseja acessar a sequência, implemente o método visit_Str, se desejar acessar Import, implemente o método visit_ImportFrom. No método de implementação, você pode usar alguns algoritmos de ofuscação para ofuscar (observe que ele só pode ser ofuscado, não para alterar o resultado). Dessa maneira, refinamento e confusão mais complicada podem ser alcançados.

Existe uma biblioteca de ofuscação de terceiros ASTObfuscate que ofusca o código operando o AST, mas não há ofuscação do fluxo lógico do programa.Para obter ofuscação de fluxo de controle mais complicada, a árvore de análise deve ser totalmente implementada.

Obviamente, se a ofuscação do código Python é mais difícil, deve ser através da ofuscação do bytecode ou da criação do código-chave nesse arquivo, o que é mais difícil de ofuscar. Os arquivos bytecode e so são instruções de montagem.


Se você quer aprender Python ou está aprendendo Python, existem muitos tutoriais em Python, mas é o mais recente? Talvez você tenha aprendido algo que as pessoas possam ter aprendido há dois anos e aqui compartilho uma onda dos mais recentes tutoriais em Python para 2020. Como obtê-lo, você pode obtê-lo gratuitamente, editando as "Informações" da carta particular!

 

Acho que você gosta

Origin www.cnblogs.com/python0921/p/12694280.html
Recomendado
Clasificación