背景:
在推廣產品時經常需要搭建演示環境,而每次都需要經過繁瑣的序列號申請過程,很是麻煩。尤其是在着急確認某功能時,越是着急越容易出問題,經常需要發送好幾遍序列號。我實在受不了這種折騰,就想弄個產品演示版本,遠離繁雜耗時的lic申請。
目的:
破解產品序列號限制,不影響產品正常使用。
條件:
無產品源代碼;已知產品使用.Net 4.0開發;已知正常序列號爲一加密文件;
工具:
.Net Refletor、UE、IDA.Pro.Advanced.v6.1、MSIL微軟中間語言
推薦一篇文章
http://www.topzs.com/tech-box/you_qian_ru_shen_ren_shi_cil_de_ji_ben_gou_cheng_cil_cao_zuo_ma_su_ji_biao_cil_cao_zuo_ma_da_quan_su 由淺入深認識CIL的基本構成+CIL操作碼速記表+CIL操作碼大全速查(二)
方法步驟:
首先,通過reflector找到與序列號相關的程序代碼,這個比較好達到,明顯的標誌licenseValidate類;
第二,分析license驗證機制,尋找突破口。驗證流程爲讀取加密lic文件,解密文件,通過RSA算法進行序列號校驗,根據校驗結果返回驗證結果。這個校驗還是比較糙的,我們可以直接對校驗結果的返回值進行patch,也就是不管驗證結果是否正確,都返回true,這樣就繞開序列號限制了。
第三,使用IDA打開待破解的文件,按照在reflector看到的方法名進行定位,IDA中提供圖形化界面及對應的16進制聯動功能,可以很方便的幫我們定位到需要修改的16進制地址。IDA中顯示的是IL文件格式,我們通過走讀可以找到最終校驗返回的代碼位置,就是將返回false的地方修改爲返回true。這個地方需要使用《CIL操作碼速記表+CIL操作碼大全速查》,以便於我們理解程序。
第四,使用UE打開待修改文件,定位到我們要修改的位置,可以按照每行的16進制地址號定位,我們需要返回false對應的中間語言部分ldc.i4.0修改爲ldc.i4.1,對應到hex模式下就是將ldc.i4.0對應的操作碼爲16,修改爲ldc.i4.1對應的操作碼爲17。
第四,修改完成後直接保存,測試程序是否可正常運行。
感悟:
對於.net代碼需要在編譯時進行混淆或加殼防護,對序列號的校驗應該增強校驗方式。