破解NET的四大神器(轉)


原文地址

原本這篇文章可以更早一星期寫出來與大家分享,由於某方面的原因耽擱到現在,心里竟有那么一點好像對不住大家的感覺。這當然與神器有關,因為我發現利用這四大神器我似乎覺得幾乎所有的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> 2.1
青鳥QQ群發大師.exe:
<ignore_js_op> 2.2

 

青鳥qq群發大師陌生人群發.exe:
<ignore_js_op> 2.3

 

SoftPlatorm.exe:
<ignore_js_op> 2.4

 

從上面的反編譯結果可以得知前兩個exe是沒有加殼的,可以很清晰地看到他們的C#代碼,並且可以得知他們只是兩種不同功能的啟動程序,用來啟動SoftPlatform程序,因此這次破解的程序入口就可以直接放在了SoftPlatform里面了。
但SoftPlatform是加過殼的,因此需要脫殼,接下來De4Dot就上場了。
De4Dot是命令行工具,所以需要各位熟悉如何使用命令行。在命令行打開之后,對於一般的程序直接輸入以下命令:  De4Dot  目標程序全路徑 便可以脫殼完成,對SoftPlatform.exe我們也這樣試一下:
<ignore_js_op> 2.5.JPG

 

嗯?好像沒有奏效,盡管生成了一個SoftPlatform-cleaned.exe ,但是如果用Reflector 查看的話,這個程序仍然是加殼。再仔細查看提示,便會發現原來他加了2 層殼,根據他的提示可以將其一層一層的脫掉,如下所示:( 順序不能錯只能先-p mc, -p df)
<ignore_js_op> 2.6.JPG

 

將最終的文件命名回SoftPlatform.exe, 再用Reflector 反匯編一下看:
<ignore_js_op> 2.7.JPG



啊哈哈,看,是不是很爽!所有的代碼都被反編譯為C#的代碼了,而且可讀性也很強,接下來就是去找這款軟件相關的用戶驗證的地方了。
很容易找到,其驗證的類為SoftLogin,但是在查看他的代碼的時候出現了點小問題,無法查看到,這是因為SoftPlatform.exe所引用的dll中有許多個也是被加了殼的:(下圖紅色感嘆號的)
<ignore_js_op> 2.8.JPG
這個也比較容易解決,De4Dot 嘛,使用跟脫SoftPlatform 同樣的方法,可以非常順利地脫掉它們的殼,這時再查看SoftLogin 類會看到如下關鍵代碼:( SoftLogin.method_2 方法中)
<ignore_js_op> 2.9.JPG
根據代碼的含義很容易得知WebQQ.Key.KUserGrade表示用戶的等級,WebQQ.Key.KExpireTime為過期時間,由於該軟件的驗證為網絡驗證所以整個驗證過程也還有其他的處理,因為這里只是舉個例子來說明一下工具的強大,因此我們只講述一下把用戶等級變為最高級別,過期時間延長的方法。
        另外根據上面的那段代碼可以看出在網絡驗證返回來的數據很大一部分都作為了GClass1 的函數參數( 實際上這些函數大部分都是些類似get/set 方法) ,所以我們可以估計GClass1 跟驗證會有相當大的關系
繼續閱讀GClass1的代碼可以找到如下兩個方法:
<ignore_js_op> 2.10.JPG

 

呵呵,再一次的啊哈哈,極度明顯地可以看出smethod_14 就是返回過期時間,而smethod_35 則返回的是用戶級別!
        知道怎么做了嗎,我問我知道怎么做了嗎,哈哈,輪到Reflexil 上場了,使用它將這兩個函數的返回值改掉!改之后的效果如下:( 如何使用Reflexil 修改IL 代碼及C# 代碼請大家百度搜索Reflexil 會出現一篇介紹神器Reflexil Deblector 的文章里面有講,這里不再贅述)
<ignore_js_op> 2.11.JPG

 

哈哈,過期時間總是當前時間+10000 天也就是說永不過期,用戶等級為2 是至尊vip 版,當然這個值代表至尊vip 還是要去分析其他的代碼才能得知。



案例分析就到此結束吧,要最終破解這個程序僅靠改這兩個地方遠遠不夠的,還有許多其他地方也要修正,限於篇幅這里就不再贅述了。



案例是講完了,但是DILE貌似並沒有使用到,是的整個破解過程我沒有使用它,經過脫殼之后使用Refletor都能看到源代碼級別的東西了,而且我擅長C#編程,靜態分析代碼對我來講不在話下,因此DILE沒有使用到。那為什么我還要將它列入神器之列呢,這是因為不管是自己寫程序還是學習別人的程序在某些情況下調試工具仍然必須要用到,因此選一款調試工具對我來講也是十分必要的。盡管DILE破解中沒有用到,但后來破解完成之后我還是試驗了一下它是否可以被我使用起來,至於怎么使用這里不再論述,只作個截圖展示一下,以后破解中需要用到調試技巧試再作講解。

 

以上都是個人破解中的一些經驗之談,分享與大家,希望能對大家有所幫助,如果有什么不當之處望大家盡情拍磚。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM