原文:去掉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限制的更多相关文章

  1. C# 反编译防范

    C# 编写的代码通过VS编译器生成 dll 或 exe ,很容易被一些反编译工具查看到源码或对源码进行修改.为防止代码被反编译或被篡改,我们可以进行一定的防范措施.但不能杜绝,因为DotNet编写代码 ...

  2. 【解决方案】VS2013外部工具中添加ildasm.exe

    VS2013安装在Win8.1的操作系统中,开始屏幕中找不到ildasm.exe没有显示,于是下面提供了一种方法将ildasm.exe工具添加到VS2013外部工具中,并将反编译的代码输出到VS201 ...

  3. 谈谈ILDasm的功能限制与解除

    原文:谈谈ILDasm的功能限制与解除 首先,我在此申明,此文并不是教别人突破限制,我们只是用学习的眼光看问题 大家都知道ILDasm是.NET程序的反编译工具,它是由Microsoft提供的反编译工 ...

  4. 最新 去掉 Chrome 新标签页的8个缩略图

    chrome的新标签页的8个缩略图实在让人不爽,网上找了一些去掉这个略缩图的方法,其中很多已经失效.不过其中一个插件虽然按照原来的方法已经不能用了,但是稍微变通一下仍然是可以用的(本方法于2017.1 ...

  5. wget 显示"英国中部时间",去掉烦人的刷屏显示

    wget下载文件显示多行,进度条后面显示英国中部时间,非常让人郁闷. 本来英文是eta(Estimated Time of Arrival 预计到达时间),翻译错了,干脆去掉好了. 先要有两个个工具 ...

  6. String 中去掉空格

    JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间 ...

  7. navigationController 去掉背景图片、去掉底部线条

    //去掉背景图片 [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMe ...

  8. [LeetCode] Remove K Digits 去掉K位数字

    Given a non-negative integer num represented as a string, remove k digits from the number so that th ...

  9. 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串

    写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...

随机推荐

  1. XML新手入门 创建构造良好的XML(1)

    XML新手入门 创建构造良好的XML(1) 2009-03-19 09:24 Kay Whatley IBM Developerworks 我要评论(0) 字号:T | T 本文描述了构建良好的XML ...

  2. Naive Bayes(朴素贝叶斯算法)[分类算法]

    Naïve Bayes(朴素贝叶斯)分类算法的实现 (1) 简介: (2)   算法描述: (3) <?php /* *Naive Bayes朴素贝叶斯算法(分类算法的实现) */ /* *把. ...

  3. PHP根据身份证号码验证、获取星座、生肖和性别函数

    首先介绍一下身份证含义 新的18位身份证号码各位的含义:1-2位省.自治区.直辖市代码:3-4位地级市.盟.自治州代码:5-6位县.县级市.区代码:7-14位出生年月日,比如19670401代表196 ...

  4. LaTeX中titlesec宏包的使用

    在 xelatex 中使用 \usepackage 指令使用 titlesec 宏包时,可以指定一些格式选项,如下: \usepackage[center]{titlesec} 其中 center 可 ...

  5. python执行外部程序模块pyshell

    写python程序的时候需要用到调用外部命令的模块,看了一下,还真不少,头疼,用着不顺手.根据官网推荐,我根据官网的subprocess模块定制了一个自己的shell,同时借鉴了github上面的sh ...

  6. HD1083 二分图,匈牙利算法

    #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stdio.h> #include<stdlib. ...

  7. ASP.NET MVC5+ORACLE 身份认证

    菜鸟来的,刚接触mvc,看到mvc5上默认带有identity身份验证的东西,公司用的oracle数据库,便想着东西能不能支持oracle数据库,折腾了半天弄出下面的东西来,有些东西可能不太准确,望大 ...

  8. Nginx安装配置PHP(FastCGI)环境的教程

    这篇是Nginx安装配置PHP(FastCGI)环境的教程.Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用. 一.什么是 FastCGI F ...

  9. nginx安装及配置支持php的教程(全)

    本文的实验环境为:Centos4.5,nginx版本为:nginx-0.7.26   pcre-7.8.tar.gz  正则表达式下载地址:ftp://ftp.csx.cam.ac.uk/pub/so ...

  10. android 管理Bitmap内存 - 开发文档翻译

    由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接链接   Managing Bitmap Memory 管理Bitmap内存 In additi ...