部門新人較多,但願經過本次分享讓同窗們對如下知識點有個認識:html
因爲時間有限,本文做爲部門分享演示過程當中輔助性文檔,會對文中一些關鍵點列出參考學習的博客地址,供你們課後學習。java
本次實戰中所要達成效果以下圖:ios
1. 登陸時跳過,判斷是否註冊函數,直接進入業務操做模塊;c++
2. 修改logo大圖,改爲其餘圖片,以下圖所示;c#
圖一 破解前 圖二 破解後(去掉登陸限制)windows
一個程序破解的過程,不管是.net仍是c++等,過程大體都是這樣。安全
1.瞭解業務過程(繞過的點);app
2. 找到對應的源代碼;函數
3. 刪除驗證代碼;工具
4. 從新爲編譯可執行文件;
*,只是c++等,須要更爲複雜的逆向工程,脫殼等步驟;
那咱們就按此步驟開始;
【【源代碼】】今後處獲取
通過對須要破解的程序分析,最先突破就在找到【登陸】按鈕的代碼位置;一般驗證的函數都應該獨立封裝爲一個函數;因此得出兩種繞過驗證的方式:
這裏借用反編譯工具來將IL反編譯可讀性更高的c#代碼,這樣更快速的幫助咱們定位到button點擊事件或驗證函數(固然沒有這步也是能夠,只是爲了提升咱們理解代碼的速度)。
反編譯工具一般用這兩種「Reflector」 和 「ILSpy」 ,Reflector的反編譯代碼還原度更高可是非開源非免費(能夠找低版本6.8如下),ILSpy反編譯程度不如Reflector高,可是開源免費,你們能夠視本身具體的需求來選取;
1. 使用Reflector查看源代碼, 操做說明
2. 查看WindowsFormsApp1.exe ,以下圖能夠看到,按鈕【登錄】的業務邏輯爲,先調用Class1.getKey()方法來判斷是否註冊;
圖四,反編譯後查看按鈕點擊事件
2.3.1 使用ildasm 將exe反編譯爲il文件並修改
咱們使用微軟官方提供了ildasm.exe來將.net程序反向成il文件
可是須要注意路徑,在demo中我已經將ildam和ildasm都打包到文件夾中了
2. 輸入 ildasm.exe WindowsFormsApp1.exe /out=il\windowsformsapp1.il
3. 修改IL代碼,跳過驗證:
1.打開windowsformsapp1.il;
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,反編譯後能夠看到代碼變成下圖:
將139行註釋。註釋後能夠參照方法2.3.2從新編譯生成exe。查看新的exe的源代碼以下:
ilasm.exe windowsformsapp1.il /out=windowsformsapp1.exe
2.3.3 其餘修改方案
不改windowform1.il,修改ClassLibrary.dll的驗證邏輯
相似方案一,留做你們本身研究
修改exe中的圖片,使用如下步驟:
1. 將resources文件轉爲resx
ResGen.exe WindowsFormsApp1.Properties.Resources.resources WindowsFormsApp1.Properties.Resources.resx
2. 使用vs打開新生成的resx文件,替換舊圖片icon-02.png,以下圖:
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
既然.net這麼輕易的被破解,那咱們要怎麼對咱們的程序進行安全防禦,以保證咱們的代碼安全呢;主要也是經過如下兩點:
強簽名:
本文不在描述,強簽名的做用和使用方式
代碼混淆工具:
代碼混淆工具備不少,如:微軟官方的Dotfuscator,有開源的ConfuserEX;還有其餘的xeoncode、foxit;
代碼混淆能夠單獨做爲一個主題鋪開來講(java,ios 等等都面臨這個問題,因此不要過度擔憂.net)
ConfuserEx操做步驟:https://blog.csdn.net/xiaoyong_net/article/details/78988264
最後,做爲開發人員的咱們並不該該法盜用他人勞動成果,這篇文章只是爲了讓你們更好的認識IL語言,以及IL語言模式的缺點與防護方式,讓你們可以更改好的提升防範意識,本文並未真正深刻到破解細節中去,僅起來點睛入門的做用,有興趣的同窗能夠自行深刻去研究,win32下的逆向工程、加殼、脫殼等技術;
【【源代碼】】今後處獲取