Newsgroup: it.comp.sicurezza.varie
Titolo: Ottenere il sorgente da un .class e da un .exe

Ciao a tutti,
vorrei capire un po' meglio, se č possibile ottenere il codice sorgente di
un programma scritto per esempio in C a partire dal suo eseguibile.
La stessa cosa per un file .class o per un file prodotto con tecnologia .NET
Vorrei capire come si fa e quanto č difficile in questi 3 casi.
Ringrazio tutti antecipatamente.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 suo eseguibile. 
i programmi scritti in C non sono scomponibili nel loro codice 
sorgente originale. Si può però scomporli in codice ASM. Il discorso 
era diverso ad esempio per i programmi in CLipper che erano 
eseguibili in P-Code e questo permetteva con alcuni programmi di 
ricavarne il codice sorgente originale.
-- 
Ciao, Dmitry
Posted from X-Privat Free NNTP server - 
www.x-privat.org

 questi 3 casi. Ringrazio tutti antecipatamente.
non conosco dotnet, ma immagino valga lo stesso ragionamento di cui
sopra (se si tratta di un linguaggio compilato o semicompilato e non un
interpretato come i linguaggi di scripting, come perl o quant'altro).
-- 
*    HappyCactus - Linux User #209744 - BOFH Certified Engineer    *
*           27/11/2003 Rilaciata la prima relase di qixl!          *
*    
http://sourceforge.net/projects/qixl
 : una gui per iSiloXC    *
*  
www.google.com
 / 
groups.google.com
 : cercare prima di chiedere  *

 quant'altro).
E' un precompilato in un bytecode - pardon, IL - che dovrebbe
sostanzialmente essere un assembly ad oggetti per una virtual machine; puo'
essere compilato una volta per ogni frammento in modalita' JIT alla prima
esecuzione (ogni volta che chiami una funzione viene verificato che sia
stata compilata: se si' viene eseguito il codice copilato, altrimenti viene
compilata JIT, salvata e lanciata), oppure in un botto unico
all'installazione; in entrambe i casi il prodotto finale e' un codice
macchina nativo per la piattaforma bersaglio.
La decompilazione dovrebbe essere tra il difficile e l'impossibile, secondo
la quantita' di informazioni di debug incluse.
Ciaotutti,
*

 secondo la quantita' di informazioni di debug incluse.
E' un linguaggio a livello molto alto, a quanto vedo (oggetti?). Diciamo
che dovrebbe essere, a occhio, decompilabile al massimo quanto java.
Sempre che abbia senso fare una scala del genere...


 quanto java. Sempre che abbia senso fare una scala del genere...
Probabilmente e' anche offuscato in qualche modo, comunque... Proprio per
evitare la decompilazione.
Ciaotutti,
*
[1]
http://bianc038.speed.planet.nl/cgibin/commenti.pl?doc=commenti/cche&title=
'
C'+che? (nota che il punto di domanda e' parte del link) e
http://bianc038.speed.planet.nl/cgibin/commenti.pl?doc=commenti/xp&title=Bre
ve+storia+della+programmazione+in+Windows

 la quantita' di informazioni di debug incluse.
E' un po' che non me ne interesso, quindi le mie informazioni
sono sicuramente datate, ma qui metterei un bel:
s/difficile/banale
s/impossibile/facile
hint: "Salamander".
Certo, la qualità del sorgente ricreato dipende dalla bontà
dell'obfuscator utilizzato, e -mi dicono- dalla qualità del codice
di partenza. :-P
Astericchio, quanto tempo è che non vai su ICLV-B ? ;-)
Bye, G.


beh, si', e' vero... sto or ora mettendo le mani su una routine "di
qualita'" e in effetti il codice e', come dire... offuscato di natura.
che gli venga...
-- 
Seti@Home Java Applets
http://maruko.webhop.net/


Uno sfracello :)
Anche perche' ultimamente lavoro pochissimo con VB, sono molto su linux e su
WCE/eVC...
Ciaotutti,
*

 decompilabile?
La decompilazione e` ovviamente piu` semplice qualora ci fossero le info
di debug, ma per i .class di Java e` da tempo che esistono decompilatori
in grado di ricorstruire il codice sorgente quasi identico all'originale
(mancano solo i commenti!!!) senza grossi problemi.
Il problema fondamentale e` che la complessita` dell'asm per la vm di Java
non e` paragonabile a quella di una cpu odierna senza contare che i
compilatori C sono in grado di fare delle ottimizzazioni spinte
riorganizzando il codice asm finale, cosa che javac non fa, per cui il
mapping operazione - sequenza di op codes e quasi 1:1!
Quando si e` in presenza di codice offuscato o "ottimizzato" in certi modi
il decompilatore (penso a Jad) cerca di inserire dello pseudocodice per
permettere la ricostruzione manuale in un secondo tempo. L'unica cosa che
spesso rimane "sporca" sono le costanti definite tramite una qualsiasi
interfaccia che vengono espanse dal compilatore (si perde il riferimento
del valore con la costante e bisogna controllare a mano caso per caso).
Ciao,
Marco
-- 
//\/\ Marco (LM) Lamberto (
marcol...@despammed.com
)
      SIForge.org     -  
http://www.siforge.org/
      The Sunny Spot  -  
http://the.sunnyspot.org/

 Comunque, in realta', il concetto di VM nasce molto prima di Java
IBM S/38?

 VM/370, se ho capito cosa intendi ;)
Il VM dell'IBM permette di far girare più sistemi operativi (VSE, MVS, 
ora Z-OS, linux) o più istanze dello stesso sistema operativo sulla 
stessa macchina, mi sembra sia più calzante il paragone con vmware 
(anche se con alcuni distinguo, credo) che con java.

 Il VM dell'IBM permette di far girare più sistemi operativi
hai ragione, ma il VM ha anche un suo ambiente di sviluppo che
assomiglia ad un pc/dos (ok ok giudizio anni 84/85 ;)); linea comando,
ambienti isolati per utente
io sviluppai qualcosina, ma non sapevo, e prendo per buono whiplash, che
fosse un bytecode