反混淆后的.net文件编译

来源:互联网 发布:上瘾网络剧欢快bgm 编辑:程序博客网 时间:2024/05/04 12:54

   因为工作的需要,研究一下别人的软件。这篇文章主要是分享一下过程,其中没有什么技术性的东西,只是想告诉那些和我一样深深被反编译出来的代码,在编译过程中显示出来的错误数量惊呆的小伙伴们,这些错误或许没有你想象的那么厉害,当然,你必须要要有足够的基础去修改那些错误。


   首先,打开reflector,发现代码被混淆过,看到那些乱七八糟的方法名称,你懂得。下载de4dot-3.0.3,反混淆后,将文件反编译成c#工程,本来想弄成mc++,但这种托管的c++和我最熟悉的vc6差距大着,悲剧,还是c#看着舒服。

    用vs2010打开工程编译一下,好家伙600多个错误,文件差不多有2000多个。花了一天时间一一校订。首先将跟目标代码无关的部分注释掉,目标是自己关心的那部分。现在把遇到的几个主要错误总结一下。

一提示类与方法没有定义,主要是未添加命名空间,小部分在上下文直接没找到定义的类,这部分直接注释掉,不管它
二很多类的属性获取,如class.get_Type_Num();尽管类里面有定义,但是总是提示方法出错,有一些并非直接返回一个属性值,而是做了一些运算,我只能用笨的办法写一个函数代替它或者直接pass。
三部分结构体转换失败,运算符号重载
四一些using()引起的问题,去掉using就好了。
五还有一些出来的是0++,1++,这样的问题,直接把++去掉
六vs2010类型转换的要求挺高的,不知道工程里面哪里可以设置,很多都是int和uint之类不能转换的错误
七百度求助,能删就删
         

  经过一番折腾,编译成功,但很快你会发现有一种然并卵的感觉。一运行遇到 “类型初始值设定项引发异常”的错误,好了,经过调试,定位到出错地点,问题得到解决,是静态成员初始化引起的问题。两个静态成员顺序反了,前者引用了还未初始化的后者。好了,打开,运行基本正确。

    只想说,在进步的路上,最大的障碍或许就是自己


       


0 0