WinForm的EXE破解(基於IL修改)

1、目的與目標

1.1 主題目的

  部門新人較多,但願經過本次分享讓同窗們對如下知識點有個認識:html

  • 破解原理
  • IL原理
  • 強簽名與加密
  • resx文件

   因爲時間有限,本文做爲部門分享演示過程當中輔助性文檔,會對文中一些關鍵點列出參考學習的博客地址,供你們課後學習。java

1.2 本次實戰最終要達到的效果

   本次實戰中所要達成效果以下圖:ios

1. 登陸時跳過,判斷是否註冊函數,直接進入業務操做模塊;c++

2. 修改logo大圖,改爲其餘圖片,以下圖所示;c#

clipboard_thumb11                 clipboard_thumb1  

                                圖一 破解前                                                             圖二 破解後(去掉登陸限制)windows

2、破解過程

  一個程序破解的過程,不管是.net仍是c++等,過程大體都是這樣。安全

1.瞭解業務過程(繞過的點);app

2. 找到對應的源代碼;函數

3. 刪除驗證代碼;工具

4. 從新爲編譯可執行文件;

*,只是c++等,須要更爲複雜的逆向工程,脫殼等步驟;

那咱們就按此步驟開始;

【【源代碼】】今後處獲取

2.1. 找到須要繞過的點;

    通過對須要破解的程序分析,最先突破就在找到【登陸】按鈕的代碼位置;一般驗證的函數都應該獨立封裝爲一個函數;因此得出兩種繞過驗證的方式:

  • 刪除業務邏輯中的驗證代碼;
  • 修改驗證業務邏輯,不論是否註冊都返回已註冊;

2.2. 找到對應源代碼

     這裏借用反編譯工具來將IL反編譯可讀性更高的c#代碼,這樣更快速的幫助咱們定位到button點擊事件或驗證函數(固然沒有這步也是能夠,只是爲了提升咱們理解代碼的速度)。

      反編譯工具一般用這兩種「Reflector」 和 「ILSpy」 ,Reflector的反編譯代碼還原度更高可是非開源非免費(能夠找低版本6.8如下),ILSpy反編譯程度不如Reflector高,可是開源免費,你們能夠視本身具體的需求來選取;

1. 使用Reflector查看源代碼, 操做說明

2. 查看WindowsFormsApp1.exe ,以下圖能夠看到,按鈕【登錄】的業務邏輯爲,先調用Class1.getKey()方法來判斷是否註冊;

clipboard_thumb13

圖四,反編譯後查看按鈕點擊事件

2.3. 使用ildasm將exe和dll 逆向成IL文件

2.3.1 使用ildasm 將exe反編譯爲il文件並修改

      咱們使用微軟官方提供了ildasm.exe來將.net程序反向成il文件

  1. 找到 ildasm.exe 一般在C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools;或者使用vs提供的開發人員命令操做符。

          可是須要注意路徑,在demo中我已經將ildam和ildasm都打包到文件夾中了

     2.  輸入 ildasm.exe WindowsFormsApp1.exe /out=il\windowsformsapp1.il 

     3.  修改IL代碼,跳過驗證:

           1.打開windowsformsapp1.il;

clipboard_thumb17

        2. IL重點行數分析:

             128行,調用 Class1.getKey(),壓入值到堆棧;

             129行,idc.i4.0在Stack 中int長度爲4,值爲0=>對應代碼爲if(Class1.getKey()==false)中的false

             130行,ceq 比較

             136行,定義文本"請先註冊"

             137行,調用MessageBox.show

             138行, pop 彈出堆棧中的值

             139行,轉向 IL 0028,對應代碼if(){}else{}那個代碼塊

         3. 修改il方式一 (不調用:Class1.getkey())

              將128行修改成:IL_0001: ldc.i4.1 //call bool [ClassLibrary1]ClassLibrary1.Class1::getkey()

              使用2.3.2從新生成exe,反編譯後能夠看到代碼變成下圖:

clipboard_thumb18

           4. 邏輯修改二,依然調用驗證。可是取消else代碼塊

                將139行註釋。註釋後能夠參照方法2.3.2從新編譯生成exe。查看新的exe的源代碼以下:

clipboard_thumb21

2.3.2 從新生成windowsformsapp1.exe(記得這一步哦)

        ilasm.exe windowsformsapp1.il /out=windowsformsapp1.exe

2.3.3  其餘修改方案

       不改windowform1.il,修改ClassLibrary.dll的驗證邏輯

      相似方案一,留做你們本身研究

2.4. 修改資源文件,修改圖片;

修改exe中的圖片,使用如下步驟:

1. 將resources文件轉爲resx

ResGen.exe WindowsFormsApp1.Properties.Resources.resources WindowsFormsApp1.Properties.Resources.resx

2. 使用vs打開新生成的resx文件,替換舊圖片icon-02.png,以下圖:

clipboard_thumb22

3. 或用記事本打開resx文件,將base64文本替換爲新圖片的base64

4. 從新編譯爲resources

      ResGen.exe WindowsFormsApp1.Properties.Resources.resx WindowsFormsApp1.Properties.Resources.resources

* .resources,編譯後的資源文件,是沒法直接打開沒法直接保存圖片文件;使用反編譯工具反編譯後默認是產生.resources;而.resx 可被VS打開的文件;

那怎麼將resources轉爲resx呢,咱們能夠利用官方提供的Resgen.exe進行文件轉換

https://docs.microsoft.com/zh-cn/dotnet/framework/tools/resgen-exe-resource-file-generator

3、防護方法

既然.net這麼輕易的被破解,那咱們要怎麼對咱們的程序進行安全防禦,以保證咱們的代碼安全呢;主要也是經過如下兩點:

  • 使用強簽名,防止DLL被篡改;
  • 使用代碼混淆工具,防止被反編譯源碼;

強簽名:

     本文不在描述,強簽名的做用和使用方式

     官方的使用方式   一些博友的博客

代碼混淆工具:

代碼混淆工具備不少,如:微軟官方的Dotfuscator,有開源的ConfuserEX;還有其餘的xeoncode、foxit;

代碼混淆能夠單獨做爲一個主題鋪開來講(java,ios 等等都面臨這個問題,因此不要過度擔憂.net)

ConfuserEx操做步驟:https://blog.csdn.net/xiaoyong_net/article/details/78988264

4、最後

最後,做爲開發人員的咱們並不該該法盜用他人勞動成果,這篇文章只是爲了讓你們更好的認識IL語言,以及IL語言模式的缺點與防護方式,讓你們可以更改好的提升防範意識,本文並未真正深刻到破解細節中去,僅起來點睛入門的做用,有興趣的同窗能夠自行深刻去研究,win32下的逆向工程、加殼、脫殼等技術;

【【源代碼】】今後處獲取

相關文章
相關標籤/搜索