?

Jan 05 2017

C# 帶簽名dll破解

首頁 » 滲透測試 » C# 帶簽名dll破解   

首先申明,本文只是從技術的角度來分析下怎樣破解帶簽名的C#寫的dll文件。大家如有遇到收費的軟件或類庫還是應該去購買正版,程序員何苦為難程序員呢。

不帶簽名的破解

不帶簽名的dll文件的破解很簡單,通常有下面三個步驟:

1. 使用反編譯工具對dll文件進行反編譯,找到校驗過期的相關代碼,反編譯工具可以使用ILSpy或Reflector;

2. 使用ildasm.exe工具將dll導出成il文本文件,在該文件中找到相關的代碼進行修改;

3. 使用ildasm.exe工具將修改后的il文件編譯成dll文件。

下面看一個例子,假設有ClassLibrary1.dll文件,該類庫中的有關校驗過期的代碼如下:

   public static class License
    {
        private static bool licenseExpired;

        internal static void CheckLicense()
        {
            //if語句中判斷是否過期
            if(true)
            {
                //標示是否過期,設置成true表示過期
                License.licenseExpired = true;
            }
        }
    }

使用ILSpy進行反編譯看到的代碼如下:

1.jpg

 

在使用ildasm.exe對該dll文件進行導出成il文本文件:

2.jpg

 

使用文本編輯器打開il文件,找到校驗對相關代碼:

3.jpg

 

 

1. 上圖中的紅框部分代碼對應的就是 License.licenseExpired = true; 這行代碼;

2. 第97行代碼 IL_0004:ldc.i4.1 代表的就是true,等待著賦值給下面的licenseExpired;

3. 修改97行的代碼為 IL_0004:ldc.i4.0 ,然后保存il文件。

打開命令行,進入到il文件所在到目錄,執行下面的命令;

c:\windows\microsoft.net\framework\v4.0.30319\ilasm.exe /dll/resource=ClassLibrary1.res ClassLibrary1.il

4.jpg

現在在il文件的目錄中可以看到生成的dll文件:

 

5.jpg

反編譯生成的dll文件,可以看出代碼已經被修改,如下圖:

 

1.jpg

 

 

 

帶簽名dll的破解

如果程序集是帶簽名的程序集,在經過上面的步驟進行破解后,dll文件依然不能正常使用,通常會報如下錯誤:

未能加載文件或程序集“ClassLibrary1”或它的某一個依賴項。未能驗證強名稱簽名。此程序集可能已被篡改,或者已被延遲簽名,但沒有用正確的私鑰進行完全簽名。 (異常來自 >HRESULT:0x80131045)

經過對比發現經過簽名的dll文件和未簽名的dll文件的區別在于簽名的dll文件生成的il代碼中會多處如下的代碼:

6.jpg

 

 

將il代碼中上面紅框部分代碼刪除,重新生成的dll文件就是去掉了簽名的dll文件。不出什么意外的話此時的dll文件可以正常使用了,但有時又會出現如下的錯誤:

重寫成員“xxx”時違反了繼承安全性規則。重寫方法的安全可訪問性必須與所重寫方法的安全可訪問性匹配

解決該問題需要在Assemblyinfo.cs文件中添加如下代碼:

[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

 

 7.jpg

 

 

上面添加的代碼對應的il代碼為:

  .custom instance void [mscorlib]System.Security.SecurityRulesAttribute::.ctor(valuetype [mscorlib]System.Security.SecurityRuleSet) = ( 01 00 01 00 00 )
將上面的代碼添加到il的相應位置,重新生成dll文件就OK了。

總結

本文是以技術研究學習為目的,不提倡對收費的軟件或類庫進行破解使用。

 

 

 

 

 

 

 

如果您喜歡本博客,歡迎點擊圖片定訂閱到郵箱填寫您的郵件地址,訂閱我們的精彩內容:

正文部分到此結束

文章標簽: c#破解

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «[.NET逆向] 破解NET的四大神器 | PHPMailer曝遠程代碼執行高危漏洞(CVE-2016-10033)含PoC»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