Decompilazione Delphi (1/3)

In parole povere, la decompilazione è l'inverso della compilazione: tradurre un file eseguibile in una lingua di livello superiore.

Supponiamo di perdere la fonte del tuo progetto Delphi e di avere solo il file eseguibile: reverse engineering (decompilazione) è utile se le fonti originali non sono disponibili.

Hm, "fonti non disponibili", significa che possiamo decompilare i progetti Delphi di altre persone? Bene, sì e no ...

È possibile la vera decompilazione?

No certo che no. La decompilazione completamente automatica non è possibile: nessun decompilatore potrebbe riprodurre esattamente il codice sorgente originale.

Quando un progetto Delphi viene compilato e collegato per produrre un file eseguibile autonomo, la maggior parte dei nomi utilizzati nel programma vengono convertiti in indirizzi. Questa perdita di nomi significa che un decompilatore dovrebbe creare nomi univoci per tutte le costanti, variabili, funzioni e procedure. Anche se si ottiene un certo grado di successo, nel "codice sorgente" generato mancano nomi di variabili e funzioni significativi.
Ovviamente, la sintassi del linguaggio di origine non esiste più nell'eseguibile. Sarebbe molto difficile per un decompilatore interpretare la serie di istruzioni in linguaggio macchina (ASM) esistenti in un file eseguibile e decidere quale fosse l'istruzione di origine originale.

Perché e quando usare la decompilazione

Il reverse engineering può essere utilizzato per diversi motivi, alcuni dei quali sono:

  • Ripristino del codice sorgente perso
  • Migrazione di applicazioni su una nuova piattaforma hardware
  • Determinazione dell'esistenza di virus o codice dannoso nel programma
  • Correzione dell'errore quando il proprietario dell'applicazione non è disponibile per effettuare la correzione.
  • Ripristino del codice sorgente di qualcun altro (ad esempio per determinare un algoritmo).

È legale??

Il reverse engineering NON si spezza, sebbene a volte sia difficile tracciare la linea sottile tra quei due. I programmi per computer sono protetti dalle leggi sul copyright e sui marchi. Paesi diversi hanno diverse eccezioni ai diritti del proprietario del copyright. I più comuni affermano che è possibile decompilare: ai fini dell'interpretazione non è stata resa disponibile la specifica dell'interfaccia, ai fini della correzione degli errori in cui il proprietario del copyright non è disponibile per apportare la correzione, per determinare le parti del programma che non sono protetti da copyright. Ovviamente dovresti stare molto attento / contattare il tuo avvocato se sei in dubbio se ti è permesso di smontare il file exe di qualche programma.

Nota: se stai cercando crepe Delphi, generatori di chiavi o solo numeri di serie: sei nel sito sbagliato. Tieni presente che tutto ciò che trovi qui è scritto / presentato solo a scopo esplorativo / educativo.

Per il momento, Borland non offre alcun prodotto in grado di decompilare un file eseguibile (.exe) o "Delphi compiled unit" (.dcu) al codice sorgente originale (.pas).

Delphi Compiled Unit (DCU)

Quando un progetto Delphi viene compilato o viene eseguito un file di unità compilato (.pas) viene creato. Per impostazione predefinita, la versione compilata di ogni unità è memorizzata in un file in formato binario separato con lo stesso nome del file dell'unità, ma con l'estensione .DCU. Ad esempio unit1.dcu contiene il codice e i dati dichiarati nel file unit1.pas.

Ciò significa che se si dispone di qualcuno, ad esempio, l'origine compilata del componente è sufficiente invertirla e ottenere il codice. Sbagliato. Il formato del file DCU non è documentato (formato proprietario) e può cambiare da versione a versione.

Dopo il compilatore: Delphi Reverse Engineering

Se desideri provare a decompilare un file eseguibile di Delphi, queste sono alcune delle cose che dovresti sapere:

I file sorgente dei programmi Delphi sono generalmente memorizzati in due tipi di file: file di codice ASCII (.pas, .dpr) e file di risorse (.res, .rc, .dfm, .dcr). I file Dfm contengono i dettagli (proprietà) degli oggetti contenuti in un modulo. Quando crea un exe, Delphi copia le informazioni in file .dfm nel file di codice .exe finito. I file di modulo descrivono ogni componente nel modulo, inclusi i valori di tutte le proprietà persistenti. Ogni volta che cambiamo la posizione di un modulo, la didascalia di un pulsante o assegniamo una procedura di evento a un componente, Delphi scrive quelle modifiche in un file DFM (non il codice della procedura di evento - questo è memorizzato nel file pas / dcu). Per ottenere il "dfm" dal file eseguibile, dobbiamo capire quale tipo di risorse sono archiviate all'interno di un eseguibile Win32.