Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET] Disassembly e compilazione Roundtrip

Ciao a tutti.
Dopo anni di vb6, mi sono deciso: proviamo a passare al .NET.
Prima di procedere con l'aggiornamento mi compro il mitico Balena (Visual
basic .net), in quanto già contento del primo libro sul VB6.
Leggo le prime pagine e c'e' una cosa che mi inizia a far girare le
b##le.(non per colpa di Balena ovviamente...)
E' possibile PER CHIUNQUE disassemblare l'eseguibile e portarlo in IL. (tra
parentesi vengono pure mantenuti i nomi originali delle funzioni e delle
variabili aargh..).
Posso inoltre modificare tale file ottenuto e, meraviglia delle meraviglie,
posso ricompilarlo cosi' modificato!!!!!(compilazione roundtrip)
Ciliegina sulla torta? Gli strumenti per disassemblare/ricompilare sono
dentro visual 
studio.net
.
Ma ho letto male?? E' vero? Ma stanno scherzando?
Prima di finire il libro c'e' scritto come proteggere il codice da
operazioni di questo genere??
Qualcuno mi dica che sogno per favore...
Umbe

 variabili aargh..).
Scaricati Reflector (
http://www.aisto.com/roeder/dotnet/
) e provalo su un
exe o dll .Net (poi vai su un metodo e con il tasto desto fai "Disassembly"
e stupisci).
Sinceramente non so se la cosa possa davvero essere considerata negativa.
Io lo uso spesso per capire come funziona un metodo del framework quando la
guida in linea lascia dei dubbi.
Comunque esistono strumenti (obfuscators) per evitare questo.
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

Non è un sogno, ma esiste attualmente il 'codice sicuro'? a giudicare dai
vari siti 'hacking' direi proprio di no...
Esitono comunque dei tool tipo 
http://www.wiseowl.com/products/products.aspx
che rendono la decompilazione praticamente impossibile (o almeno molto
complessa).
Ma a questo punto poniti la domanda: escludendo alcuni casi particolari,
quale percentuale del tuo programma vale la pena proteggere?
HTH
-- 
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - 
http://www.ugidotnet.org
Weblog: 
http://www.ugidotnet.org/710.blog

Qualcuno mi dica che sogno per favore...
Ma allora non vuoi credere a Balena? ;-)
Ciao!


No...no..ci credo!!
Il fatto è che scrive: Se volete essere piu' sicuri, scrivetevi il
componente con i vecchi compilatori ( in pratica consiglia di usare Vb e
Vc++ per scriversi dll sicuri).
Ma allora rimango al vb6.....o no? ;-)
Umbe

 quale percentuale del tuo programma vale la pena proteggere?
Bah, chesso' la gestione di password per esempio...algoritmi di cifratura,
un mio algoritmo che ci ho messo un anno per farlo, cavolacci miei che non
voglio che un niubbo vada a vedere.
Ma avete letto un file IL? E' di una semplicità disarmante....
Provate ad usare decompilatori(es. SoftIce) con eseguibili "standard" e poi
dimmi se è la stessa roba....
Umbe

 dimmi se è la stessa roba....
Ci ho provato una volta quando da niubbo craccavo i programmini, ma dopo 5
minuti mi sono detto "ma chi me lo fa fare di impararmi l'assembly quando se
mi serve un crack ci sono decine di siti che li hanno già belli e pronti?".
Quallo che voglio dire è che il problema della sicurezza è un po' relativo.
Se ne vale la pena il tuo prog te lo "reversano", ma spesso si fa prima solo
a copiarlo.


 e poi dimmi se è la stessa roba....
Se qualcuno ha interesse ha craccarti la password lo fa comunque e comunque
nessuno ti impedisce di gestire la password in una dll nativa e usare .NET
per tutto il resto.


 ormai si trovano anche sui siti di frutta e verdura.
Scusa ma tu distribuisci i sorgenti con i tuoi programmi? Oppure se te li
chiedono te li fai pagare a parte?(ed immagino salati?)
Ti sei mai chiesto il perchè te li fai pagare salati? Perchè il tuo lavoro è
racchiuso proprio nel codice, nei sorgenti.
Lo so' anche io che che si riesce a fare di tutto oggi (copiano, craccano,
sproteggono pure i dongle hardware figurati...), ma addirittura aiutarli in
questo...
Ma, caso strano, dissassemblare Windows chissà perchè è difficile e lo
stesso dicasi per Word, Access od Excel.
Forse Microsoft avrà acquistato un "obfuscator".... ;-))
Umbe

 Umbe
-- 
.A
UGIdotNET - User Group Italiano .NET
http://www.ugidotnet.org
Read my blog at: 
http://www.ugidotnet.org/4.blog

 decompilare con ILDASM.
Una curiosità: Longhorn da quanto ho capito sarà pressochè tutto managed...
Credo sia offuscato.
O no? :)



... pagina 24 del mitico manuale!!!
Ciao, Vincenzo

[UZ = 
circa...@tin.it
 in c9mu9q$sc1$
1...@grillo.cs.interbusiness.it
] ha
scritto:
...
Il mio pensiero: Rendere (involontariamente) i sorgenti liberi, aperti o,
comunque, ottenibili in forma anche parzialmente leggibile/utilizzabile, è
una cagata pazzesca (per chiarezza, volevo dire cagata e pure pazzesca).
Che poi, per questioni tecnologiche, di apertura, di piattaforma o altro è e
può essere un discorso comprensibile, anche se lo posso deglutire come una
formica può ingoiare un elefante in una botta sola. Diciamo con una
leggerissima difficoltà. Un (uno solo) colpo di tosse mi è concesso?

 leggerissima difficoltà. Un (uno solo) colpo di tosse mi è concesso?
