Maxtocode对.Net程序加密的原理及解密探讨五(元数据还原以及IL解码的改进)
来源:互联网 发布:中国核事故知乎 编辑:程序博客网 时间:2024/05/22 14:49
前一回讲了 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效果图:
该工具可在看雪论坛下载。
题外话:国庆后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效果图:
该工具可在看雪论坛下载。
- Maxtocode对.Net程序加密的原理及解密探讨五(元数据还原以及IL解码的改进)
- Maxtocode对.Net程序加密的原理及解密探讨四(翻译IL字节码)
- MaxtoCode对.Net程序加密的原理及解密探讨
- MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)
- Maxtocode对.Net程序加密的原理及解密探讨三(实例解密)
- MaxtoCode对.Net程序加密的原理及解密探讨一
- MaxtoCode对.Net程序加密的原理及解密探讨二
- MaxtoCode对.Net程序加密的原理及解密探讨一
- Maxtocode对.Net程序加密的原理及解密探讨二
- 加密解密概述及.NET中对加密解密的支持(二)
- 加密解密概述及.NET中对加密解密的支持(一)
- 地址栏数据信息的加密以及在java代码对加密数据解密
- 数据加密与解密的简单原理
- 对加密解密及数字签名的理解
- 对加密解密及数字签名的理解
- 数据的加密和解密,实际是编码和解码
- 常用的加密解密及编码解码算法
- .NET程序集及其执行(IL、元数据、托管模块、JIT)
- Maxtocode对.Net程序加密的原理及解密探讨四(翻译IL字节码)
- Tensor product spline surfaces
- WCF net.TCP 小记
- linux命令
- FileListView
- Maxtocode对.Net程序加密的原理及解密探讨五(元数据还原以及IL解码的改进)
- C++中文件流(fstream)的使用方法及示例
- FunctionView
- Linux 动态库剖析
- 单文档初始最大化显示&&鼠标双击时窗口最大化失效
- WINCE 自绘按钮的图形及背景
- 代码混淆和baksmali,smali反编译研究
- sed处理变量替换
- COM套间概念