Newsgroup: it.comp.dotnet
Titolo: reflector usi e c.

Ciao a tutti,
ho avuto l' occasione di provare reflector pro, in versione di prova e sto 
valutando l'acquisto di una licenza.
la versione di prova mi e servita solo in parte, nel senso che ho avuto 
bisogno di decompilare una dll, per correggere alcuni bug in essa contenuti.
Pensavo che cosi come refletor decompila fosse poi in grado di rigenerare le 
dll, con le correzioni. invece non e cosi, dovrei crearmi una solution  e 
tentare la rigenerazione.cosa che ho provato a fare, ma che mi ha 
determinato nella solution circa 200 errori, probabilmente per la mancanza 
di riferimenti ad assemblies vari e del framework.
ora mi chiedo, come lo usate reflector? me ne consigliate l' acquisto?
vi sono dei plug-in per la versione gratuita che lo rendono piu funzionale 
mettendomi nella condizioni di procastinare l' acqusto?
Grazie in anticipo

 Grazie in anticipo
Marcello Cantelmo
www.cantelmosoftware.com

 mettendomi nella condizioni di procastinare l' acqusto?
yes! entra in google e digita "reflector plugin" ;-)
ok proverògrazie 1000000


 importanti...ehm.... quali sono?
se ho ben capito hai modificato solo alcuni metodi...e non hai molto
tempo per riscrivere tutto! giusto?
Marcello Cantelmo
www.cantelmosoftware.com

 
www.cantelmosoftware.com
Ho visitato il tuo sito e ho letto quanto segue su "Goliath .NET CPU 
Emulator"
"Goliath .NET CPU Emulator" è una libreria (DLL) realizzata 100% in 
VB.NET
 
che in meno di 100 Kb racchiude tutta la potenza del linguaggio Assembly 
x86.
Lo sviluppatore "scrive codice assembly x86" semplicemente utilizzando il 
linguaggio .NET preferito (vb, c#, mc++, delphi, ect.) lasciando al 
compilatore la generazione del normale codice IL.
In breve, un "linguaggio nel linguaggio" in cui è possibile:
realizzare codice possibile SOLO in Linguaggio Assembly;
======
Ma se tale codice è implementabile sono in Assembly come fa poi a tradurlo 
in IL? 

 in IL?
...è una virtual machine (abbastanza impegnativa!) ...non è un
compilatore IL->x86 ...tu scrivi le istruzioni in assembler x86...ed
"io" le eseguo gestendo correttamente l'uso dei registri, carry e
quant altro.
immagina di non saper assolutamente l'assembler x86...ma ti interessa
un determinato algoritmo...lo puoi prendere il codice direttamente da
qualche debugger ida, ollydgb, il vecchio softice, ect. :-o (e, con
alcuni accorgimenti ...solo per l'istruzione "lea" ...ri-codarlo nella
VM).
in un momento di follia stavo anche cercando di recuperare il codice
x86 dopo aver processato l'assembly con ngen...ma è troppo impegnativo
per maggiori delucidazioni guarda i video...scarica pdf, ect.
ciao
Marcello Cantelmo
www.cantelmosoftware.com

 quant altro.
Ma quindi l'applicazione poi dovrà girare per forza su tale VM? 

 importanti...ehm.... quali sono?
se ho ben capito hai modificato solo alcuni metodi...e non hai molto
tempo per riscrivere tutto! giusto?
la mia domanda è in generale, cioè in quali casi può tornare utile, al di la 
del caso in cui mi sono trovato...e se si può:  decompilo assembly - lo 
modifico - ricompilo l assembly con la stessa semplicità con cui l ho 
decompilato....
Marcello Cantelmo
www.cantelmosoftware.com
 

> Ma quindi l'applicazione poi dovr girare per forza su tale VM?
no no...probabilmente mi sono espresso male!
tu referenzi nel tuo progetto solo la mia dll (realizzata 100% in
managed code 
vb.net
). la dll devi considerare come una virtual
cpu...che elabora quello che tu gli passi
immagina questo esempio:
dim a as integer = 2
dim b as integer = 3
a += b ...con risultato 5 ...ma la vuoi riscrivere in assembler x86
(...il progetto era nato come protezione...ed ora, invece, ci puoi
fare quello che vuoi :-D )
usando i registri (32 bit) imposti:
push 2
pop eax
push 3
pop ebx
add eax,ebx
quindi chi "spia" un tuo assembly...e vede questo codice...deve
conoscere l'assembler per capire qualcosa ;-) ...non si ritrova codice
di alto livello ;-)
Marcello Cantelmo
www.cantelmosoftware.com

 decompilato....
