去掉ILDasm的SuppressIldasmAttribute限制
原文:去掉ILDasm的SuppressIldasmAttribute限制
今天本打算汉化一个.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了。
去掉ILDasm的SuppressIldasmAttribute限制的更多相关文章
- C# 反编译防范
C# 编写的代码通过VS编译器生成 dll 或 exe ,很容易被一些反编译工具查看到源码或对源码进行修改.为防止代码被反编译或被篡改,我们可以进行一定的防范措施.但不能杜绝,因为DotNet编写代码 ...
- 【解决方案】VS2013外部工具中添加ildasm.exe
VS2013安装在Win8.1的操作系统中,开始屏幕中找不到ildasm.exe没有显示,于是下面提供了一种方法将ildasm.exe工具添加到VS2013外部工具中,并将反编译的代码输出到VS201 ...
- 谈谈ILDasm的功能限制与解除
原文:谈谈ILDasm的功能限制与解除 首先,我在此申明,此文并不是教别人突破限制,我们只是用学习的眼光看问题 大家都知道ILDasm是.NET程序的反编译工具,它是由Microsoft提供的反编译工 ...
- 最新 去掉 Chrome 新标签页的8个缩略图
chrome的新标签页的8个缩略图实在让人不爽,网上找了一些去掉这个略缩图的方法,其中很多已经失效.不过其中一个插件虽然按照原来的方法已经不能用了,但是稍微变通一下仍然是可以用的(本方法于2017.1 ...
- wget 显示"英国中部时间",去掉烦人的刷屏显示
wget下载文件显示多行,进度条后面显示英国中部时间,非常让人郁闷. 本来英文是eta(Estimated Time of Arrival 预计到达时间),翻译错了,干脆去掉好了. 先要有两个个工具 ...
- String 中去掉空格
JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间 ...
- navigationController 去掉背景图片、去掉底部线条
//去掉背景图片 [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMe ...
- [LeetCode] Remove K Digits 去掉K位数字
Given a non-negative integer num represented as a string, remove k digits from the number so that th ...
- 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串
写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...
随机推荐
- oracle 集合定义
集合:是具有相同定义的元素的聚合.Oracle有两种类型的集合: 可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值. 嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限 ...
- XML新手入门 创建构造良好的XML(2)
本文描述了构建良好的XML需要遵循的规则.作者详细介绍了构建XML需要考虑的元素,如何命名约定.正确的标记嵌套.属性规则.声明和实体,以及DTD和schema的验证,十分便于新手开始学习了解XML. ...
- mysql事件调度器功能
一.前言 自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录.对数据进行汇总等等),来取代原先只能由操作系 ...
- Eloquent ORM 之关联查询
小伙伴们好,本文是在我的前一篇随笔的基础上完成的,还没有浏览的同学,请移尊驾哦 Eloquent ORM学习笔记. 前一篇文章用到了leftJoin方法,其实Eloquent对于模块之间的关联查询有自 ...
- asp.net 获取当月的第一天和最后一天示例
DateTime now = DateTime.Now; DateTime d1 = ); DateTime d2 = d1.AddMonths().AddDays(-); d1是本月的第一天,d2本 ...
- 我所不知道的 Chrome 开发者工具
http://www.oschina.net/translate/things-i-didnt-know-about-chrome-devtools 自打我开始进行Web开发后,我就一直将Firebu ...
- WPF中动态更新TextBlock文字中的超链接,文本
1.------------------------------------------------------------------------- 修改超链接的文本文字: <TextBloc ...
- C++之单元测试
以前编写程序从没有做过单元测试的工作,所以在后期会花很多时间去纠错,这也就是软件工程中的2:8定律.最近要完成一个项目,要求要对系统中的主类和主函数作出单元测试的保证,才去查找了相关方面的资料,看过后 ...
- VC中的Attach和Detach
CWnd,CDC, Cxxx等都是MFC的类,这些类提供了很多成员函数来执行系统调用等操作,但是核心的类成员数据都是 句柄,(包括窗口句柄,DC句柄,线程句柄等). m_hWnd m_hDC m ...
- HTTP based RESTful APIs - asp.net web api
1.HTTP http://www.w3.org/Protocols/rfc2616/rfc2616.html 2.REST是什么http://www.ics.uci.edu/~fielding/pu ...