zoukankan      html  css  js  c++  java
  • 通过反编译飞信总结的代码除错技巧

            前些日子玩了一玩飞信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 (未添加任何功能代码)

  • 相关阅读:
    1 python 基础
    php数据几行代码导出到excel(非插件)
    支付宝单笔转账demo (改配置直接用)
    require include 一个隐藏的用法:作用域。
    require include php5中最新区别,百度上好多错的。
    MySQL 普通注册插入优化。
    nginx 下开启pathinfo模式
    微信网页授权demo2
    事务处理不支持的可能程序外问题。
    php5.3中namespace的说明,帮助初次接触namespace的phper快速理解
  • 原文地址:https://www.cnblogs.com/yuanbao/p/1158750.html
Copyright © 2011-2022 走看看