日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

采用Native 引導方式的.Net加密保護_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:ASP.NET2.0服務(wù)器控件之創(chuàng)建復雜屬性
本文詳細講解了一個利用ASP.NET 2.0技術(shù)創(chuàng)建復雜屬性的示例。 1、示例應(yīng)用 本文所實現(xiàn)的示例很簡單,其核心是通過實現(xiàn)自定義服務(wù)器控件的連字符形式復雜屬性來說明復雜屬性的實現(xiàn)方法,其中

這類加密保護方式屬于整體程序集的加密保護.這個方法首要解決的問題就是 native code 和 .Net Code如何交互.這里介紹三種實現(xiàn)方式.

1. C /CLI 實現(xiàn).
這個比較簡單了,會C /CLI一下子就能完成了.
Loader是由C /CLI實現(xiàn)的.運行時通過解碼程序集通過反射載入然后運行.

void InvokeAssemblyResource()
{

try
{
byte[] pBuf = GetDecryptedResource();
Assembly^ asm = Assembly::Load(pBuf);
asm->EntryPoint->Invoke(nullptr,nullptr);
}
catch(Exception^ ex)
{
MessageBox::Show(ex->Message);
}


}

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)))
{
MessageBox(NULL,_T("Unable to Create Invoke Assembly Object !!"),_T("Error"),MB_OK|MB_ICONERROR);
return;
}

HRSRC hRC = FindResource(NULL,MAKEINTRESOURCE(IDR_EMBEDDED_ASSEMBLY),"RT_EMBEDDED_ASSEMBLY");
HGLOBAL hRes = LoadResource(NULL,hRC);
DWORD dwSize = SizeofResource(NULL,hRC);

SAFEARRAY* pSA = NULL;

if(NULL !=(pSA = SafeArrayCreateVector(VT_UI1, 0, dwSize)))
{
LPVOID pBuf = NULL;

if(FAILED(SafeArrayAccessData(pSA,&pBuf)))
MessageBox(NULL,_T("Unable to Access SafeArray Data"), _T("Error"),MB_OK|MB_ICONERROR);
else
{
LPVOID hAsm = LockResource(hRes);

memcpy(pBuf, hAsm, dwSize);

UnlockResource(hRes);

SafeArrayUnaccessData(pSA);
}

pInvoker->LoadAndExecute(pSA); //Invoke the Reflection to load and Execute our Byte[]
}
else
MessageBox(NULL,_T("Unable to Allocate Memory"),_T("Memory Allocate Error"),MB_OK|MB_ICONERROR);

if(pSA) SafeArrayDestroy(pSA);
}

這里還有一個問題,loader是兩部分.加密的程序集可以作為資源簽入到native code loader中.但是C#部分怎么處理?一個比較隱蔽的方式是,在安裝程序時將它安裝到gac中.

分享:面向服務(wù)及其在互聯(lián)系統(tǒng)策略中的角
面向服務(wù)的業(yè)務(wù)環(huán)境 面向服務(wù)是一種創(chuàng)建分布式系統(tǒng)的方法。在它最抽象的層面,面向服務(wù)作為一個服務(wù)提供程序,包含了一切——從大型機應(yīng)用程序到打印機到碼頭工作人員到隔夜交貨公

共2頁上一頁12下一頁
來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
相關(guān).Net教程