.NET中ildasm和ilasm命令的使用

ildasm和ilasm命令的使用html

http://blog.163.com/zhchf_52@yeah/blog/static/6782297420111022633807/web

2.建立一個新的隨機密鑰對:
sn -k Interop.Scripting.snk
3.反編譯目標程序集
ildasm Interop.Scripting.dll /out=Interop.Scripting.il
3.從新編譯,附帶強命名參數
ilasm Interop.Scripting.il /dll /resource=Interop.Scripting.res /key=Interop.Scripting.snk /optimize
4.驗證簽名信息
ide

sn -v Interop.Scripting.dll函數

使用ildasm命令將程序集轉換爲il
ildasm [DLLPATH] /output=[OUTPUTPATH]

在Reflector中把須要修改的方法拷貝到使用VS新建的一個項目的類中,經過添加引用,使這個方法能正常編譯成功,而後就能夠根據須要修改代碼,而後編譯該新建的項目,也使用ildasm命令將其發編譯,而後在記事本中打開該發編譯il文件,查找到該方法,而後拷貝該方法替換源程序集反編譯il文件,最後使用ilasm命令將il文件編譯爲dll,使用reflector打開新編譯的dll,看看修改結果。

舉例:
原始dll App_Code.dll中GBO類中方法AddTopNewsToAllData有邏輯錯誤,須要修改
[操做以前先備份一下該程序集]
使用ildasm命令反編譯ildasm d:\\App_Code.dll /output=d:\\App_Code\\App_Code.il
而後在App_Code目錄下會產生
工具

App_Code.ilApp_Code.res這兩個文件post


昨天畫了半個多小時把 SQLDBCompare 這個.NET 程序給破解了一下,原本只有15天的試用期,破解之後就沒有這個問題了,hoho。 

如今我寫一個簡單的實例程序來提一下使用.NET SDK 中的幾個有用的工具來修改別人的代碼邏輯。好比拿掉註冊信息,等等。固然這裏只是一個學習用途。  

好比我有個程序,用戶輸入一個 ID,若是大於100 則改用戶是合法的用戶,不然就是非法的。程序比較簡單,主要是 Demo 
我但願修改一下輸入任何 ID,都是合法用戶。 

爲了方面,咱們直接用記事本寫一個簡單的程序。 

using System; 
 
public  class DemoCrack 

    public static void  Main() 
    
        System.Console.WriteLine("Enter your ID"); 
        string s=Console.ReadLine(); 
        int j=System.Int32.Parse(s); 
        if(IsValid(j)==true
            
                Console.WriteLine("You are valid User"); 
            }
 
        else 
            
                Console.WriteLine("Invalid user"); 
            }
 
    }
 
 
    public static  bool IsValid(int i) 
    
        if(i>100) 
            
                return true
            }
 
        else 
            
                return false
            }
 
    }
 
}

文件另存爲 DemoCrack.cs 

而後編譯這個應用程序,爲了讓你們容易讀懂 中間代碼,我加入調試信息。 
運行 
csc DemoCrack.cs /debug+ 

DemoCrack.exe 就編譯好了。 而這個 Exe 通常就是咱們一般拿到別人寫的組件或者應用 
運行這個exe 

DemoCrack.exe 

Enter your ID 
12 
Invalid user 

Enter your ID 
120 
You are valid User 


假設咱們如今只有 DemoCrack.exe 這個文件,我但願用戶輸入任何ID 都是合法的用戶,接下來就是咱們使用三個工具的時候了:) 

你可使用reflector 看一下這個源代碼,一看就知道如何去修改代碼邏輯,但願把 IsInvalid 這個函數永遠返回true 就能夠了。 


咱們首先拿到中間代碼:爲了讓你們讀懂il,我把源代碼做爲註釋放在il 種了 

運行 

ildasm /source DemoCrack.exe /out:crack.il 

crack.il 就是咱們的中間代碼了,hoho。 接下來咱們對他作稍微的修改 

文件中 關於IsInvalid 的大概邏輯是: 

  .method  public hidebysig  static  bool  IsValid(int32 i) cil managed 
  
    // Code size       15 (0xf) 
    .maxstack  2 
    .locals init ([0] bool CS$00000003$00000000) 
//000019:  
//000020:     public static  bool IsValid(int i) 
//000021:     { 
//000022:         if(i>100) 
    IL_0000:  ldarg.0 
    IL_0001:  ldc.i4.s   100 
    IL_0003:  ble.s      IL_0009 
 
//000023:             { 
//000024:                 return true; 
    IL_0005:  ldc.i4.1 
    IL_0006:  stloc.0 
    IL_0007:  br.s       IL_000d 
 
//000025:             } 
//000026:         else 
//000027:             { 
//000028:                 return false; 
    IL_0009:  ldc.i4.0 
    IL_000a:  stloc.0 
    IL_000b:  br.s       IL_000d 
 
//000029:             } 
//000030:     } 
    IL_000d:  ldloc.0 
    IL_000e:  ret 
  }
  //  end of method DemoCrack::IsValid


這幾個指令足夠簡單了吧,我把他替換爲 
  .method  public hidebysig  static  bool  IsValid(int32 i) cil managed 
  
    // Code size       15 (0xf) 
    .maxstack  2 
    .locals init ([0] bool CS$00000003$00000000) 
//000019:  
//000020:     public static  bool IsValid(int i) 
//000021:     { 
//                return true; 
    IL_0000:  ldc.i4.1 
    IL_0001:  stloc.0 
  
 
    IL_0002:  ldloc.0 
    IL_0003:  ret 
  }
  //  end of method DemoCrack::IsValid

而後保存一下這個文件。 

接下來就是編譯成exe 
運行 

Ilasm crack.il 爲了演示,我就不修改其圖標等其餘設資了。 

而後確認一下咱們改的 il 沒有問題 
調用 

PEVerify Crack.exe 

一切OK 的話,就大功告成了。 

接下來運行 Crack.exe 
Enter your ID 
12 
You are valid User 

PS. 簡單的一個 Demo,不用用於非法用途。 

接下來你能夠考慮一下,如何不讓別人來Crack 本身的應用程序,若是是你,你會增麼作。 
不要僅僅是代碼攪亂之類的,hoho 





分類:  .NET 企業應用
相關文章
相關標籤/搜索