uso standard:
- decompili: invece di fare copia-incolla...per velocizzare c'è un
plug-in (filedisassembler: 
http://www.denisbauer.com
)...per salvare su
disco
- porti il codice in vs e ricompili
se invece non vuoi riscrivere tutto...hai bisogno di reflexil, et-
simili...che si agganciano a reflector e ti consentono di modificare
al volo il codice e di salvare. usano questo tool per cr4cc4r3 :-(
quindi dato che l'inserimento non avviene in codice di alto livello
(vb, c#) bensì in assembler IL
- scrivi a parte il codice da iniettare
- lo visualizza in IL...prendi nota
- lo inserisci/modifichi manualmente nel tuo "vecchio" metodo...forse
un pò laborioso :-/
Marcello Cantelmo

 decompilato....
uso standard:
- decompili: invece di fare copia-incolla...per velocizzare c'č un
plug-in (filedisassembler: 
http://www.denisbauer.com
)...per salvare su
disco
- porti il codice in vs e ricompili
se invece non vuoi riscrivere tutto...hai bisogno di reflexil, et-
simili...che si agganciano a reflector e ti consentono di modificare
al volo il codice e di salvare. usano questo tool per cr4cc4r3 :-(
quindi dato che l'inserimento non avviene in codice di alto livello
(vb, c#) bensě in assembler IL
- scrivi a parte il codice da iniettare
- lo visualizza in IL...prendi nota
- lo inserisci/modifichi manualmente nel tuo "vecchio" metodo...forse
un pň laborioso :-/
ok grazie 10000
ho scaricato reflexil e ho provato a caricarlo in reflector ma mi dice 
failed load....
vabbe
grazie ancora
Marcello Cantelmo 

 di alto livello ;-)
Ok 

> Ah, allora si tratta di una funzione in una dll.
...dire una funzione è un pò limitativo! ...sono emulate circa 80
mnemonic x86 (
http://www.cantelmosoftware.com/ita/x86_code.html
)
ciao,
Marcello Cantelmo

 mnemonic x86 (
http://www.cantelmosoftware.com/ita/x86_code.html
)
Si scusa, meglio dire un set di funzioni :)
Colgo l'occasione per farti una domanda dato che ti occupi di 
decompilazione.
Attualmente ci sono decompilatori in grado di creare un sorgente C magari 
con le sole API, partendo da un un file binario privo di ogni informazione 
sul sorgente?
Cioè, il decompilatore anche se non è in grado di  generare il sorgente 
originale, è in grado di generarne uno equivalente abbastanza leggibile (per 
chi conosce il C e le API)?

 grazie ancora
ciao,
Marcello Cantelmo

 chi conosce il C e le API)?
...che se è stato compilato in codice nativo...la qualità del codice
"estrapolato"...lascia il tempo che trova...perchè alla fine hai a che
fare con locazioni di memoria...insomma tutta un'altra storia rispetto
agli attuali decompilatori
faccio prima a disassemblare...e riscrivere in un..."cpu
emulator"...ogni particolare riferimento a componenti è puramente
casuale! :-D
Marcello Cantelmo
www.cantelmosoftware.com

 casuale! :-D
Ma devi comunque lavorare in assembly. 

 Ma devi comunque lavorare in assembly.
certo! ...ecco perchè attualmente la situazione è più
complicata...cioè ora recuperi il codice (alto livello) simile o
addirittura uguale all'originale :-(
ciao
Marcello Cantelmo
www.cantelmosoftware.com

 failed load....
se c'è un problema...prova anche a risolverlo :-) ...
si scusami...
- scarica i sorgenti della 1.x (
http://sourceforge.net/projects/
reflexil/);
- lo apri in vs
- referenzi il "nuovo" exe di reflector ;-) ...dato che a partire dal
fw 2.x ...è possibile referenziare un .exe come se fosse una
dll!!!  :-/
grazie 1000
