通过反编译飞信总结的代码除错技巧

        前些日子玩了一玩飞信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代码。
        本文只作技术交流用,请阅读者不要用于商业活动或破坏活动,否则后果自负。
附:
       重新编译通过的YBFetion.exe (未添加任何功能代码)

转载于:https://www.cnblogs.com/yuanbao/archive/2008/04/17/1158750.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值