使用JustDecompile修改程序集


       JustDecompile是Telerik公司推出一個免費的.net反編譯工具,支持插件,與Visual Studio 2010,2012集成,能夠創建Visual Studio project文件。今天我們使用其一個插件Assembly Editor Plugin來修改程序集。首先,我們來寫一個非常簡單的時間限制程序:

   1:          static void Main(string[] args)
   2:          {   
   3:              Timebomb();
   4:          }
   5:          static void Timebomb()
   6:          {
   7:              var message = "Welcome to demo";
   8:              if (DateTime.Now > new DateTime(2012, 12, 01))
   9:              {
  10:                  Environment.Exit(0);
  11:              }
  12:              Console.WriteLine(message);
  13:              Console.Read();
  14:          }

看上面的代碼,可以看出程序時,檢查當前時間是否過期,如果是就退出了。假設我沒有程序的源代碼,下面用這個工具解除這個時間限制的問題:

2012-12-17_163414

通過反編譯后,我們看到IL, 假設您對IL有一定的了解。offset 39 

ldc.i4.0

意思是將常數0做為4個字節整數壓入棧,  offset 40 接着是

call  System.Void System.Environment::Exit(System.Int32) 

意思是調用System.dll中Environment類Exit方法。我們還可以看到具體的時間,你可修改他們,讓我們來修改多點兒東西。我們在上面單擊右鍵選擇Edit,把這兩條IL分別修改為nop 操作,從而達到讓主程序不退出的效果,最后在上面點擊右鍵另存為新的程序集。

2012-12-17_164118

最后運行剛才另存為的程序集,結果與我們期待的一致。此時我們反編譯程序集的這個方法,是如下代碼:


   1:  private static void Timebomb()
   2:  {
   3:      string str = "Welcome to demo";
   4:      if (DateTime.Now > new DateTime(0x7dc, 10, 9))
   5:      {
   6:      }
   7:      Console.WriteLine(str);
   8:      Console.Read();
   9:  }
  10:   
  11:   

小結,對於沒有混淆的程序集,我們可以看懂代碼邏輯,在沒有源代碼的情況,借用Reflexil插件可以簡單修改IL,實現想要的結果。這里的例子很簡單,希望您能舉一反三,實際情況可能比較復雜。

希望對您軟件開發有幫助。


作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
該文章也同時發布在我的獨立博客中-Petter Liu Blog


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM