欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【采用Native 引导方式的.Net加密保护】,下面是详细的分享!
采用Native 引导方式的.Net加密保护
这类加密保护方式属于整体程序集的加密保护.这个方法首要解决的问题就是 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中.
3 是利用 CLR-Hosting 接口. 可以参考msdn中 本地接口部分的文档.
| 以下为引用的内容: bool InvokeAssemblyResource() { CComPtr spRuntimeHost; CComPtr<_AppDomain> spAppDomain; CComPtr spUnk; bool bSuccess=false; if(FAILED(CorBindToRuntimeEx( NULL, // Latest Version by Default SAFEARRAY* pSA=GetDecryptedResource(); SafeArrayDestroy(pSA); if(FAILED(spRuntimeHost->Stop())) return bSuccess; |
一般这类加密工具都会选择第三种实现方式.如 .Net Reactor.
不过单纯的整体加密保护安装性是很低的,可以配合一些其它的方式来提高保护强度,如 .Net Reactor的 NecroBit。因为在Load时很容易被dump出程序集.这种方式就是让Load时载入的程序集不是完整的(除去了IL代码部分,NecroBit).然后在Load完成后,程序集执行之前,还原IL代码.
以上所分享的是关于采用Native 引导方式的.Net加密保护,下面是编辑为你推荐的有价值的用户互动:
相关问题:Android APP加密方法都有哪些
答:伪加密是Android4.2.x系统发布前的Android加密方式之一,通过java代码对APK(压缩文件)进行伪加密,其修改原理是修改连续4位字节标记为”P K 01 02”的后第5位字节,奇数表示不加密偶数表示加密。 Android APP加密方法都有哪些? 2 虽然伪加密可以... >>详细
相关问题:U35JC上换下的硬盘放移动硬盘盒无法设别,是bios中...
答:尊敬的华硕用户,您好! 华硕笔记本出厂硬盘没有加密或设置为非通用格式的,建议您可以将硬盘放在其它硬盘盒交叉测试一下,以排除兼容性方面原因而无法正常使用。如仍无法识别,建议您将硬盘装回笔记本,将数据备份保存到U盘或移动硬盘之后格式化... >>详细
相关问题:谁有易通文件加密的注册码,给我弄个
答:ASE文件加密器 1.00 97793 应用软件::加密解密 aes加密是一个高效快捷用于军事加密等级的类模块,可以在任何工程中使用。aes(128位字区大小,使用128、192或者256位密钥长度)是用在美国政府进行保护机密(使用192或者256位密钥)和绝密文件的... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
