开发者社区> 瑞克-rick> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

某壳对.Net程序加密的原理及解密探讨五(元数据还原以及IL解码的改进)

简介: 前一回讲了 IL字节码的解码问题,并提供了一个小工具,但解码的效果和 ildasm还是差很多,给阅读也带来了一些困难。还有就是有些文件选择文件后解码会出错,这是因为maxtocode对文件里面的元数据进行了随机加密。
+关注继续查看

前一回讲了 IL字节码的解码问题,并提供了一个小工具,但解码的效果和 ildasm还是差很多,给阅读也带来了一些困难。还有就是有些文件选择文件后解码会出错,这是因为maxtocode对文件里面的元数据进行了随机加密。这一回主要解决元数据的还原以及对解码进行改进。


题外话:国庆后maxtocode推出了3.12版,称对.net formwork 2.0获取msil代码的方式进行了限制。即在不作任何改进的情况下,我们前面介绍的方法将无法取得IL字节码。dreaman已经找到了取消这个限制的方法了,不久tankaiha 就会整合完成新的 injectReflector 。就是前一回贴的第二张图片,该工具已经在看雪发布了。

言归正卷,maxtocode对net程序加密时还能对元数据进行随机部分加密,即破坏静态元数据的完整性。直接磁盘文件里面读取的元数据是不完全正确的,所以导致了解码程序取元数据信息时出错。解码程序现在已经更新处理了这样的异常。同时增加了元数据还原的功能。
怎么还原?这个比il字节码要容易,根据元数据的特性,程序运行后在内存中必然有完整的元数据,我们所要做的就是从内存中直接dump出来就ok了。

元数据在内存中的位置可以从PE的CLI Header中取得,CLI Header的位置有可以从PE可选头部中取得。
首先参考PE文件结构取得PE文件的可选头部。在这个结构中有一个成员是 DataDirectory 数组。
其中DataDirectory[14] 就是记录的 CLI Header的偏移和大小。
在CLI Header结构:
 struct  _CLIHeader
{
 DWORD cbSize;//size of 72
 INT16 nMajor;//2
 INT16 nMinor;//0
 DWORD mdRVA; //元数据在内存中的便宜量
 DWORD mdSize;//元数据的大小
 DWORD dwFlags;
 DWORD tkEntry; //mdtMethodDef
 INT64 Resources;
 INT64 SrongNameSig;
 INT64 CodeManagerTable;//0
 INT64 VTableFixedup;
 INT64 ExprotTableJump;//0
 INT64 ManagedNativeHeader;//0}
在这个结构里面就能找到元数据的偏移量和大小。

dump的功能已经增加到新版的ilbytedecoder中了。

完成界面如下:



这个界面上上一回的界面,解码的是同一段IL字节码。
效果已经类似ildasm的了,基本上可阅读了。
同时提供了选择 Raw MetaData的进行解码的功能,这样就不用担心因为
原文件的元数据被破坏导致解码不正常了。
程序新加的dump功能可以将内存中的元数据保存为 Raw MetaData文件中。
下载地址:http://www.bbsftp.com/temp/ILByteDecoderV1.5.rar

另附injectReflector效果图:


该工具可在看雪论坛下载。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序
原文:.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序 我不知道人们为什么那么喜欢用HelloWorld来做为自己的第一个程序入门,为什么不是hello **其他的东西或者hi。
836 0
Net设计模式实例之模板方法模式(Template Mothed Pattern)
一、模板方法模式简介(Brief Introduction) 模板方法模式(Template Method Pattern),定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重定义算法的某些特定步骤。
745 0
Net设计模式实例之备忘录模式(Memento Pattern)
一、备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。
808 0
Net设计模式实例之外观模式(Façade Pattern)
一、外观模式简介(Brief Introduction) 外观模式,为子系统的一组接口提供一个统一的界面,此模式定义了一个高层接口,这一个高层接口使的子系统更加容易使用。   二、解决的问题(What To Solve) 1、分离不同的两个层        典型的分层例子是Net三层架构,界面层与业务逻辑层分离,业务逻辑层与数据访问层分类。
708 0
+关注
瑞克-rick
十多年C++/C、C#开发经验,.Net安全领域,熟悉.Net内核以及代码安全保护原理。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Flash Player最新安全特性分析 及绕过思路
立即下载
Flash Player最新安全特性分析及绕过思路
立即下载
低代码开发师(初级)实战教程
立即下载