十多年C++/C、C#开发经验,.Net安全领域,熟悉.Net内核以及代码安全保护原理。
看看下面的代码: sbyte sba, sbb,sbv; sba = 1; sbb = 2; sbv = sba + sbb; byte ba, bb, bv; ...
新版本主要对HVM核心的算法和实现模块进行了调整. 增加对64位Windows系统的支持. 主程序界面和操作性方面的改进. 增加自动检测更新模块. 目前在进行64系统方面的检测,新版预计下月初发布.
目前加密壳将核心转移到Jit层后,内核模式的强度增加空间已经很小了。目前市面上的加密壳至少有一个共同的缺陷,无法防止Jit底层截获IL字节码。 有些壳采用从周边增加强度(如 Anti Hook),由于hook的多样性再加上壳又需要考虑自己的兼容性,所以这个效果不是十分理想。
.Net 2.0开始提供了两个混淆相关的属性,ObfuscationAttribute 和 ObfuscateAssemblyAttribute 。 为开发者提供一种批注二进制文件的方法,以便混淆处理工具能够使用最少的外部配置正确处理这些二进制文件。
DNGuard HVM 专业版 v2.7 正式发布。 专业版使用HVM保护技术,方法体IL代码始终处于保护状态。 即使是在虚拟机编译过程中,在内存中也不会出现正确完整的ILCode。而是以HVM的伪代码形式出现。
前面提到了form关闭时的两个奇怪现象,有不少朋友参与了讨论。 有些朋友还没有看清楚问题的所在就很轻率的评论。 A.Z. 在讨论中已经找到的问题的基本所在,问题关键还是在 CalledClosing 这个变量的状态。
今天查一个错误时发现这个问题。 有一个frmEdit。在Closing事件里面判断数据是否修改,然后提示用户是否需要保存数据。 提供了三个按钮,yes,no,cancel。 yes:保存数据,关闭窗体。
.Net 虚拟框架的实现原理 前面介绍了利用第三方虚拟环境来实现 .Net程序脱离框架运行, 并介绍了如何自己编写加载器程序。 今回我们介绍虚拟框架的核心实现原理,感兴趣的朋友可以参考自己实现。 在 让 .Net 程序 脱离 .net framework框架 运行(源代码实现说明) 中我们介绍的脱 离框架运行的方法,仍然需要依赖 rsdeploy.dll 才行。
相比前一次的更新: 调整了加密算法以及加密数据的存储结构。 试用版(英文)下载地址:http://www.dnguard.net/downloads.aspx 上个星期花时间做了 DNGuard 的主页:http://www.dnguard.net/ 专业版的注册系统完成大半了,等主页上的客户中心完成了再正式发布。
Net 内核级的加密保护工具。 采用的是纯虚拟机处理层的内核。 兼容目前所有的32位 .Net 框架版本,Net 1.1, 2.0, 3.0, 3.5 以及其所有子版本(如beta x,CTP,RC,sp x等)。
前面介绍了 “让 .Net 程序 脱离 .net framework框架 运行的方法”, 该方法主要是利用了Fetion的框架来实现的, 今天我们要介绍的是不使用Fetion的框架,自己来实现Fetion框架的相关功能, 并给出相关实现代码。
前面我们介绍了目前主流的双层加密壳核心实现原理, 同时提到了应对兼容性,同时考虑安全性的前提下对加密壳核心进行简化。 今回主要讨论一下安全性、兼容性需要注意哪些因素。 关于安全性,主要应对两类破解者。
前面介绍了 让 .Net 程序 脱离 .net framework框架 运行的方法 , 但是有些朋友应用中还是遇到了一些问题,主要时需要自己提取框架程序以及应用的dll问题。 这里介绍一个偷懒提取方式。
.Net中的泛型和C++中的模版很相似,但在编译行为上有些不同。 之前做DNGuard HVM 时就遇到了加密泛型的麻烦问题,最近又发现了泛型在 ngen 加强保护模式下也有问题,在。Net解密中它同样也是一个麻烦。
前面我们讨论了 ngen 生成的 ni 文件的还原,以及它的加强保护方式阻止还原。 今天我在测试一个 ORM 程序时发现, 用加强保护模式的 ni 文件运行会出现 BadImageFormat 的 异常。
在上一回 .Net 加密原理,方法体加密信息对应关系的实现 中介绍了实现加密壳首要解决的基础问题, 今回以第一种实现模式介绍如何实现一个纯EE层(mscorwks.dll)的加密壳内核。 首先确定 “方法体加密对应信息” 直接通过元数据来保存。
在 per method 的dotNet加密中,首要解决的方法体对应关系,即在运行时加密壳如何确定当前要解密的方法体所对应的加密信息。 目前大部分加密壳都直接利用了dotNet的元数据来保存这种对应关系,我们知道在元数据中每个方法都会对应一个RVA值,加密壳可以直接把这个关系记录在RVA的地址处。
在 net 2.0 中 ngen 能生成 native code 的 image,但是它同时会保留原始程序集的 MetaData 和ILCode 。 这就是还原的关键。同样的,知道了还原方法后加强保护也很容易实现。
首先感谢 Dudu 提供这么好的学习交流平台,博客园的确是非常榜的地方。 关于 Jason.NET 的质问,我有几点想说明 关于我blog里面的回文,Jason.Net 强调不是他的马甲。 我认定就算不是其马甲,也应该是与其关系非常近的人所为。
前面讨论了 .Net 保护中的 native compile 方式 。 提到了 native compile的两种方式 伪编译 和 ngen 编译。仍然没有像C++那样的完全native的编译。 这里要讨论的就是 ngen编译 生成的 ni 文件。
据宣传,这个功能就是将dotNet程序编译成native的本地代码,有代表性的相关工具有xenocode, themida 和 remotesoft。 他们实际上属于两类: 一、伪编译 就是把磁盘上的 dotNet程序转换成 win32 的程序,但运行后在内存中实际上还是dotNet程序,只是使用了一个win32 loader,把dotNet程序整体打包嵌入到了这个 win32 的loader中。
主程序更新,界面,进度显示,修正对个别非标准。Net程序集加密出错的bug。 运行库更新,修正asp.net 1.1下的个别兼容性问题。 泛型更新,修正之前最大只支持127个泛型参数的问题。 试用版开放 混淆相关的功能。
dotNet MSIL中的一些不常见IL指令 在做HVM伪代码覆盖率检测时,在构造的一些dotNet程序样本中总是缺少一些MSIL指令 ,没有覆盖所有的MSIL指令。 如C#中的装箱和取消装箱的IL指令,可能很多人和我最初的想法一样,装箱是 box指令 ,取消装箱是unbox指令,实际上这只对了一半。
Browsing the SSCLI can be enlighting from time to time (if not all the time). Take a look at the following function implemented in console.
.Net 框架目前逐步在普及了,仍然有很多人在寻找如何让.NET程序脱离.NET框架的方法。现成的工具有 Xenocode 的postbuidle或者vas,还有 Salamander .NET Linker .
在之前介绍Jit层脱壳原理时曾提到两个难点,1。方法体的局部变量签名。2。方法体的SEH 异常处理表。 本文主要就第一个问题进行简单探讨,随带也涉及到一些第二个问题。 前面提到过投机的方式获取,不在本文讨论范围,投机总是过于侥幸。
Net 内核级的加密保护工具。 采用的是纯虚拟机处理层的内核。 兼容目前所有的32位 .Net 框架版本,Net 1.1, 2.0, 3.0, 3.5 以及其所有子版本(如beta x,CTP,RC,sp x等)。
应使用者的要求,增加了反制静态编译工具查看程序集完整结构的功能。当然首当其冲的就是Reflector了。个人认为,加密最主要的就是加密方法代码,结构啥的并不是重点,如果是做中间件、类库啥的,结构还非得给用户看不可。
主程序以及运行库兼容性更新:修正ASP.Net 的兼容性。修正anti ildasm2.0 在部分环境下不兼容的问题。修正个别情况下泛型类型加密错误的问题,DNGuard全面支持泛型类型以及泛型方法加密了。
运行库兼容性更新:调整了运行库,修正了一处判断DynamicMethod错误的bug。下载地址:http://www.redcheek.net/bbs/read.php?tid=5051重新下载压缩包即可。
一款 .Net 内核级的加密保护工具。采用的是纯虚拟机处理层的内核。兼容目前所有的32位 .Net 框架版本,Net 1.1, 2.0, 3.0, 3.5 以及其所有子版本(如beta x,CTP,RC,sp x等)。
本文将在 .Net 反射脱壳机核心源代码 的基础上介绍,如何实现 Jit层脱壳 机。首先我们选择使用 C++/CLI 来完成这个工作。反射部分需要用到 。Net的相关类库,jit 层 hook 需要使用native c++ 方面的功能。
本文主要介绍一些dotNet加密保护工具的原理以及就其脱壳进行简单探讨。remotesoft protector、maxtocode、.Net Reactor、Cliprotector 、themida .Net、xenocode native compiler、DNGuard。
In my previous entry on IL modification we looked at the details for inserting a method call with a known (hardcoded) method token.
A couple of days back, we tweaked the running IL a little bit. Today, let's modify it some more! We'll insert a method call at the beginning of the body of the Main method.
原文出处:http://blog.monstuff.com/If you remember the Omniscient Debugger, it was a Java debugger that instrumented the bytecode at runtime to trace calls and monitor variables.
DNGuard 新版内核框架基本定下来了。目前版本定为 beta1。综合考虑,采用了兼容所有 dotNet framework 版本的内核模式,Net 1.0, 1.1, 2.0, 3.0, 3.5 以及其所有子版本(如beta x,CTP,RC,sp x等)。
提到 .Net 的保护,首推就是混淆保护了,而名称混淆基本上是所有混淆保护工具都具有的功能。可以说不支持名称混淆的工具称不上混淆保护工具。对于混淆保护,大家有一个认识,就是 混淆是一个不可逆的过程。而加密保护是一个可逆的过程。
程序采用的 VS2003 c++/mfc 编写。使用了frame work 2.0 的api。这个是从DNGuard HVM的手动名称混淆功能中剥离出来的副产品。可以用来协助手动 进行名称 混淆/反混淆 。
之前发了一个实验品http://bbs.pediy.com/showthread.php?t=45184功能还不完善,这个是完整的版本。能脱压缩壳,整体加密壳,有反射漏洞的加密壳。方法:采用的是注入方式,注入到目标进程。
在前面介绍mscorwks的时提到了,.net的程序是以函数为单位编译。而在 mscorjit中提供了一个函数 compileMethod 。mscorwks就是通过调用这个函数来编译.Net方法的。对于EE层,或者虚拟机预处理层的加密壳,只需要hook这个函数就可以dump出方法体的代码了。
本文主要对 《.Net 反射脱壳机核心源代码 》一文代码的原理和使用进行详细介绍。 首先介绍一下代码主要流程: 入口函数 void DumpAssembly(Assembly ass,string path) 枚举所有type,调用 void DumpType(Type tp, BinaryWri...
using System;using System.Collections.Generic;using System.Text;using System.Reflection;using System.
今天收到 maxtocode 的群发邮件,提到对MaxToCode运行库兼容性进行了修正,即降低了运行库anti的强度。确实在兼容性和安全方面很难做到鱼与熊掌兼得。anti得太多,程序的兼容性就成问题。
今天晚上朋友找我,说他用的OA系统(ASP.Net的)今天更新了,注册算法好像变了,好像加密壳也换了,找我帮他看看。是DLL的程序而且是net2.0的,感觉应该很好弄。资源管理器中用大图标视图模式看了一下所有的dll文件的版本信息没有发现可疑文件。
mscorwks.dll是dotNet的核心文件,尤其是在net2.0中,以前分散的功能都集中到了这个dll中。net1.1中,还有一个文件mscorsvr.dll 和 mscorwks.dll 是同等地位的。
忙了很长时间了,缓了一口气,还要接着忙一两个月。发两张图片玩玩。。。DNGuard v2.0 正式版1、文件说明:/DNGuardCmd.exe DNGuard命令行版本/DotNetGuard.exe DNGuard图形界面版本/DNGRuntime.dll DNGuard运行库文件。
学习过了名称混淆,最近又看了一些字符串加密方面的东西。在混淆保护和加密壳中都有字符串加密保护功能。总体上字符串加密可以分为两类,第一类是混淆保护中的字符串加密技术。主要特征是修改代码执行路径。大部分混淆保护工具的字符串加密都是这一类。
混淆在目前的DotNet保护中占主流地位。名称混淆是最基础的混淆保护技术。DotNet加密保护工具MaxToCode也在最近的更新中加入了混淆保护--名称混淆。我们先谈谈名称混淆技术,名称混淆的意义何在?在我看来它就只有一个意义,将表意的名称替换为无意义的名称。
这段时间在测试.Net Jit的容错性,为了方便,就直接将代码插入到Jit中进行测试了。这个种方式就是我前面介绍DNGuard时提到的第一种增加内核强度防反射脱壳的方法。这种技术即可用在dotnet代码的保护上,也可以用在dotnet加密壳的解密上。