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:
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:
À 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:
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.
À 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.
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.
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!