Seção 2 Engenharia Reversa Delphi
Atualmente, a Borland não fornece nenhum produto para descompilar arquivos executáveis (.exe) ou "arquivos compilados Delphi" (.dcu) em código de programa bruto (.pas).
Unidade compilada Delphi: DCU ( unidade compilada Delphi: DCU )
Quando um projeto Delphi é compilado ou executado, um arquivo de unidade de compilação (.dcu) é gerado. Por padrão, a versão compilada de cada unidade é armazenada em um arquivo binário separado. O nome do arquivo é igual ao arquivo da unidade e sua extensão é .DCU. Por exemplo: o arquivo unit1.dcu contém o código e os dados declarados no arquivo unit1.pas.
Isso significa que se você tiver algum recurso, como um componente compilado, basta descompilá-lo e obter o código-fonte. Errado, o formato do arquivo DCU não está documentado (formato do proprietário) e pode mudar de versão para versão.
Depois do compilador: Delphi Reverse Engineering
Se você estiver tentando descompilar um executável Delphi, há algumas coisas que você deve saber:
Os arquivos de programa de origem Delphi são geralmente armazenados em dois tipos de arquivos: arquivos de código ASCII (.pas, .dPR) e arquivos de recursos (.res, .rc, .dfm, .dcr). Os arquivos Dfm contêm detalhes (propriedades) dos objetos contidos no formulário. Ao criar um arquivo executável, o Delphi copia as informações do arquivo .dfm para o arquivo de código .exe concluído. O arquivo de formulário descreve cada componente do formulário, incluindo todos os valores de propriedades estáveis. Sempre que alteramos a posição de um formulário, o título de um botão ou atribuímos um procedimento de evento a um componente, o Delphi registra essas alterações no arquivo DFM (não o código do procedimento de evento – ele é armazenado no arquivo pas/dcu) . Para obter 'dfm' de um executável, precisamos entender que tipo de recursos estão armazenados no executável Win32.
Todos os programas compilados pelo Delphi possuem as seguintes partes: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Do ponto de vista da descompilação, as partes mais importantes são: CODE, .rsrc. No artigo "Adicionando funcionalidade a um programa Delphi" ("Adicionando funcionalidade a um programa Delphi") (adição do tradutor: um após o outro), são discutidas algumas coisas interessantes sobre o formato executável Delphi, informações de classe e recursos DFM: Como atribuir eventos para outros manipuladores de eventos definidos no mesmo formulário. Como adicionar seu próprio manipulador de eventos para adicionar código ao arquivo executável para alterar o título do botão.
Dentre os diversos tipos de recursos armazenados no arquivo .exe, os RT_RCDATA ou recursos definidos pela aplicação (dados brutos) possuem as informações contidas no arquivo DFM antes da compilação. Para selecionar dados DFM de um arquivo .exe, podemos chamar a função API EnumResourceNames... Para obter mais informações sobre como selecionar dados DFM de um arquivo .exe, consulte: "Codificando um Delphi DFM Explorer" ("Escrevendo um Detector Delphi DFM"). (Tradutor adicionado: traduzido um após o outro)