去掉ILDasm的SuppressIldasmAttribute限制

简介: 原文:去掉ILDasm的SuppressIldasmAttribute限制 今天本打算汉化一个.Net程序的,当用ILDasm打开的时候,出现了"受保护模块—无法进行反汇编"的错误提示 看到这个错误提示后,便尝试用ILSpy打开,结果一切正常。

今天本打算汉化一个.Net程序的,当用ILDasm打开的时候,出现了"受保护模块—无法进行反汇编"的错误提示

看到这个错误提示后,便尝试用ILSpy打开,结果一切正常。网上搜了下,原来是SuppressIldasmAttribute这个属性弄的。

关于SuppressIldasmAttribute这个属性,它可以在程序集中声明,声明这个属性后,ILDasm便不对这个程序集进行反汇编,从而起到一定程度的保护作用。其使用方法可以参看使用SuppressIldasmAttribute防止MSIL反組譯工具對組件進行反組譯这篇文章。

不过,这个SuppressIldasmAttribute是个君子协议,就算加上这个声明,编译器也没有什么额外的保护操作,只是ILDasm不对它反汇编罢了。像ILSpy、Reflector等第三方反编译工具都是无视这个属性的,基本上是一种掩耳盗铃罢了。园子里有篇文章谈谈ILDasm的功能限制与解除比较详细的介绍到了这个。

那么,如果我们要用ILDasm越过SuppressIldasmAttribute的限制反汇编程序该怎么办呢?一种方法是写个程序修改该程序集的的IL码,去掉SuppressIldasmAttribute属性,代码如下(需要Mono.Cecil库支持):

    public static void RemoveSuppressIldasmAttribute(string input, string output)
    {
        AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(input);
        foreach (CustomAttribute attribute in assembly.CustomAttributes)
        {
            if (attribute.Constructor.DeclaringType.Name == "SuppressIldasmAttribute")
            {
                assembly.CustomAttributes.Remove(attribute);
                break;
            }
        }

        assembly.Name.PublicKey = null;
        assembly.Name.PublicKeyToken = null;
        assembly.Write(output);
    }

用这个函数把程序集中的SuppressIldasmAttribute属性去掉后,就可以用ILDasm打开了。

这个方法略显麻烦,在前面的文章谈谈ILDasm的功能限制与解除中给出了另一种解决方法:直接去掉ILDasm中对SuppressIldasmAttribute的限制,这样就可以打开有SuppressIldasmAttribute声明的程序集了。原文中已经给了一个修改后的ILDasm.exe的下载,不过由于该文章发表时间较早,给出的ILDasm.exe的版本也比较老,要使用最新的ILDasm.exe必须我们自己修改。原文中是通过反汇编的方式修改的,比较麻烦,这里给一个简单的方法。

1. 将ILDasm.exe改个扩展名(记得备份原文件),然后用VisualStudio打开。

PS:之所以要改扩展名,是因为我要以十六进制的方式编辑,如果不改扩展名的话,VS把它当个exe打开,只能修改资源文件,如果用Ultraedit或WinHex之类的程序以十六进制方式编辑则可以不用改扩展名。

2. 查找SuppressIldasmAttribute字符串

3. 把它修改成一个其他的字符串(似乎不能乱改,包括长度,所以我随便替换某个字符即可)

4. 保存修改后还原扩展名为.exe,这样你的新ILDasm.exe就无视SuppressIldasmAttribute了。

 

目录
相关文章
|
自然语言处理 算法 前端开发
C++与Doxygen:精通代码文档化之道
C++与Doxygen:精通代码文档化之道
980 0
|
网络协议
tcp端口转发工具v2.0.2版本发布
tcp端口转发工具v2.0.2版本发布
882 0
|
Linux
Linux基础命令---mput上传ftp文件
mput 使用lftp登录ftp服务器之后,可以使用put指令将文件上传到服务器。mput指令可以使用通配符,而put指令则不可以。 1、语法 mput [-c] [-d] [-a] [-E] [-O base] files 2、选项列表 -d 穿件与文件...
4744 0
|
C# 数据可视化 开发工具
WPF实现选项卡效果(1)——使用AvalonDock
原文:WPF实现选项卡效果(1)——使用AvalonDock 简介   公司最近一个项目,软件采用WPF开发,需要实现类似于VS的选项卡(或者是浏览器的选项卡)效果。
2595 0
|
测试技术 API 开发者
.NET单元测试框架大比拼:MSTest、xUnit与NUnit的实战较量与选择指南
【8月更文挑战第28天】单元测试是软件开发中不可或缺的一环,它能够确保代码的质量和稳定性。在.NET生态系统中,MSTest、xUnit和NUnit是最为流行的单元测试框架。本文将对这三种测试框架进行全面解析,并通过示例代码展示它们的基本用法和特点。
1942 8
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
961 5
|
监控 安全 网络安全
如何使用PortTunnel端口映射工具?
【10月更文挑战第8天】PortTunnel是一种端口映射工具,它允许用户将本地计算机上的端口映射到远程服务器上。要使用PortTunnel,您需要首先下载并安装该软件,然后按照以下步骤进行操作:,1. 打开PortTunnel并配置您的本地和远程端口设置。,2. 在“本地地址”字段中输入您要映射的本地IP地址。,3. 在“远程地址”字段中输入远程服务器的IP地址。,4. 在“本地端口”字段中输入您要映射的本地端口号。,5. 在“远程端口”字段中输入远程服务器上的端口号。,6. 单击“启动”按钮以开始映射过程
2051 2
|
存储 测试技术 数据库
Entity Framework Core Migrations 超厉害!轻松实现数据库版本控制,让你的开发更顺畅!
【8月更文挑战第31天】数据库的演变是软件开发中不可或缺的部分。随着应用发展,数据库需不断调整以适应新功能。Entity Framework Core Migrations 作为数据库的守护者,提供强大的版本控制手段,确保不同环境下的数据库一致性。通过创建和管理迁移脚本,开发者可以有序地管理数据库变更,避免混乱和数据丢失。安装并配置好 EF Core 后,可以通过命令行工具轻松创建、应用及回滚迁移,如 `dotnet ef migrations add InitialMigration` 和 `dotnet ef database update`。
420 0
|
存储 缓存 算法
Java中的内存管理:理解垃圾回收机制
本文将深入探讨Java中的内存管理,特别是垃圾回收机制。我们将从基本的内存分配开始,逐步解析垃圾回收的原理和过程,以及它对Java应用程序性能的影响。通过实例演示,我们会展示如何在Java中有效地管理和优化内存使用。最后,我们将讨论一些常见的内存泄漏问题及其解决方案。
|
前端开发 JavaScript
前端模拟接口工具推荐——Apifox(mock数据)【图解教程】
前端模拟接口工具推荐——Apifox(mock数据)【图解教程】
5058 1

热门文章

最新文章

下一篇
开通oss服务