.Net保護中的nativecompile方式
據宣傳,這個功能就是將dotNet程式編譯成native的原生程式碼,有代表性的相關工具有xenocode, themida 和 remotesoft。
他們實際上屬於兩類:
一、偽編譯
就是把磁碟上的 dotNet程式轉換成 win32 的程式,但執行後在記憶體中實際上還是dotNet程式,只是使用了一個win32 loader,把dotNet程式整體打包嵌入到了這個 win32 的loader中。
二、ngen編譯
ngen 是 dotNet提供的將IL編譯成native的工具。
這種可以算是真實的編譯吧。
但是它們有一個共同的特點,依然不能脫離dotNet框架單獨執行,當然可以使用虛擬框架執行。
xenocode, themida屬於第一類,他們只是打包後生成的磁碟檔案是 win32的,這個其實只是一個loader,他們在執行時會是否出dotNet程式集(記憶體中),然後呼叫框架執行原始dotNet程式。在加密保護方法可以看著是整體加密保護類的加密殼。
算不上 native compile保護,但是 xenocode的宣傳說的是native保護,x還有一個功能就是可以直接把虛擬框架也一起打包進去,這樣執行起來確實很像是傳統的win32程式。
remote的就是利用 ngen 編譯成 原生程式碼。但是ngen編譯的原生程式碼也不能脫離framework單獨執行。而且ngen編譯的原生程式碼平臺依賴性很強,不僅不能脫離framework執行,而且一般都只能在其編譯時使用的framework中執行。
這樣釋出 ngen編譯的本地程式時必須同時打包編譯時使用的framework。
前面我介紹了一個利用飛信框架脫離framework執行 dotNet程式的方法。
其中飛信框架有兩個主要檔案 FetionVM.exe 和 FetionVM.srm 這個兩個是框架的loader程式,用來載入待執行的dotNet程式。
FetionVM.exe是native的win32程式,它實際上只是呼叫了rsdeploy.dll 裡面的三個函式來啟動 fetionvm.srm。srm這個檔案其實是一個最簡單的。net程式,在這個srm檔案裡面它會用反射啟動 引數傳遞進來的那個 。net程式。
FetionVM.exe很簡單,反彙編看看就清楚了。
fetionvm.srm是DotNet程式,如果你用reflector等工具檢視會發現它只是一個“空殼”,裡面啥都沒有。
真正的實體在
CWINDOWSassemblyNativeImages_v2.0.50727_32FetionVM6e39d95b1cb7d342a0ad2b892350dc65FetionVM.ni.exe 中。
FetionVM.ni.exe 就是 ngen生成的native檔案。
fetionvm.srm實際上使用了 native compile方式的保護。
fetionvm.srm這個檔案的存在只是用來欺騙framework,框架在載入 fetionvm.srm 後,根據其程式集名稱在 nativeimages中查詢是否存在 native code,如果有就會載入 native code版本的。
對於微軟 ni 的這種檔案格式資料不是很多,目前還不太清楚全部的檔案格式。
不過確定了一點, ni 的檔案中會包含原始的 後設資料。
據推測 ni 檔案中應該也會包含原始的IL程式碼,目前還沒有確定它們的關係,
如果能確定,那ngen生成的ni檔案就可以直接還原成 dotNet程式了。
相關文章
- nativecompile保護的dotNet本地程式還原成dotNetIL程式集Compile
- 採用Native引導方式的.Net加密保護加密
- ASP.NET Core中的資料保護ASP.NET
- 機器學習中的隱私保護機器學習
- .net程式混淆、安全、保護、加密加密
- labview密碼保護方式及如何保護labview密碼不被破解View密碼
- js保護內部資料的三種方式JS
- 聊聊 TypeScript 中的型別保護TypeScript型別
- Linux中的保護機制Linux
- 使用 stunnel 保護 telnet 連線
- mscorwks.dll在.Net中的地位以及在.Net程式碼保護方面的應用
- 從QQ登入方式想到的QQ密碼保護密碼
- 安全機密管理:Asp.Net Core中的本地敏感資料保護技巧ASP.NET
- 使用 Rootless Linux 容器保護您的 .NET 雲應用Linux
- DG的保護模式模式
- 在Spring Boot中禁用CSRF保護的原因?Spring Boot
- Spring Boot 配置中的敏感資訊如何保護?Spring Boot
- 保護企業系統中的程式碼安全
- 用Serverless Kubernetes為.NET (Core)應用保駕護航Server
- 使用Jwt為.Net Core SignalR保駕護航JWTSignalR
- 常見dotNet加密保護工具分析介紹加密
- 保護模式模式
- 保護期限
- Mysql 中寫操作時保駕護航的三兄弟!MySql
- redis配置檔案中的保護模式protected-modeRedis模式
- DG中3種保護模式之間的切換模式
- GCC 中的編譯器堆疊保護技術GC編譯
- WPS文字中的表格也保護密碼功能密碼
- 基礎:全面保護你的Java程式安全(中)(轉)Java
- Windows的保護模式 (轉)Windows模式
- Fortinet運用前沿IT思維,保護OT系統
- SafeNet推出新款軟體保護產品
- 將netcore打包好的程式,以守護程序方式部署到CentOS系統中NetCoreCentOS
- 【等級保護】等級保護共分為幾級?保護物件是指什麼?物件
- 【科普】等級保護與分級保護的區別和聯絡!
- 破解EXCLE保護
- 軟體保護
- ASP.net:保護你DLL和Code不被別人使用ASP.NET