Salve,
so che la domanda che sto per fare scatenerà l'ira per chi usa Software Libero. Dove lavoro mi hanno chiesto di trovare un modo di impedire il reverse engineering, nei limiti del possibile, o comunque di renderlo difficile. Il software è scritto in C/C++. Esiste qualche strumento che si affianca al gcc per nascondere il nascondibile?
gcc, C/C++ e reverse engineering
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- phobos3576
- Staff

- Messaggi: 2980
- Iscritto il: dom 17 apr 2005, 0:00
- Slackware: 13.1
- Kernel: 2.6.37-smp
- Desktop: KDE 4.5.3
Re: gcc, C/C++ e reverse engineering
Il reverse engineering viene fatto necessariamente con appositi programmi chiamati "disassemblatori" (come NDISASM) o anche con i debugger (come GDB) usati come "disassemblatori"; visto che il sorgente, scritto in qualsiasi linguaggio, deve essere in ogni caso convertito in codice macchina, è sempre possibile visualizzare tale codice macchina sotto forma di listato assembly.
Per evitare questo lavoro di disassemblaggio, in passato (quando mi dilettavo con queste cose) si inseriva nei propri programmi apposito codice che mandava in tilt i debugger; ciò è possibile in quanto il debugger usa determinati servizi di sistema per svolgere il proprio lavoro. Il codice "di guardia" inserito nel proprio programma ha il compito allora di intercettare queste particolari chiamate di sistema reindirizzando tutto verso un'altra porzione di codice che, generalmente, manda in crash il programma stesso.
Ai tempi del DOS questa tecnica era facile da applicare in quanto i programmi accedevano al SO attraverso gli interrupt (con l'istruzione INT); in particolare, i debugger usavano appositi interrupt a loro dedicati. Bastava allora inserire nel proprio programma il codice necessario per accorgersi di quelle chiamate di interrupt, e il gioco era fatto.
In ambiente Linux la situazione è molto simile in quanto le chiamate di sistema non sono altro che chiamate ad appositi interrupt; in ambiente Windows, invece, si ricorre ad apposite "funzioni di sistema".
In definitiva, bisogna studiarsi per bene il funzionamento dei disassembler sotto i vari SO per sapere come intervenire; in ogni caso, questo è uno di quei campi dove la conoscenza dell'assembly è d'obbligo.
Per evitare questo lavoro di disassemblaggio, in passato (quando mi dilettavo con queste cose) si inseriva nei propri programmi apposito codice che mandava in tilt i debugger; ciò è possibile in quanto il debugger usa determinati servizi di sistema per svolgere il proprio lavoro. Il codice "di guardia" inserito nel proprio programma ha il compito allora di intercettare queste particolari chiamate di sistema reindirizzando tutto verso un'altra porzione di codice che, generalmente, manda in crash il programma stesso.
Ai tempi del DOS questa tecnica era facile da applicare in quanto i programmi accedevano al SO attraverso gli interrupt (con l'istruzione INT); in particolare, i debugger usavano appositi interrupt a loro dedicati. Bastava allora inserire nel proprio programma il codice necessario per accorgersi di quelle chiamate di interrupt, e il gioco era fatto.
In ambiente Linux la situazione è molto simile in quanto le chiamate di sistema non sono altro che chiamate ad appositi interrupt; in ambiente Windows, invece, si ricorre ad apposite "funzioni di sistema".
In definitiva, bisogna studiarsi per bene il funzionamento dei disassembler sotto i vari SO per sapere come intervenire; in ogni caso, questo è uno di quei campi dove la conoscenza dell'assembly è d'obbligo.
