C# [DOMANDA]documentazione LZO .NET e decompressione del file compresso senza salvare

Stato
Discussione chiusa ad ulteriori risposte.

DarkNightWarrior

Utente Silver
15 Dicembre 2008
58
5
0
68
Salve geni dell'informatica,
come da titolo volevo chiedere delle cose:
1 - Esiste una documentazione piu dettagliata per la libreria LZO .NET??
2 - Una volta creato il file compresso (o con le dll LZO o con le dll GZIP) è possibile decomprimere il file e usare i file decompressi senza salvare su disco rigido??

Se non sono stato chiaro su qualcosa chiedemi pure..

Se qualcuno sa rispondermi li dico GRAZIE IN ANTICIPO!!!!!

P.S.: il linguaggio che uso è C#
 
Salve geni dell'informatica,
come da titolo volevo chiedere delle cose:
1 - Esiste una documentazione piu dettagliata per la libreria LZO .NET??
2 - Una volta creato il file compresso (o con le dll LZO o con le dll GZIP) è possibile decomprimere il file e usare i file decompressi senza salvare su disco rigido??

Se non sono stato chiaro su qualcosa chiedemi pure..

Se qualcuno sa rispondermi li dico GRAZIE IN ANTICIPO!!!!!

P.S.: il linguaggio che uso è C#
1- Non è una libreria molto complessa. Comunque, un po' di documentazione con Google la trovi, oppure puoi reflectare la libreria per vedere le sue classi e i suoi metodi.
2- In teoria sì, ma non credo che puoi farlo con librerie che trovi sul web come LZO .NET. Devi riscriverti l'algoritmo di decompressione da solo. A questo punto, con il tuo algoritmo, invece di andare a salvare l'output su disco, salvi in un'area di memoria RAM e li leggi (se sono file testo, dati, multimediali, ecc.) o li esegui (se sono eseguibili. Un buon modo per lanciare un PE è utilizzare il RunPE per emulare il lavoro del loader di Windows).
 
ok grazie SpeedJack. Prima non sapevo cos'era RunPE e mi sono informato, sempre grazie a te e predator o come se chiama XD (scusami per la memoria corta XD) ora mi sto vedendo un po il suo codice per capire come funziona perchè non ho mai provato a fare na cosa del genere... comunque perchè non si può con le librerie di LZO .NET?? Metin sbaglio o usa quelle librerie??
 
