|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2008
Messaggi: 1271
|
Codice offuscato
Sono venuto a conoscenza del codice offuscato, purtroppo non trovo molte informazioni in rete e ho deciso di chiedere spiegazioni a voi.
So che si tratta di codice tipicamente scritto in C, allo scopo di confondere il lettore. So che esiste anche del codice Assembly offuscato. Quello che mi chiedo è in cosa consista l'offuscamento del codice; mi spiego, si tratta di scrivere il codice utile in maniera da renderne difficile l'interpretazione, o si tratta di scrivere porzioni non strettamente utili di codice insieme al codice utile in modo da renderne difficile la lettura? A cosa serve offuscare il codice? Eseguendo il reverse engineering di un binario ottenuto dalla compilazione di codice offuscato, si ottiene codice offuscato? Se no, dov'è il vantaggio dell'offuscamento del codice?
__________________
MacBook 6,1|2,26 Ghz C2D|2GB 1067 Mhz DDR3|GeForce 9400M|Mac OSX 10.6.2 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Succede principalmente per due motivi. Il primo è che si fanno delle gare per vedere chi riesce a tirare fuori programmi funzionanti aventi codice offuscato in modo "bello" (tipo che vengono fuori disegni, simmetrie o robe simili).
Il secondo motivo è che a volte i programmatori sono talmente scarsi nello scrivere codice, che gli viene fuori offuscato in maniera naturale. E questo dipende molto anche dal linguaggio di programmazione. Il C ti può portare a scrivere codice così compatto che diviene poco o per nulla leggibile. Poi ci sono linguaggi come Perl che sono naturalmente illeggibili.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 307
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
offuscare il codice nel senso piu comune dell'espressione non ha la benché minima utilitá pratica, serve solo in quei contest particolarissimi a cui ha fatto riferimento cdimauro.
esistono tuttavia alcune forme di offuscamento che hanno degli scopi di security by obscurity; ne conosco un paio. la prima si fa a livello di codice macchina (non di assembly) ed é attuabile solamente con le architetture Intel o in generale con tutte le architetture che non hanno una dimensione prefissata per le istruzioni (per esempio non é attuabile coi PowerPC); consiste nell'introdurre all'interno del codice macchina dei bytes "a cavolo" che disallineano tutto il codice seguente facendo capire ad un eventuale disassemblatore istruzioni completamente diverse; il motivo per cui invece la CPU esegue le istruzioni giuste é che c'é un JMP relativo che salta al byte giusto. naturalmente un hacker armato di tanta pazienza, dopo aver perso una marea di ore a capire istruzioni totalmente insensate, puó comunque notare quel JMP e quei bytes inutili e capire l'inghippo l'altra forma di offuscamento, se cosi vogliamo chiamarla, con l'obiettivo della security by obscurity consiste nello scrivere algoritmi di protezione in Brainfuck o qualche altro linguaggio esoterico del genere a scrivere un interprete di Brainfuck ci vogliono 30 minuti scarsi, a scrivere uno script in Brainfuck da includere nel programma finale ci vuole un po' di piu e per scrivere un altro programma che complica volutamente un programma Brainfuck esistente l'unico limite é la propria fantasia ![]() il risultato é potenzialmente qualche decina di KB di codice Brainfuck che magari il programma finale esegue in pochi secondi, peró se l'hacker é veramente costretto a rompere quell'algoritmo puó dichiarare la resa
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2008
Messaggi: 1242
|
Io ho sempre saputo che l'offuscamento del codice è una tecnica utilizzata per applicazioni java.
Infatti tale linguaggio viene compilato in uno pseudocodice che consente tramite reverse engineering di riprodurre in modo abbastanza semplice i sorgenti nativi, e questo può non essere gradito. Per i linguaggi compilati in codice macchina il reverse engineering non è così semplice, mi pare. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
tra l'altro alcuni offuscatori di bytecode non si limitano all'offuscamento ma cercano anche di ottimizzare il codice ed eliminare parti non necessarie. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2008
Messaggi: 1271
|
Grazie per le risposte, mi avete chiarito i dubbi
Per quanto riguarda il brainfuck, avendo visto qualche pezzo di codice, ho immaginato fin da subito che si sarebbe potuto usare per scrivere codice relativamente sicuro dal punto di vista della leggibilità ![]() Trovo molto ingegnoso l'offuscamento del linguaggio macchina, credo riesca a scoraggiare quasi tutti i tentativi di hacking. Ho dato un'occhiata la link riguardante i conteste sono rimasto così In conclusione, sarà anche inutile, ma sicuramente è molto curiosa quest'attività
__________________
MacBook 6,1|2,26 Ghz C2D|2GB 1067 Mhz DDR3|GeForce 9400M|Mac OSX 10.6.2 |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
In .NET è praticamente obbligatorio, pena la divulgazione totale dei sorgenti di un programma. Reflector non perdona. E ci sono casi in cui viene fatto anche in C++, ad esempio se dai ad un cliente i "sorgenti" per ricompilarsi una libreria, se glieli passassi in chiaro è inutile. A volte poi ci sono clienti che non pagano per i sorgenti ma che ne hanno bisogno per le certificazioni, ecco che gli dai il contentino e gli giri i codici offuscati (senza soluzione, nè dipendenze), ovvero un pò di file di testo del tutto inutilizzabili. |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2008
Messaggi: 1271
|
questo ovviamente è relativo, perché a quanto ho capito, per quanto difficile è sempre possibile risalire al codice sorgente
__________________
MacBook 6,1|2,26 Ghz C2D|2GB 1067 Mhz DDR3|GeForce 9400M|Mac OSX 10.6.2 |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
il codice sorgente offuscato é codice sorgente, non c'é nulla a cui risalire. piuttosto si puó dire che la sua comprensione e l'eventuale riuso/abuso di proprietá intellettuale puó richiedere risorse temporali molto piu elevate.
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Idem.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Guarda che per offuscare l'IL vengono prima offuscati i sorgenti e poi compilati, per generare un IL incomprensibile se guardato con Reflector o similari.
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Lo si può fare anche soltanto a livello di IL.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Sep 2008
Messaggi: 1271
|
Quote:
__________________
MacBook 6,1|2,26 Ghz C2D|2GB 1067 Mhz DDR3|GeForce 9400M|Mac OSX 10.6.2 |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Si ma .Net lo fa da sorgente in su
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Se non erro ci sono dei tool di offuscamento del bytecode per Java che ne tengono conto. Per l'IL penso si possa realizzare qualcosa di simile.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Ma qui si parla di .NET...
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:14.




















