
pyREtic é um framework extensível para engenharia reversa de bytecode Python 2.x em memória.
Rich Smith - [email protected]
A versão mais recente do pyREtic pode ser encontrada em: https://github.com/MyNameIsMeerkat/pyREtic
pyREtic é um framework extensível para auxiliar na realização de diversas tarefas de engenharia reversa para projetos em linguagem Python.
Ele auxilia um engenheiro reverso a obter código-fonte (.py's) a partir de bytecode (.pyc's), em particular quando o código que está sendo revertido empregou esforços para impedir a descompilação usando ferramentas padrão.
Consiste em 3 partes principais:
As capacidades dentro do kit de ferramentas pyREtic foram escritas para serem eficazes contra as proteções que a maioria dos desenvolvedores Python de código fechado estava usando para proteger o código que distribuíam de ser lido em sua forma-fonte.
A saída do pyREtic destinava-se a produzir uma representação em código-fonte de um objeto ao qual se pudesse ter acesso em uma instância em execução do aplicativo alvo. Essa representação só precisava ser boa o suficiente para avaliar a segurança do aplicativo alvo, em vez de ser uma cópia absolutamente perfeita.
Um documento de instruções detalhado pode ser encontrado no diretório docs/.
O pyREtic é lançado sob a GPLv3, que pode ser encontrada no diretório docs/ ou em GPLv3.
Outros componentes que o pyREtic utiliza são lançados sob suas próprias licenças:
UnPyc http://unpyc.sourceforge.net/ : Licença BSD
pycallgraph http://pycallgraph.slowchop.com/: GPLv2
O pyREtic começou quando eu trabalhava na Immunity Inc., e foi apresentado publicamente pela primeira vez na conferência BlackHat 2010 em Las Vegas, e depois na Defcon 17. Um artigo que acompanhou seu lançamento pode ser encontrado no diretório docs/.
Atualmente não trabalho mais na Immunity, mas Dave Aitel foi gentil o suficiente para me permitir lançar o código sob a GPL para que as pessoas pudessem acessá-lo e permitir que seu desenvolvimento continuasse.
A versão mais recente do framework pode ser encontrada em https://github.com/MyNameIsMeerkat/pyREtic.
Recentemente movi o projeto para uma nova casa no GitHub devido ao renovado interesse de alguns na comunidade e lançarei algumas melhorias que até agora nunca viram a luz do dia.
As funcionalidades que serão adicionadas ao pyREtic no futuro refletirão o desenvolvimento das minhas necessidades para lidar com a reversão de aplicações Python daqui para frente. Se você tiver sugestões, no entanto, me avise.
Para aqueles interessados em mais detalhes técnicos de como o pyREtic faz as coisas, podem ser encontrados no artigo pyREtic: In memory reverse engineering for obfuscated Python bytecode que está no diretório docs/, e uma apresentação discutindo o assunto pode ser encontrada em:
http://prezi.com/kmyvgiobsl1d/pyretic-rich-smith-blackhatdefcon-2010