程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Native 方式引導的.Net加密

Native 方式引導的.Net加密

編輯:.NET實例教程
這類加密保護方式屬於整體程序集的加密保護.
這個方法首要解決的問題就是 native code 和 .Net Code如何交互.
這裡介紹三種實現方式.

1. C++/CLI 實現.
這個比較簡單了,會C++/CLI一下子就能完成了.
Loader是由C++/CLI實現的.運行時通過解碼程序集通過反射載入然後運行.
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"),
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved