采用Native 引導方式的.Net加密保護_.Net教程
推薦:ASP.NET2.0服務器控件之創建復雜屬性本文詳細講解了一個利用ASP.NET 2.0技術創建復雜屬性的示例。 1、示例應用 本文所實現的示例很簡單,其核心是通過實現自定義服務器控件的連字符形式復雜屬性來說明復雜屬性的實現方法,其中
這類加密保護方式屬于整體程序集的加密保護.這個方法首要解決的問題就是 native code 和 .Net Code如何交互.這里介紹三種實現方式.
1. C /CLI 實現.
這個比較簡單了,會C /CLI一下子就能完成了.
Loader是由C /CLI實現的.運行時通過解碼程序集通過反射載入然后運行.
void InvokeAssemblyResource() { try
|
2. 利用C#導出Com接口和native code交互.Loader由C#和native code兩部分組成.
C#部分代碼
public interface IInvokeAssembly { void LoadAndExecute(byte[] pBuf); }; public class CInvokeAssembly : IInvokeAssembly { public CInvokeAssembly() { } public void LoadAndExecute(byte[] pBuf) { try { Assembly asm = Assembly.Load(pBuf); asm.EntryPoint.Invoke(null,null); } catch(Exception ex) { MessageBox.Show(ex.Message); } } } |
這里導出的 IInvokeAssembly 接口,將在native code中使用.
native code 部分
void InvokeAssemblyResource() { IInvokeAssemblyPtr pInvoker; //COM Pointer to the .Net Interface if(FAILED(pInvoker.CreateInstance(CLSID_CInvokeAssembly))) HRSRC hRC = FindResource(NULL,MAKEINTRESOURCE(IDR_EMBEDDED_ASSEMBLY),"RT_EMBEDDED_ASSEMBLY"); SAFEARRAY* pSA = NULL; if(NULL !=(pSA = SafeArrayCreateVector(VT_UI1, 0, dwSize))) if(FAILED(SafeArrayAccessData(pSA,&pBuf))) memcpy(pBuf, hAsm, dwSize); UnlockResource(hRes); SafeArrayUnaccessData(pSA); pInvoker->LoadAndExecute(pSA); //Invoke the Reflection to load and Execute our Byte[] if(pSA) SafeArrayDestroy(pSA); |
這里還有一個問題,loader是兩部分.加密的程序集可以作為資源簽入到native code loader中.但是C#部分怎么處理?一個比較隱蔽的方式是,在安裝程序時將它安裝到gac中.
分享:面向服務及其在互聯系統策略中的角面向服務的業務環境 面向服務是一種創建分布式系統的方法。在它最抽象的層面,面向服務作為一個服務提供程序,包含了一切——從大型機應用程序到打印機到碼頭工作人員到隔夜交貨公
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-采用Native 引導方式的.Net加密保護。