原文地址php
本來這篇文章能夠更早一星期寫出來與你們分享,因爲某方面的緣由耽擱到如今,內心竟有那麼一點好像對不住你們的感受。這固然與神器有關,由於我發現利用這四大神器我彷佛以爲幾乎全部的NET程序破解都不在話下了。而我居然在發現這神器組合後推遲了一週才分享與你們!
在開始分享以前,仍是要說明一點,說是神器到目前爲止也僅僅是對我本身而言,至於這四大神器會不會成爲對各位而言的神器就不得而言了,所以當有哪位親拿到這四大神器後仍然感到破解NET程序存在很大困難,請拍磚。
先介紹一下我眼中的四大神器:De4Dot、Reflector、Reflexil以及DILE.其中
De4Dot是一個開源的
脫殼/反混淆工具,結識到神器工具我要感謝論壇裏的朋友wan,他在個人處女新手貼」
[原創]新手破解.NET程序」中提到了這個工具,而這款工具被我奉爲了神器級工具。由於它的脫殼能力的確很強,使用它我成功地脫掉了Dotfuscator、MaxToCode處理過的程序,至於其它的加殼/反混淆工具好比說Xenocode、Them
IDA等我尚未進行過實驗,以後我將計劃研究各種加殼/反混淆工具的脫殼方法,我深信De4Dot可以給我帶來巨大幫助。(因爲De4Dot是開源的,我相信即使De4Dot暫時處理不了的殼經過擴展其功能必將能解決)
Reflector這個功能強大的NET反編譯工具相信你們都是很熟悉的,這個工具是我在沒有開始學破解以前(大概6個月以前我纔開始涉足破解逆向領域)惟一熟知的破解方面的工具。而如今的Reflector的功能更增強大了,不只僅其自身的功能在加強,並且其強大的插件系統也擴充了其功能,下面提到的Reflexil即是它其中的一個插件。
Reflexil是Reflector中的一個插件,也是開源的,它能夠從IL和C#高級語言兩個層次對目標程序的代碼進行修改/注入。認識到這個工具無疑使我十分震驚,由於在我開始學NET破解的時候常常擔憂不能像在OD裏那樣直接修改彙編代碼同樣來經過修改IL或C#代碼來改變NET程序的流程邏輯,若是是這樣子那麼我學習NET破解的方法將受到極大地限制。而Reflexil的存在徹底消除了我這方面的擔心,即使在某些地方不能從C#對目標程序進行修改,那麼我總能夠在IL代碼級別上來修改!
DILE則是一款調試工具,全稱Dotnet IL Editor,儘管如今它尚未徹底開源但相信在不久的未來也將會在sf上開源。其實一開始我並不想把它放入個人神器之列。有兩方面的緣由:第一是我比較擅長也傾向於靜態分析,可以靜態分析完成的我幾乎不會去用動態調試法,看過個人處女貼的朋友應該能夠看出來我破解的第一款軟件中根本就沒有用到調試工具;第二儘管靜態分析是個人強項,但這並不意味着我不須要一款調試工具,若是你們百度或者Google一下會發現有不少文章在講Reflexil與Deblector並稱他們爲神器,而Deblector就是Reflector下的一個調試工具,因此一開始我很但願將Deblector做爲我調試方面的神器工具,可是我最終沒能把這個工具使用起來,網上的文章都在講Deblector啓動開始調試以後會斷在程序的入口處,但我下載了它的幾個版本,都沒有達到這個效果,它並無在入口處斷下來,而是嗖嗖地直接彈出了程序的主界面。
光說不練,很難讓人相信這能夠做爲神器工具的強大之處,下面就以我實際破解案例來展現一下這四大神器的威力。
要破解的這款軟件的是青鳥QQ羣發大師,其軟件組成以下截圖:
首先,在Reflector裏查看一下其中的exe文件,看是否有混淆或者加殼。
<ignore_js_op>
青鳥QQ羣發大師.exe:
<ignore_js_op>
青鳥qq羣發大師陌生人羣發.exe:
<ignore_js_op>
SoftPlatorm.exe:
<ignore_js_op>
從上面的反編譯結果能夠得知前兩個exe是沒有加殼的,能夠很清晰地看到他們的C#代碼,而且能夠得知他們只是兩種不一樣功能的啓動程序,用來啓動SoftPlatform程序,所以此次破解的程序入口就能夠直接放在了SoftPlatform裏面了。
但SoftPlatform是加過殼的,所以須要脫殼,接下來De4Dot就上場了。
De4Dot是命令行工具,因此須要各位熟悉如何使用命令行。在命令行打開以後,對於通常的程序直接輸入如下命令: De4Dot 目標程序全路徑 即可以脫殼完成,對SoftPlatform.exe咱們也這樣試一下:
<ignore_js_op>
嗯?好像沒有奏效,儘管生成了一個SoftPlatform-cleaned.exe,可是若是用Reflector查看的話,這個程序仍然是加殼。再仔細查看提示,便會發現原來他加了2層殼,根據他的提示能夠將其一層一層的脫掉,以下所示:(順序不能錯只能先-p mc,再-p df)
<ignore_js_op>
將最終的文件命名回SoftPlatform.exe,再用Reflector反彙編一下看:
<ignore_js_op>
啊哈哈,看,是否是很爽!全部的代碼都被反編譯爲C#的代碼了,並且可讀性也很強,接下來就是去找這款軟件相關的用戶驗證的地方了。
很容易找到,其驗證的類爲SoftLogin,可是在查看他的代碼的時候出現了點小問題,沒法查看到,這是由於SoftPlatform.exe所引用的dll中有許多個也是被加了殼的:(下圖紅色感嘆號的)
<ignore_js_op>
這個也比較容易解決,De4Dot嘛,使用跟脫SoftPlatform一樣的方法,能夠很是順利地脫掉它們的殼,這時再查看SoftLogin類會看到以下關鍵代碼:(在SoftLogin.method_2方法中)
<ignore_js_op>
根據代碼的含義很容易得知WebQQ.Key.KUserGrade表示用戶的等級,WebQQ.Key.KExpireTime爲過時時間,因爲該軟件的驗證爲網絡驗證因此整個驗證過程也還有其餘的處理,由於這裏只是舉個例子來講明一下工具的強大,所以咱們只講述一下把用戶等級變爲最高級別,過時時間延長的方法。
另外根據上面的那段代碼能夠看出在網絡驗證返回來的數據很大一部分都做爲了GClass1的函數參數(實際上這些函數大部分都是些相似get/set方法),因此咱們能夠估計GClass1跟驗證會有至關大的關係
繼續閱讀GClass1的代碼能夠找到以下兩個方法:
<ignore_js_op>
呵呵,再一次的啊哈哈,極度明顯地能夠看出smethod_14就是返回過時時間,而smethod_35則返回的是用戶級別!
知道怎麼作了嗎,我問我知道怎麼作了嗎,哈哈,輪到Reflexil上場了,使用它將這兩個函數的返回值改掉!改以後的效果以下:(如何使用Reflexil修改IL代碼及C#代碼請你們百度搜索Reflexil會出現一篇介紹神器Reflexil與Deblector的文章裏面有講,這裏再也不贅述)
<ignore_js_op>
哈哈,過時時間老是當前時間+10000天也就是說永不過時,用戶等級爲2是至尊vip版,固然這個值表明至尊vip仍是要去分析其餘的代碼才能得知。
案例分析就到此結束吧,要最終破解這個程序僅靠改這兩個地方遠遠不夠的,還有許多其餘地方也要修正,限於篇幅這裏就再也不贅述了。
案例是講完了,可是DILE貌似並無使用到,是的整個破解過程我沒有使用它,通過脫殼以後使用Refletor都能看到源代碼級別的東西了,並且我擅長C#編程,靜態分析代碼對我來說不在話下,所以DILE沒有使用到。那爲何我還要將它列入神器之列呢,這是由於無論是本身寫程序仍是學習別人的程序在某些狀況下調試工具仍然必需要用到,所以選一款調試工具對我來說也是十分必要的。儘管DILE破解中沒有用到,但後來破解完成以後我仍是試驗了一下它是否能夠被我使用起來,至於怎麼使用這裏再也不論述,只做個截圖展現一下,之後破解中須要用到調試技巧試再做講解。
以上都是我的破解中的一些經驗之談,分享與你們,但願能對你們有所幫助,若是有什麼不當之處望你們盡情拍磚。