Non so che usa Metin. L'unica cosa che so di metin è che per criptare, qualsiasi cosa sia, usa XTEA con una chiave dinamica a 128 bit che cambia ad ogni avvio del client :D Poi per il resto, ormai non ricordo neanche come si gioca a metin LOL.
Comunque, il motivo è semplice: non è possibile perché quelle librerie prevedono che la decompressione avvenga da file a file (quindi tutto su Hard Disk) e non hanno (solitamente) metodi che permettono di salvare i dati scompattati direttamente in memoria. Comunque non hai bisogno di fare niente di difficile: reflecti la libreria, la riscrivi basandoti sul codice reflectato, e dove vengono salvati i dati su disco fisso modifichi il codice affinché lasci i dati in memoria. Passi infine a chi ha chiamato il metodo (come valore di ritorno) un array di byte (o un puntatore all'area di memoria) che contiene i dati scompattati.
Per il RunPE, è difficile che capisci come funziona se non hai idea di come è strutturato il formato Portable Executable e come funziona un processo e il loader di Windows. Sostanzialmente il codice di predator ha un PE nelle risorse (se è in memoria non cambia nulla), legge le signature MZ e PE (per controllare che il file sia un PE valido...all'inizio della procedura RunExe dovresti trovare degli If che confrontano degli offset sul file con i valori esadecimali ASCII delle stringhe 'MZ' e 'PE'...bene, questo è il punto di quel controllo), poi crea un processo e subito lo sospende, modifica i context (sostanzialmente, modifica i registri della CPU con i valori contenuti nell'header del PE (EntryPoint del programma, puntatore al blocco dati, ecc.) in modo tale che la CPU possa eseguire correttamente il programma), poi se non ricordo male scrive le varie sezioni (codice, ecc.) nel processo (impostando anche permessi di accesso (lettura, scrittura, esecuzione) alle varie sezioni), finisce di sistemare i context, e avvia il processo (era sospeso, lo toglie dalla sospensione...in questo modo l'esecuzione comincia).
Comunque, nota bene che il metodo rilasciato da predator è lo stesso che viene utilizzato da molti virus per nascondersi ai controlli degli AV e dell'OS. Gli AV recenti, rilevano questo codice e impediscono l'esecuzione. Quindi se implementi questo codice in un tuo programma, molti utenti avranno problemi con l'antivirus che gli segnalerà il programma come virus. Sul web non si trova una versione undetected di questo codice (per fortuna...essendo molto pericoloso visto che permette il salto di tutti i controlli). Quindi se vuoi averlo undetected devi scrivertelo da solo :)
 
BENE allora non c'ho capito niente del runPE XD pensavo di averlo capito usando il motodo RunExe() e invece no ._. infatti il mio kaspesky me lo segnalava ._. lol bene quindi solo usando RunPe è fattibile avviare e utilizzare i file in memoria?? comunque se creo una matrice invece di un vettore?? così il primo indice indica la numerazione dei file e il secondo i byte del file o no? Cioè io LZO non l'ho ancora utilizzato ma ho utilizzato GZIP e lo permette di salvare su un arrey
 
Matrici, vettori... La memoria la organizzi come vuoi e come ti torna meglio.
Per GZIP se permette di salvare su array va bene.
Per il RunPE, il metodo RunExe contiene tutto il codice che sopra ti ho spiegato (il metodo RunExe è definito nel modulo rilasciato da Predator). Sì è vero, è sufficiente chiamarlo per eseguire direttamente in memoria un PE, però quel codice è detected. Se vuoi evitare problemi con gli antivirus, hai bisogno di capire come funziona quel codice e riscriverlo in modo tale che l'antivirus non lo riconosca come nocivo.
 
si gzip se non ricordo male lo permette tranquillamente...
si l'ho visto il file di Predator... vabbè allora vedro come fare per il PE...
senti e per la compressione mi consigli LZO oppure GZIP cioè dovrei fare un game quindi dovrei creare na specie di quei file epk/eix...ma non so come comprimere se comprimerli con LZO o GZIP che mi consigli? LZO vero?
 
Perfetto grazie mille speadjack.
Ora altri due domande e ho finito:
1 - come si reflette una libreria?? (non l'ho mai fatto so solo che posso leggere i medoti bla bla bla, e al massimo dissassemblarlo .-.)
2 - hai qualche guida (preferibilmente creata da te perchè sei un mito a spiegare le cose XD se non ne hai di tue anche di altre) sulla pratica e teoria del PE???
 
1 - come si reflette una libreria?? (non l'ho mai fatto so solo che posso leggere i medoti bla bla bla, e al massimo dissassemblarlo .-.)
Disassemblare significa portare il linguaggio macchina a codice Assembly. Le applicazioni .NET non possono essere disassemblate perché il sorgente viene tradotto in linguaggio MSIL e non ASM. Quindi si parla di reflection. Le classi e i metodi utili per reflectare qualcosa sono contenuti nel namespace System.Reflection. Info sulla reflection le puoi trovare qui: Totem's Lair: .NET and beyond! Non hai bisogno di scriverti da solo codici per reflectare, Reflector .NET è un tool utilissimo a questo che puoi trovare sul web.
2 - hai qualche guida (preferibilmente creata da te perchè sei un mito a spiegare le cose XD se non ne hai di tue anche di altre) sulla pratica e teoria del PE???
Iczelion's Win32 Assembly Homepage
Qui trovi i tutorial sul formato PE (a destra). Sono i tut di Iczelion quindi ottimi :)
Ti è certamente però difficile comprendere quella guida se prima non conosci l'assembly. Per l'assembly, è ottima questa: Ra.M. Software Home Page (parti da ASM base (MASM) poi ASM avanzato poi Win32 ASM).
Iczelion è in inglese. La guida all'ASM è in italiano.
 
COME POSSO FARTI SANTO?? XD
:\
Comunque, ora anche gli autori dei propri topic possono chiuderli...puoi chiuderlo anche tu.
Ora comunque non si chiude più per problema risolto.

P.S.: Oltre ai tutorial di Iczelion, c'è anche la documentazione ufficiale di microsoft (per il PE). Puoi trovarla con Google su microsoft.com. Cerca per "Portable Executable File Format Specifications".
 
Stato
Discussione chiusa ad ulteriori risposte.