Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: [email protected] Italian blog: ...

31
www.devleap.it www.devleap.it Marco Russo Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: [email protected] Mail: [email protected] Italian blog: Italian blog: http://blogs.devleap.com/marco.blog http://blogs.devleap.com/marco.blog .NET: ambiente di .NET: ambiente di esecuzione esecuzione

Transcript of Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: [email protected] Italian blog: ...

Page 1: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 2: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 3: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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?

Page 4: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 5: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 6: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 7: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

www.devleap.it

Codice interpretatoCodice interpretato

Interprete OutputSorgenti

Page 8: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

www.devleap.it

Codice nativoCodice nativo

Codicenativo(.EXE)

Output

CompilatoreSorgenti

Page 9: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

www.devleap.it

Codice MSILCodice MSIL

Codicenativo

OutputCompilatoreJIT

CodiceMSIL

(Assembly).EXE/.DLL

Compilatore.NET

Sorgenti

Page 10: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

www.devleap.it

Codice MSILCodice MSIL

Codicenativo

Output

Sorgenti

CompilatoreJIT

CodiceMSIL

(Assembly).EXE/.DLL

Compilatore.NET

Codice + metadati

Page 11: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

www.devleap.it

Codice MSILCodice MSIL

Codicenativo

OutputCompilatoreJIT

CodiceMSIL

(Assembly).EXE/.DLL

Compilatore.NET

SorgentiAmbiente di esecuzione

.NET Runtime

Page 12: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 13: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 14: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 15: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 16: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 17: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 18: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 19: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 20: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 21: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 22: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 23: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 24: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 25: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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:

Page 26: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 27: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 28: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 29: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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!!)

Page 30: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

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

Page 31: Www.devleap.it Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog:  ambiente di esecuzione.

www.devleap.it

Introduction to .NET Introduction to .NET

I vostri feedback sono importantiI vostri feedback sono importanti•ScriveteciScriveteci

Grazie della partecipazione– A presto

[email protected]