C#软件反编译后代码错误的改错方法

 前些日子玩了一玩飞信2008,有一天心情不错,静下心来好好分析了一下这个软件。发现它是.NET程序,而且EXE也未加混淆(大公司就是牛),先是通过reflector简单看了看,代码太多,看得一头雾水,也没学到什么;好奇心又让我很想了解他的编程技术,于是动了工程级反编译,VS中重编译,动态调试运行的念头,经过了半天的努力,总算马马虎虎地可以调试运行了,呵呵,没有比这学习更爽的了!
        以下是我在VS中整理的笔记:
        (目标:飞信2008 PC体验版    工具:VS2005+ Xenocode 2007+自已写的工具)
    
 Xenocode反编译及代码整理记录

1 、Xenocode中设置输出数字为十进制

2 、输出后中文文本为 \ uXXXX , 可采用编码工具转成中文

3 、new  () 改成null ;

4 、反编译后代码中嵌套数组new int[ 101 ][grayPixel[w ,  h]] ++; 改成 
           int[] Totaldark 
=  new int[ 101 ] ;
           Totaldark[grayPixel[w
,  h]] ++;

5 、形如“ +=  delegate ( ”的转换
   如: this
. shapeButton . DropDownClosed  +=  delegate ( object sender ,  EventArgs e )  {this . shapeButton . DropDownItems . Clear (); } ;
   反编译成    this
. shapeButton . DropDownClosed  +=  new System . EventHandler ( this .< InitializeComponent > b__2 );
   变成了用
+=  new System . EventHandler,标志 < InitializeComponent > 为包含代码的函数
   标志__CachedAnonymousMethodDelegate XXXX    
=  new EventHandler  XX
代码整理方法:
   将
> b__替换成_b__ , 去掉 <,
   this
. shapeButton . DropDownClosed  +=  new System . EventHandler ( this . InitializeComponent_b__2 );

6 、自定义类的转换,标志c__DisplayClass      //   __locals    
   如:         WaitCursorChanger wcc 
=  new WaitCursorChanger ( this );
            using 
( ChooseToolDefaultsDialog dialog  =  new ChooseToolDefaultsDialog ())
            {
                EventHandler shownDelegate 
=  null ;
                shownDelegate 
=
                    delegate
( object sender2 ,  EventArgs e2 )
                    {
                        wcc
. Dispose ();
                        wcc 
=  null ;
                        dialog
. Shown - =  shownDelegate ;
                    }
;
   反编译成:
            PdnToolBar
.<> c__DisplayClass4  <> 8__locals5  =  new PdnToolBar .<> c__DisplayClass4 ();
            
<> 8__locals5 . dialog  =  new ChooseToolDefaultsDialog ();
            try
            {
                PdnToolBar
.<> c__DisplayClass6  <> 8__locals7  =  new PdnToolBar .<> c__DisplayClass6 ();
                
<> 8__locals7 .<> 8__locals5  =   <> 8__locals5 ;
                
<> 8__locals7 .<> 8__locals3  =   <> 8__locals3 ;
                
<> 8__locals7 . shownDelegate  =  null ;
                
<> 8__locals7 . shownDelegate  =  new EventHandler (<> 8__locals7 .< ToolChooserStrip_ChooseDefaultsClicked > b__1 );
                
<> 8__locals5 . dialog . Shown  +=   <> 8__locals7 . shownDelegate ;
                
<> 8__locals5 . dialog . SetToolBarSettings ( this . appWorkspace . GlobalToolTypeChoice ,  this . appWorkspace . AppEnvironment );
代码整理方法:
    将4__this替换成4__this
, 类中有实例

7 、变量定义,反编译后有时会连一块
        private bool  AutoReconnectEventAttached
;
    变成了    private   AutoReconnectEventAttached
;
    
8 、反编译后出现( 0 )e . aaa 改成 e . aaaa
    区别Function
( 0 )

9 、EventHandler < 0 >, 改成EventHandler,此事件一般都有变化
    
( EventHandler )  this . EndDownload ,  改成this . EndDownload 

10 、反编译后出现  ()  value ;  改为value,此时变量定义有问题 , Bool or int

11 、反编译后出 ( T )  this . _personalgroup . GroupInfo . Portrait ;     改成this . _personalgroup . GroupInfo . Portrait 类型转换
    反编译后出
( TKey )  this . _personalgroup . GroupInfo . Portrait ;     改成this . _personalgroup . GroupInfo . Portrait 类型转换

12 、将反统标识去掉, // [CompilerGenerated]

13 、反编译后enum属性付值时,会只给数字。如enum{first , second}会为成0, 1 。    可重新改成相应的属性值

14 、Decimal . op_Modulus操作符找不到,改成% 

15 、反编译后出现两次类实例,如PsPrivacyControl . PsPrivacyControl .     改成PsPrivacyControl .

16 、有代码Ref必须转为out才能编译通过

        以上纯属个人经验,个人觉得可以作为.NET爱好者的一种学习成功代码的手段,相关经验同样可用于分析其它较大型.NET代码。
        本文只作技术交流用,请阅读者不要用于商业活动或破坏活动,否则后果自负。
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: VC反编译软件,也称为Visual C++反编译软件,是一种可以将已经编译成机器代码的程序重新转换回可读的源代码工具。VC反编译软件主要用于逆向工程、代码审查、软件安全分析等领域。 VC反编译软件能够将机器代码进行逆向转换,还原出编写该程序时所使用的高级语言源代码。通过使用VC反编译软件,我们可以更加容易地理解程序的逻辑结构和运行过程,对程序进行修改和优化。 VC反编译软件一般支持多种编程语言,主要包括C++、C#等。通过将编译生成的可执行文件或动态链接库加载到VC反编译软件中,软件会尝试还原原始的源代码,包括变量名、函数名、类名等。 但是需要注意的是,VC反编译软件并不是完美的,它无法还原出源代码中的注释、宏定义等细节。此外,当程序使用了加密、压缩、混淆等保护措施时,VC反编译软件的效果会大打折扣。 由于VC反编译软件的存在,一些开发者可能担心自己的代码会被不法分子通过反编译获取。因此,在进行软件开发时,我们应该注意代码的安全性,采取一些措施来防止代码反编译,例如使用代码混淆技术、加密关键部分等。 总而言之,VC反编译软件是一种能够将机器代码还原为可读源代码工具,它在逆向工程、代码审查、软件安全分析等领域发挥着重要的作用。然而,如何保护好自己的代码,避免被反编译,也是我们需要思考和解决的问题。 ### 回答2: VC反编译软件是一种能够将已经编译后的VC程序反向解析为可读的源代码工具。VC指的是Visual C++,它是一种用于开发Windows操作系统上的应用程序的集成开发环境。反编译软件可以通过分析程序的二进制文件,还原出程序的源代码结构和逻辑。 反编译软件的作用主要有两方面。首先,对于一些没有提供源代码软件,我们可以使用反编译软件将其反编译,从而了解软件的实现原理和逻辑。这对于研究学习和逆向工程都非常有用。其次,对于一些已经编译的程序,在需要修改或者调试的时候,我们可以使用反编译软件将其反编译为源代码,方便我们进行修改和调试。 然而,需要注意的是,反编译软件并不是万能的,它所还原出的源代码并不一定完全和原始的源代码相同。反编译只是通过解析二进制文件还原出源代码的一种技术手段,并且在这个过程中可能会存在误差。因此,反编译出的源代码可能会比原始的源代码缺失一些细节和结构。 另外,需要强调的是,反编译软件的使用需要严格遵守法律法规,不得用于侵犯他人的知识产权和商业利益。在使用反编译软件时,应该遵循合法合规的原则,尊重程序作者的权益,并仅限于学习、研究和技术交流等合法目的。 总之,VC反编译软件是一种能够将已经编译后的VC程序反向解析为可读的源代码工具。它在研究学习和逆向工程中有一定的作用,在使用时需要遵守法律法规并保持合法合规的原则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值