某壳对.Net程序加密的原理及解密探讨一
这里研究的对象是某壳3.1试用版.这里只探讨程序代码的加密. 对.Net程序代码的加密过程如下: 1. 运行 ildasm 将程序集反编译成 il代码文件. 2. 对IL代码文件进行处理.(*) 3. 运行 ilasm 将 IL代码文件编译成程序文件. 4. 直接对程序文件中的il字节码加密.(**) 粗体表示的 2 , 4 是关键步骤. 我们先来看看第四...
某壳对.Net程序加密的原理及解密探讨五(元数据还原以及IL解码的改进)
前一回讲了 IL字节码的解码问题,并提供了一个小工具,但解码的效果和 ildasm还是差很多,给阅读也带来了一些困难。还有就是有些文件选择文件后解码会出错,这是因为maxtocode对文件里面的元数据进行了随机加密。这一回主要解决元数据的还原以及对解码进行改进。题外话:国庆后maxtocode推出了3.12版,称对.net formwork 2.0获取msil代码的方式进行了限制。即在不作任何改....
遭遇未知.Net加密壳
今天晚上朋友找我,说他用的OA系统(ASP.Net的)今天更新了,注册算法好像变了,好像加密壳也换了,找我帮他看看。是DLL的程序而且是net2.0的,感觉应该很好弄。资源管理器中用大图标视图模式看了一下所有的dll文件的版本信息没有发现可疑文件。先拿ildasm看看结构,分析一下有什么保护方式。结果出来一个 红叉的对话框,说什么是受保护的模块。用reflector不能看是预料之中的,这个工具太....
.Net加密壳认识的一个误区
自从.Net 2.0的新特性被公开用来获取IL代码后,加密壳就成了鸡肋。就如tankaiha所说“.net下逆向暂时没啥新东西可搞,某软件的版本升级是一次不如一次强”,由于先天不足,这成了加密壳强度的一个瓶颈。 但是还有相当一部分人认为1.1的程序集加密后是安全的。其实不然,绝大部分1.1的程序集加密后也能用发射的方式进行脱壳。(注:这里的脱壳仅指加密保护壳,混淆是无法还原的,如某软件现在同时提....
.Net 加密原理, 纯EE层加密壳内核的实现(二)
在上一回 .Net 加密原理,方法体加密信息对应关系的实现 中介绍了实现加密壳首要解决的基础问题, 今回以第一种实现模式介绍如何实现一个纯EE层(mscorwks.dll)的加密壳内核。 首先确定 “方法体加密对应信息” 直接通过元数据来保存。 这里我们使用最简单的记录方式--记录一个四字节的指针信息。 另外再加上一个标识数据,这个我们采用一个 magic DWORD表示。 这样记录信...
.Net 加密原理,方法体加密信息对应关系的实现(一)
在 per method 的dotNet加密中,首要解决的方法体对应关系,即在运行时加密壳如何确定当前要解密的方法体所对应的加密信息。 目前大部分加密壳都直接利用了dotNet的元数据来保存这种对应关系,我们知道在元数据中每个方法都会对应一个RVA值,加密壳可以直接把这个关系记录在RVA的地址处。在框架运行中RVA处的数据会被作为“方法体”在处理流程中直接传递,加密壳通过拦截框架处理流程中的函.....
.Net 加密原理,加密壳核心的兼容性以及安全性讨论(六)
前面我们介绍了目前主流的双层加密壳核心实现原理, 同时提到了应对兼容性,同时考虑安全性的前提下对加密壳核心进行简化。 今回主要讨论一下安全性、兼容性需要注意哪些因素。 关于安全性,主要应对两类破解者。 1、静态分析脱壳 对于这一类,行之有效的方法就是增加加密算法的数量和复杂度。 加密壳核心的实现方式对其影响可忽略。 2、动态框架核心层拦截 对于这一类有两种防范,一是针对框架核心层进行检测,对Ho....
.Net 加密原理,HVM核心的实现原理(八)
目前加密壳将核心转移到Jit层后,内核模式的强度增加空间已经很小了。目前市面上的加密壳至少有一个共同的缺陷,无法防止Jit底层截获IL字节码。 有些壳采用从周边增加强度(如 Anti Hook),由于hook的多样性再加上壳又需要考虑自己的兼容性,所以这个效果不是十分理想。 从防止脱壳入手,通过保护局部变量签名和异常处理表,来阻止方法体的脱壳还原。这样虽然不能阻止截获IL字节码,如果配合流程混淆....
.Net 加密原理,加密壳运行库的加载方式(九)
.Net加密壳的运行库加载方式目前主要分两种。用得比较多的一种是 向程序集中注入Loader代码,然后给程序集中的每个类型添加静态构造函数。在静态构造函数中调用Loader代码。 目前的加密壳大部分都是这种模式。这种模式,利用了静态构造函数的特性。 应该注意到静态构造函数和Loader代码执行时 运行库是还没有加载的,所以这部分代码是却对不能加密的。 程序集执行起来后,运行库才会被载入。另外一.....
采用Native 引导方式的.Net加密保护
这类加密保护方式属于整体程序集的加密保护. 这个方法首要解决的问题就是 native code 和 .Net Code如何交互. 这里介绍三种实现方式. 1. C++/CLI 实现. 这个比较简单了,会C++/CLI一下子就能完成了. Loader是由C++/CLI实现的.运行时通过解码程序集通过反射载入然后运行. void InvokeAssemblyResource() { &n...
本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。