PDA

View Full Version : [TURBO C] Decompilatore


ASSTO
10-04-2010, 12:04
Devo assolutamente riuscire a decompilare un vecchio programma in turbo c, qualcuno conosce un decompilatore? Non mi interessa ottenere un codice perfetto: questo programma gestiva uno strumento e l'unica cosa che mi interessa recuperare sono i segnali che il software inviava alla macchina per comandarla...

ASSTO
11-04-2010, 11:24
Nessuno?

Teo@Unix
11-04-2010, 20:12
Devi fare del reverse allora...

io credo tu possa usare qualsiasi disassemblatore. Dato che siamo su windows io ti consiglio IDA.

Poi trovare quel che ti serve sapere può essere più o meno difficile a seconda di quanto tu sai già a proposito di questi "segnali". Come si interfacciava il software?

zakmckraken
12-04-2010, 08:32
Saro'pazzo ma...oscilloscopio con memoria?

Teo@Unix
12-04-2010, 08:51
bè ok questo per capire quando il programma manda un dato al dispositivo...

Però mi pare di capire, che ASSTO voglia sapere come il software era stato realizzato a livello di programmazione...

a meno che con "segnali" non era inteso propio il segnale elettrico... però ha parlato di ottenere codice...

ASSTO
12-04-2010, 09:57
Lo strumento è collegato ad un pannello che lo gestisce, il quale è collegato a sua volta (attraverso la porta seriale) ad un vecchio pc con su il DOS 5,0.

Il programma suppongo invii delle stringhe al pannello di gestione che poi pensa alla gestione dello strumento, a me interessa ottenere quelle stringhe per poi creare un programma che mi permetta di utilizzare lo strumento su un pc più recente...

Sono tutte supposizioni in quanto la ditta da cui abbiamo acquistato lo strumento è fallita e sul manuale non c'è scritto nulla relativamente al comando via pc...

tomminno
12-04-2010, 12:21
Lo strumento è collegato ad un pannello che lo gestisce, il quale è collegato a sua volta (attraverso la porta seriale) ad un vecchio pc con su il DOS 5,0.

Il programma suppongo invii delle stringhe al pannello di gestione che poi pensa alla gestione dello strumento, a me interessa ottenere quelle stringhe per poi creare un programma che mi permetta di utilizzare lo strumento su un pc più recente...

Sono tutte supposizioni in quanto la ditta da cui abbiamo acquistato lo strumento è fallita e sul manuale non c'è scritto nulla relativamente al comando via pc...

Se la comunicazione avviene via seriale non puoi metterti a sniffare la connessione? Ricordo di averlo fatto qualche anno fa con un apposito adattatore, poi con un programmino banale registravo tutto su un altro computer.

Altrimenti se il software gira su windows potresti sempre provare a sniffare le api di windows tramite SpyStudio, ma essendo il programma per dos non so che risultati potresti ottenere.

Teo@Unix
13-04-2010, 22:18
Se la comunicazione avviene via seriale non puoi metterti a sniffare la connessione? Ricordo di averlo fatto qualche anno fa con un apposito adattatore, poi con un programmino banale registravo tutto su un altro computer.


Sinceramente non lo ho mai fatto, ma credo proprio si possa fare.

ASSTO
13-04-2010, 23:04
Si potrebbe provare...

Nel frattempo ho tentato la via di IDA, ci sto lavorando su anche se finora non sono riuscito ad ottenere granchè...

ASSTO
13-04-2010, 23:24
Una domanda: una volta disassemblato il programma con IDA, esiste una maniera per ottenere qualcosa di comprensibile all'italiano medio? Mi basterebbe anche qualcosa in C, visto che l'assembler praticamente è arabo per me!

Teo@Unix
14-04-2010, 08:25
bè fare reverse è piuttosto complicato, più dell'assembly stesso perchè non si hanno riferimenti quali etichette nomi di funzioni ecc.. tutto è sostituito da indirizzi di memoria virtuali.

E IDA è anche uno di quei software che ti vengono piuttosto incontro ricostruendoti il flusso del programma e dandoti qualche riferimento in più.

Il massimo che puoi fare è forse procedendo così, (ma rimane comunque un lavoro che richiede tempo e pazienza)

Avvi il tuo programma e ti fermi prima che questo inizi a comunicare (se è possibile, altrimenti fa nulla)

Apri IDA e da menù debugger scegli "attach", vai a cercarti il processo del tuo programma e lo esegui per step. In questo modo vedi cosa fa al momento dell'invio dei dati.
Rimane pur sempre una cosa complicata perchè lo vedrai a livello di codice macchina.

Se vuoi qualcosa in C IDA non è d'aiuto purtroppo. Non è possibile riottenere il codice C da un compilato.
Una volta avevo trovato un programma che tentava la ricostruzione del codice C partendo da un assembly; se lo trovo vedo cosa si può fare abbinandolo a IDA.

Cmq se vuoi solamente sapere cosa viene inviato, rimane da provare a intercettare i dati che passano sulla seriale, anche se non avendolo mai fatto non so dirti ora come fare.

banryu79
14-04-2010, 12:29
Ma... se quello che a ASSTO interessa non è come il vecchio software genera le stringhe-comando inviate sulla seriale ma quali stringhe-comando e con che ordine/logica vengano inviate penso ci si metta meno a fare come a suggerito tomminno.
Purtroppo non avendo mai provato a sniffare una connessione seriale non saprei cosa suggerire.

tomminno
14-04-2010, 13:05
Ma... se quello che a ASSTO interessa non è come il vecchio software genera le stringhe-comando inviate sulla seriale ma quali stringhe-comando e con che ordine/logica vengano inviate penso ci si metta meno a fare come a suggerito tomminno.
Purtroppo non avendo mai provato a sniffare una connessione seriale non saprei cosa suggerire.

Lo sniffing di una seriale è molto semplice, dove lavorarvo prima avevamo diversi adattatori chiamati in gergo "saponette", le versioni più semplici si limitano a mostrare tramite led il passaggio dei dati, altre avevano una terza uscita dove potevi attaccare la seriale per lo sniffing del traffico, l'unica cosa da fare era scoprire i parametri del collegamento in corso, che nella quasi totalità dei casi significa trovare la velocità di comunicazione.

Certamente tutto molto più semplice di un reverse engineering su un software dos.

Alla fine si può anche fare in casa, lo schema dovrebbe essere questo:
http://www.lammertbies.nl/picture/en_db9_monitor.png

banryu79
14-04-2010, 14:45
@tomminno: fantastico il sito cha hai segnalato, grazie mille! :)