Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: [email protected] Italian blog: ...
-
Upload
croccifixio-repetto -
Category
Documents
-
view
215 -
download
1
Transcript of Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: [email protected] Italian blog: ...
www.devleap.itwww.devleap.it
Marco RussoMarco RussoMCSD MCAD MCSE+I MCSA MCDBA MCTMCSD MCAD MCSE+I MCSA MCDBA MCT
Mail: [email protected]: [email protected] blog: http://blogs.devleap.com/marco.blogItalian blog: http://blogs.devleap.com/marco.blog
.NET: ambiente di .NET: ambiente di esecuzioneesecuzione
www.devleap.it
Chi siamoChi siamo• www.DevLeap.itwww.DevLeap.it• Un gruppo di 5 persone con tanta voglia Un gruppo di 5 persone con tanta voglia
didi• Studiare a fondo le tecnologieStudiare a fondo le tecnologie• Capire il “behind the scenes”Capire il “behind the scenes”• Implementare soluzioni realiImplementare soluzioni reali• Confrontarsi con le problematiche realiConfrontarsi con le problematiche reali• Sperimentare nuove ideeSperimentare nuove idee
• Facciamo Corsi, Conferenze, TrainingFacciamo Corsi, Conferenze, Training• Scriviamo libriScriviamo libri
• http://www.devleap.it/fullcontacthttp://www.devleap.it/fullcontact
www.devleap.it
Chi siete ?Chi siete ?• Chi conosce Java?Chi conosce Java?• Chi conosce Visual Basic?Chi conosce Visual Basic?• Chi conosce C++?Chi conosce C++?• Chi conosce COM?Chi conosce COM?• Chi conosce C#?Chi conosce C#?• Chi conosce VB.NET?Chi conosce VB.NET?
www.devleap.it
AgendaAgenda• Ambiente di esecuzioneAmbiente di esecuzione• Codice IL e codice nativoCodice IL e codice nativo
• MSILMSIL• JITJIT• NGENNGEN
• Ruolo dei metadatiRuolo dei metadati• Verifica (PEVERIFY)Verifica (PEVERIFY)• Runtime hostRuntime host• DecompilazioneDecompilazione
www.devleap.it
Cosa è .NETCosa è .NET• È un ambiente di esecuzioneÈ un ambiente di esecuzione
(runtime environment)(runtime environment)• Semplifica lo sviluppo e il deploymentSemplifica lo sviluppo e il deployment• Aumenta l’affidabilità del codiceAumenta l’affidabilità del codice• È completamente indipendente da COMÈ completamente indipendente da COM• È fortemente integrato con COMÈ fortemente integrato con COM• Unifica il modello di programmazioneUnifica il modello di programmazione
www.devleap.it
Ambiente di esecuzioneAmbiente di esecuzione• Concetti chiave:Concetti chiave:
• MSIL: Microsoft Intermediate LanguageMSIL: Microsoft Intermediate Language• CLR: Common Language RuntimeCLR: Common Language Runtime• CTS: Common Type SystemCTS: Common Type System• CLS: Common Language SpecificationCLS: Common Language Specification
www.devleap.it
Codice interpretatoCodice interpretato
Interprete OutputSorgenti
www.devleap.it
Codice nativoCodice nativo
Codicenativo(.EXE)
Output
CompilatoreSorgenti
www.devleap.it
Codice MSILCodice MSIL
Codicenativo
OutputCompilatoreJIT
CodiceMSIL
(Assembly).EXE/.DLL
Compilatore.NET
Sorgenti
www.devleap.it
Codice MSILCodice MSIL
Codicenativo
Output
Sorgenti
CompilatoreJIT
CodiceMSIL
(Assembly).EXE/.DLL
Compilatore.NET
Codice + metadati
www.devleap.it
Codice MSILCodice MSIL
Codicenativo
OutputCompilatoreJIT
CodiceMSIL
(Assembly).EXE/.DLL
Compilatore.NET
SorgentiAmbiente di esecuzione
.NET Runtime
www.devleap.it
Motori JITMotori JIT• Inizialmente previsti 4 motori:Inizialmente previsti 4 motori:
MotoreMotore DescrizioneDescrizione Dove si trovaDove si trova
JITJIT Attuale Attuale implementazioneimplementazione
OptiJitOptiJit Codice più ottimizzatoCodice più ottimizzato Non implementatoNon implementato
FastJitFastJit Esecuzione JIT più veloceEsecuzione JIT più veloce .NET Compact .NET Compact FrameworkFramework
Native Native (Pre-Jit)(Pre-Jit)
Compilazione preventiva, Compilazione preventiva, assembly compilato salvato in assembly compilato salvato in GACGAC
NGEN.EXENGEN.EXE
www.devleap.it
Uso di NGENUso di NGEN• Va bene su librerie di base che non Va bene su librerie di base che non
hanno forti dipendenze da altri hanno forti dipendenze da altri assemblyassembly
• Codice nativo valido solo per la Codice nativo valido solo per la macchina su cui si compila con NGENmacchina su cui si compila con NGEN• Non si può ridistribuire su altri PCNon si può ridistribuire su altri PC
• Minori ottimizzazioniMinori ottimizzazioni• In certi casi compila comunque con JITIn certi casi compila comunque con JIT
• Modificata versione di un componente Modificata versione di un componente globale da cui dipendeglobale da cui dipende
• Non riesegue NGEN in automaticoNon riesegue NGEN in automatico
www.devleap.it
MetadatiMetadati
• Concetto chiave in .NETConcetto chiave in .NET• Informazioni sui tipi di un assemblyInformazioni sui tipi di un assembly• Generati automaticamente dai Generati automaticamente dai
compilatoricompilatori• Estendibili da terze partiEstendibili da terze parti• Formato binario rappresentabile con Formato binario rappresentabile con
XML:XML:• XML Schema (XSD)XML Schema (XSD)• Serializzazione e deserializzazione Serializzazione e deserializzazione
oggetti a runtime in XMLoggetti a runtime in XML• Convertibile da/a COM type libraryConvertibile da/a COM type library
www.devleap.it
MetadatiMetadati• Descrizione di tipi e assemblyDescrizione di tipi e assembly
• Simile a COM Type LibrarySimile a COM Type Library• Simile a RTTI C++Simile a RTTI C++
MetadatiMetadati(+ codice)(+ codice)
DebuggerDebugger
Schema Schema GeneratorGenerator
ProfilerProfiler
AltriAltriCompilatoriCompilatori
Proxy GeneratorProxy Generator
Type BrowserType Browser
CompilatoreCompilatore
CodiceCodicesorgentesorgente
Codifica XMLCodifica XML(SDL)(SDL)
SerializationSerialization(es. SOAP)(es. SOAP)
DesignersDesigners
ReflectionReflection
www.devleap.it
MetadatiMetadati• Descrizione di un assemblyDescrizione di un assembly
• Identità: nome, versione, cultura [, pubblic key]Identità: nome, versione, cultura [, pubblic key]• Tipi esportatiTipi esportati• Assembly da cui dipendeAssembly da cui dipende• Permessi necessari per l’esecuzionePermessi necessari per l’esecuzione
• Descrizione dei tipiDescrizione dei tipi• Nome, visibilità, classe base, interfacce Nome, visibilità, classe base, interfacce
implementateimplementate
• Attributi customAttributi custom• Definiti dall’utenteDefiniti dall’utente• Definiti dal compilatoreDefiniti dal compilatore• Definiti dal FrameworkDefiniti dal Framework
www.devleap.it
Tool che usano i metadatiTool che usano i metadati• CompilatoriCompilatori
• Compilazione condizionaleCompilazione condizionale
• Ambienti RADAmbienti RAD• Informazioni sulle proprietà dei componentiInformazioni sulle proprietà dei componenti
• CategoriaCategoria• DescrizioneDescrizione
• Editor personalizzati di tipi di proprietàEditor personalizzati di tipi di proprietà
• Analisi dei tipiAnalisi dei tipi• IntellisenseIntellisense• ILDASMILDASM
www.devleap.it
Compilatori e metadatiCompilatori e metadati
• Import dei tipi di dati cross-languageImport dei tipi di dati cross-language• Emettono i metadati insieme al codiceEmettono i metadati insieme al codice
• Descrivono i tipi definiti e usatiDescrivono i tipi definiti e usati• Registrano gli assembly esterni referenziatiRegistrano gli assembly esterni referenziati• Registrano informazioni di versioneRegistrano informazioni di versione
• Possono interpretare attributi customPossono interpretare attributi custom• ObsoleteObsolete• CLS Compliance (conformità CLS)CLS Compliance (conformità CLS)• Compilazione condizionale (es. debug)Compilazione condizionale (es. debug)• Attributi specifici del linguaggioAttributi specifici del linguaggio
www.devleap.it
Type safetyType safety• Isolamento della memoriaIsolamento della memoria
• Consente l’esecuzione sicura di più Consente l’esecuzione sicura di più applicazioni nello stesso processoapplicazioni nello stesso processo
• Type safety (sicurezza dei tipi)Type safety (sicurezza dei tipi)• Assicura isolamento della memoriaAssicura isolamento della memoria• Assicura operazioni corrette rispettoAssicura operazioni corrette rispetto
al sistema di sicurezzaal sistema di sicurezza• Non è richiesta dal RuntimeNon è richiesta dal Runtime
• VerificationVerification• Assicura type safetyAssicura type safety
www.devleap.it
Type safetyType safety• Si eliminano:Si eliminano:
• Cast non sicuriCast non sicuri• Variabili non inizializzateVariabili non inizializzate• Indici di array fuori limite (out-of-bounds)Indici di array fuori limite (out-of-bounds)
• PEVERIFY.EXEPEVERIFY.EXE• Tool linea di comando per verificare requisiti Tool linea di comando per verificare requisiti
di type safety di un assemblydi type safety di un assembly
www.devleap.itProcesso Win32 (app.exe)Processo Win32 (app.exe)
MSCOREE.DLLMSCOREE.DLL
Managed WorldManaged World
Runtime HostRuntime Host
• Esecuzione di un’applicazione .NETEsecuzione di un’applicazione .NET
MSCORLIB.DLLMSCORLIB.DLL
MYCOMCLASS.DLLMYCOMCLASS.DLL
KERNEL.DLLKERNEL.DLLMYNETCLASS.DLLMYNETCLASS.DLL
Mars
halin
g
www.devleap.it
Runtime HostRuntime Host
• MSCOREE.DLLMSCOREE.DLL• ““Ultima” DLL COM rimasta...Ultima” DLL COM rimasta...
• __CorDllMainCorDllMain: Entry-point del loader per caricare : Entry-point del loader per caricare ed eseguire il codice ILed eseguire il codice IL
• MSCORLIB.DLLMSCORLIB.DLL• Implementa CTS (Common Type System)Implementa CTS (Common Type System)• Contiene BCL (Base Class Library)Contiene BCL (Base Class Library)• Non si vede con DEPENDS.EXE, usare ADEPENDS.EXENon si vede con DEPENDS.EXE, usare ADEPENDS.EXE
• Diversi tipi processi hostDiversi tipi processi host• Shell exe, ASP.NET, Internet Explorer, Servizi NTShell exe, ASP.NET, Internet Explorer, Servizi NT
www.devleap.it
Modello di esecuzioneModello di esecuzione
ClassClassLoaderLoader
IL to nativeIL to nativecode compilercode compiler
CPUCPUSecuritySecuritySystemSystem
CodeCodeManagersManagers
ManagedManagedNativeNativeCodeCode
AssemblyAssembly
Prima Prima chiamatachiamataal metodoal metodo
Primo Primo riferimento riferimento al tipoal tipo
ExecutionExecutionSupportSupport
www.devleap.it
DecompilazioneDecompilazione• Grazie al codice IL e ai metadati è più Grazie al codice IL e ai metadati è più
facile fare reverse engineeringfacile fare reverse engineering• Non è evitabile in senso assolutoNon è evitabile in senso assoluto• Si può rendere più ostico il compito di Si può rendere più ostico il compito di
ricostruire il codice originale (o ricostruire il codice originale (o qualcosa che ci assomigli)qualcosa che ci assomigli)
• Tecniche disponibili:Tecniche disponibili:• ObfuscationObfuscation• Compilazione in codice nativoCompilazione in codice nativo
www.devleap.it
Tool di decompilazioneTool di decompilazione• ILDASMILDASM
• Si ottiene il sorgente IL che può essere Si ottiene il sorgente IL che può essere modificato e ricompilatomodificato e ricompilato
• Anakrino Anakrino www.anakrino.orgwww.anakrino.org• Il primo decompilatore che ricostruisce Il primo decompilatore che ricostruisce
codice C# da qualsiasi linguaggiocodice C# da qualsiasi linguaggio
• Reflector Reflector www.aisto.com/roeder/dotnetwww.aisto.com/roeder/dotnet• Decompilatore che supporta decompilazione Decompilatore che supporta decompilazione
in C#, VB.NET e Delphi (da qualsiasi in C#, VB.NET e Delphi (da qualsiasi linguaggio originale)linguaggio originale)
• Salamander Salamander www.remotesoft.com/salamanderwww.remotesoft.com/salamander• Meno diffuso, è un prodotto commerciale:Meno diffuso, è un prodotto commerciale:
www.devleap.it
Tool di obfuscationTool di obfuscation• DemeanorDemeanor
www.wiseowl.com/products/DemeanorEnterprise.aspxwww.wiseowl.com/products/DemeanorEnterprise.aspx
• Dotfuscator Dotfuscator preemptive.com/products/dotfuscator/index.htmlpreemptive.com/products/dotfuscator/index.html
• eXtensible C# eXtensible C# www.resolvecorp.com www.resolvecorp.com
• Spices.NETSpices.NETwww.9rays.net/cgi-bin/components.cgi?act=1&cid=86www.9rays.net/cgi-bin/components.cgi?act=1&cid=86
• LSW-IL Obfuscator LSW-IL Obfuscator www.lesser-software.com/ilobf.htmwww.lesser-software.com/ilobf.htm
• SalamanderSalamanderwww.remotesoft.com/salamander/obfuscator.htmlwww.remotesoft.com/salamander/obfuscator.html
• XenoCode XenoCode www.xenocode.comwww.xenocode.com
www.devleap.it
Tool per avere eseguibili Tool per avere eseguibili unmanagedunmanaged
• Creano un eseguibile unmanaged che Creano un eseguibile unmanaged che scompatta l’assembly in memoria e lo scompatta l’assembly in memoria e lo esegueesegue
• I metadati non sono visibili I metadati non sono visibili direttamentedirettamente
• Prodotti disponibili:Prodotti disponibili:• Deploy .NETDeploy .NET
www.junglecreatures.com/jungle/index.jspwww.junglecreatures.com/jungle/index.jsp• ThinstallThinstall
http://thinstall.com/dotnethttp://thinstall.com/dotnet
www.devleap.it
Tool per creare codice nativoTool per creare codice nativo• Conversione del codice IL in codice nativo, Conversione del codice IL in codice nativo,
lasciando un formato di eseguibile managed lasciando un formato di eseguibile managed (con metadati, eventualmente offuscati)(con metadati, eventualmente offuscati)
• Risultato analogo ad eseguibile prodotto in Risultato analogo ad eseguibile prodotto in Managed C++ con #pragma unmanagedManaged C++ con #pragma unmanaged
• Massima compatibilità con altri assemblyMassima compatibilità con altri assembly• Problemi di portabilità su diversi processoriProblemi di portabilità su diversi processori• Minori ottimizzazioni del JITMinori ottimizzazioni del JIT• Solo un prodotto:Solo un prodotto:
• Salamander .NET ProtectorSalamander .NET Protectorwww.remotesoft.com/salamander/protector.htmlwww.remotesoft.com/salamander/protector.html
www.devleap.it
Considerazioni finaliConsiderazioni finali• Un mondo nuovo per sviluppareUn mondo nuovo per sviluppare• Framework di classi già molto estesoFramework di classi già molto esteso
• Ma soprattutto coerente!Ma soprattutto coerente!
• Quasi tutto completamente estendibileQuasi tutto completamente estendibile• Alta integrabilità con il codice esistenteAlta integrabilità con il codice esistente• Ottima piattaforma perOttima piattaforma per
sviluppare componenti COMsviluppare componenti COM• A prima vista è tutto semplice, ma è A prima vista è tutto semplice, ma è
bene sapere cosa c’è dietro (tanto!!)bene sapere cosa c’è dietro (tanto!!)
www.devleap.it
Altre InformazioniAltre Informazioni• Dove posso ottenere maggiori Dove posso ottenere maggiori
informazioniinformazioni• www.devleap.itwww.devleap.it• www.microsoft.com/msdn/italywww.microsoft.com/msdn/italy• msdn.microsoft.commsdn.microsoft.com• www.gotdotnet.comwww.gotdotnet.com
• Developer resourcesDeveloper resources• Microsoft Visual Studio.NETMicrosoft Visual Studio.NET• Microsoft .NET Framework SDKMicrosoft .NET Framework SDK• Microsoft Developer NetworkMicrosoft Developer Network
www.devleap.it
Introduction to .NET Introduction to .NET
I vostri feedback sono importantiI vostri feedback sono importanti•ScriveteciScriveteci
Grazie della partecipazione– A presto