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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 前一回讲了 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效果图:


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

目录
相关文章
|
2月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
4月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
4月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
200 13
|
6月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
1142 2
|
6月前
|
存储 安全 算法
网络安全与信息安全:构建数字世界的防线在数字化浪潮席卷全球的今天,网络安全与信息安全已成为维系现代社会正常运转的关键支柱。本文旨在深入探讨网络安全漏洞的成因与影响,剖析加密技术的原理与应用,并强调提升公众安全意识的重要性。通过这些综合性的知识分享,我们期望为读者提供一个全面而深刻的网络安全视角,助力个人与企业在数字时代中稳健前行。
本文聚焦网络安全与信息安全领域,详细阐述了网络安全漏洞的潜在威胁、加密技术的强大防护作用以及安全意识培养的紧迫性。通过对真实案例的分析,文章揭示了网络攻击的多样性和复杂性,强调了构建全方位、多层次防御体系的必要性。同时,结合当前技术发展趋势,展望了未来网络安全领域的新挑战与新机遇,呼吁社会各界共同努力,共筑数字世界的安全防线。
|
6月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
326 0
|
7月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
115 2
|
7月前
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
|
4月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
112 5
|
7月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
116 7

热门文章

最新文章