(1)程序員用高級OO語言(C#,VB.NET,VC.Net,Cobol,Python……)編寫代碼,這些代碼經過。Net編譯器(比如Visual Studio.Net),編譯成統一的MSIL(Microsoft Intermediate Language)。NET應用程序是以MSIL的形式出現的,只有在程序執行的時候才通過即時編譯器JIT(Just-In-Time)被編譯為本機代碼。
(2)程序執行的時候,由JIT裝入程序的MSIL,JIT同時作了很多其他的工作(裝載相應的運行庫,安全檢測……) 最後JIT將轉化成本地機器碼(EXE或者DLL)。
(3)本地機器碼被裝入內存,開始執行。
就是通過這幾個步驟,。net實現了編程語言無關(都轉化成MSIL);平台無關(執行的時候根據本地配置,生成相應的機器碼);安全性(JIT裡面做了很多檢測)。
作為Cracker,可以用。Net Framework SDK自帶的工具進行MSIL和EXE(DLL)之間的互換:利用FrameworkSDK\Bin\目錄下的ilasm和ildasm(1)ilasm示例:下面的命令對 MSIL 文件 myTestFile.il 進行匯編並產生可執行文件 myTestFile.exe. ilasm myTestFile下面的命令對 MSIL 文件 myTestFile.il 進行匯編並產生 .dll 文件 myTestFile.dll. ilasm myTestFile /dll下面的命令對 MSIL 文件 myTestFile.il 進行匯編並產生 .dll 文件 myNewTestFile.dll. ilasm myTestFile /dll /output:myNewTestFile.dll(2)ildasm示例下面的命令使 PE 文件 MyHello.exe 的元數據和反匯編代碼顯示在 Ildasm.exe 的默認 GUI 中。
ildasm myHello.exe下面的命令對 MyFile.exe 文件進行反匯編,並將結果 MSIL 匯編程程序文本存儲在 MyFile.il 文件中。
ildasm MyFile.exe /output:MyFile.il下面的命令對 MyFile.exe 文件進行反匯編,並將結果 MSIL 匯編程序文本顯示到控制台窗口中。
ildasm MyFile.exe /text如果文件 MyApp.exe 包含嵌入的托管和非托管資源,則下面的命令將產生以下 4 個文件:MyApp.il、MyApp.res、Icons.resources 和 Message.resources:ildasm MyApp.exe /output:MyApp.il下面的命令對 MyFile.exe 的 MyClass 類中的 MyMethod 方法進行反匯編,並將輸出顯示到控制台窗口中。
ildasm /item:MyClass::MyMethod MyFile.exe /text在上面的示例中,可能有幾個具有不同簽名的 MyMethod 方法。下面的命令對返回類型為 void 且帶有參數 int32 和 System.string 的MyMethod 方法進行反匯編。
ildasm /item:"MyClass::MyMethod(void(int32,class System.String))" MyFile.exe /text