Ne aggiungo uno anche io, con in piu' un leggero colpo di tosse pensando ad
un'altra cosa...ma le dimensioni dell'eseguibile/ocx di turno?
Perche' a vedere da quello che il decompilatore ottiene, mi pare di capire
che nell'eseguibile ci siano un sacco di info in piu'.
E se ci sono un sacco di informazioni in piu', sotto forma di commenti, ci
devono essere nell'assembly anche un sacco di jp in piu', visto che i
commenti non sono eseguibili...
E se penso all'aumento di dimensioni, moltiplicato per tutti gli OCX che ho
nel PC...posso darne due, di colpi di tosse?

 nel PC...posso darne due, di colpi di tosse?
Beh, proprio per il fatto che non è compilato, ma è in una sorta di PCode è
molto compatto.
Io ho fatto il porting di una dll scritta in VB6 da 140k, in C# pur avendoci
poi aggiunto molta roba è di 28k, e VB è già famoso per i suoi compilati di
taglia ridotta.


 proteggere?
Un mio programma trasferisce dati in rete fra varie sedi dello stesso
network.
Questi dati sono altamente sensibili e vengono crittati usando AES Rinjdael
con una password camuffata nel codice.
Se ho il compilato VB la password non č visibile (anche perchč faccio varie
operazioni di 'disturbo' in modo tale che sembrino somme sottrazioni e
menate varie).
In .NET sarebbe visibilissima perchč basterebbe seguire ciņ che fa il
codice.
E la sicurezza andrebbe a farsi benedire...
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it

Ma ho letto male?? E' vero? Ma stanno scherzando?
E' stata una nostra specifica richiesta per evitare che su questo ng
vengano più chiesti decompilatori... :-))))

 vengano più chiesti decompilatori... :-))))
ROTFL !
Cmq Pippo esistono anche strumenti M$ e 3°parti che offuscano il codice (
obfuscator e simili ad esempio aiutano un po )
PS: poi tranquillo che siamo gia' all'arrivo di VS2005 , con nuovo FW gia'
integrato in Longhorn... con questo cosa voglio dire ? che devi prima
preoccuparti delle nuove versioni e alle varie differenze cosi non puoi
perdere tempo a offuscare il codice ^_^
-- 
<Gigio2K>
--- 
http://www.g2kweb.it/gigio2k
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 Ciao
ciao
-- 
.A    [Microsoft MVP .NET]


 E la sicurezza andrebbe a farsi benedire...
quello che hai implementato si chiama "backdoor". "Sicurezza" sarebbe 
usare una password/certificato scelto dall'amministratore o generato a 
caso durante l'installazione

 e poi dimmi se è la stessa roba....
usa un vero decompilatore, come IDA Pro, e ne riparliamo

 Ma, caso strano, dissassemblare Windows chissà perchè è difficile
non lo è. Microsoft addirittura lo rende sempre più facile, perchè ha 
numerosi usi perfettamente leciti. I simboli di debug del kernel di 
Windows Server 2003, per esempio, contengono informazioni complete, 
tipi inclusi, anzichè solo i nomi delle funzioni

 caso durante l'installazione
In teoria potrei utilizzarlo come backdoor, però in pratica mi è impossibile
in quanto ogni utente può decidere (mediante una password di gruppo) con chi
comunicare.
Ho anche pensato ad una password immessa direttamente dall'utente, ma ho
avuto alcuni dubbi:
1)Se salvo la pw su un file Access, questa sarà visibile a chiunque usi quel
PC (e non è detto che debba essere per forza l'utente, ma può essere anche
un commesso "scontento" ed "informaticamente istruito")
2)Se non salvo la pw l'utente è costretto ad immetterla ogni volta che vuole
comunicare con il network
Salvando la pw nell'eseguibile invece rendo la vita più difficile ad un
sacco di gente, e comunque un qualunque hacker non potrebbe fare niente in
quanto vi sono anche User e Password del membro del gruppo (scelti
dall'utente) ed inoltre il controllo del MacAddress di ogni singola
postazione che comunica. Se il MacAddress non corrisponde allora il
programma evita di rispondere alle chiamate.
Sicuramente un sistema di sicurezza perfetto non esiste, ma ho notato che
con questo metodo le cose funzionano discretamente.
In futuro implementerò un sistema (che ho già realizzato, ma che voglio
espandere) per eseguire direttamente operazioni sul PC dell'utente (ad
esempio posso fornire assistenza lavorando sul suo pc come se fossi sul
mio).
Beninteso che dovrà essere l'utente (che sarà informato della cosa) a
decidere se darmi l'accesso.
Proprio ieri mi è stato consigliato UltraVNC per eseguire delle operazioni
sul PC di mio padre e sto pensando di includerlo nel cd di installazione. Al
momento del bisogno l'utente lo installa e mi da l'accesso al suo PC. Credo
che questa soluzione possa essere più stabile e testata della mia. Cmq si
vedrà.


 tipi inclusi, anzichč solo i nomi delle funzioni
Cosě finalmente vedremo girare il vostro clone ;)


 Così finalmente vedremo girare il vostro clone ;)
SSSHHHHH! ufficialmente noi NON facciamo nè appoggiamo il reverse 
engineering

...
