當前位置:
首頁 > 最新 > 破解之道小探秘

破解之道小探秘

暑假已過了一小半了,前15天沒心思寫東西,都在「三名」那兒吊著。現在得點空了,想把前段時間破解一個軟體的心得給小結下,給有興趣的朋友一起學習下。要小結的經驗是ring 3級(windows系統下的用戶層面)下如何解除雙進程保護。

很多遊戲都是雙進程保護的,那是在驅動層(ring 0,windows系統的的系統層面)下完成的,不在本篇範圍之內。

前幾天,有個軟體要破解,但是它打開以後是兩個進程(如下圖)。

左邊這圖是保護的,實際的數據都在右邊這圖,但是右邊這圖,你用od載入不了,如果你硬要載入,會彈出「不能附加進程」對話框。(如下圖)

那麼怎麼辦呢?

根據我的經驗,肯定和禁止調試的api有關,那就先用ida靜態分析下這個程序吧,ida軟體就不具體介紹了,只說明一下,這可是軟體破解的利器,windows應用程序以及安卓的軟體都可以反彙編分析(我也沒有完全掌握它的應用)。用ida打開以後,就查下它的導入表吧,查下和調試有關的api。(如下圖)

查一下後,發現有兩處,可能和調試有關。(如下圖畫線處)

1.IsDebuggerPresent 函數

2.DebugActiveProcessStop 函數

於是,就找下百度,了解它們的用法。

IsDebuggerPresent 的解釋如下圖:

DebugActiveProcessStop函數解釋如下圖:

在百度上還有更詳細的解釋,但我認為這些就夠了;於是,我們就找出軟體中對這兩個api調用的地方,接下來就直接干它唄。

找了一下,調用IsDebuggerPresent的地方比較多,調用DebugActiveProcessStop的地方只有兩處,那就先從DebugActiveProcessStop開始干。調用的代碼如下:

第一處:

.text:00BA53DB add esp, 8

.text:00BA53DE mov eax, [ebp+DebugEvent.dwProcessId]

.text:00BA53E4 push eax ; dwProcessId

.text:00BA53E5 call ds:DebugActiveProcessStop

第二處:

.text:00BA5408 add esp, 8

.text:00BA540B cmp [ebp+var_568], 0

.text:00BA5412 jnz short loc_BA543A

.text:00BA5414 mov edx, [ebp+DebugEvent.dwProcessId]

.text:00BA541A push edx ; dwProcessId

.text:00BA541B call ds:DebugActiveProcessStop

不用關心它的代碼了,直接nop掉,這裡要注意的是,不能只nop call語句,否則會引起堆棧不平衡,軟體會崩潰;要把以上代碼全部nop。

nop以後,重新dump一個出來。但是,還是不行,打開軟體還是出現雙進程,沒辦法,再去nop掉的代碼處找找有什麼問題吧。果然,在調用DebugActiveProcessStop前有調用IsDebuggerPresent的代碼,如圖:

這就簡單了,根據經驗,把它下面的跳轉改為相反的就可以了。也就是:

.text:00ba525b處的原代碼 jnz loc_BA5481改為jz loc_BA5481。

改好以後,重新dump一個。

這次打開以後,OK,成功了,如下圖:

實際上,軟體的破解和保護是相愛相殺的,道高一尺,魔高一丈,相互促進。一棒子打死「破解」,大可不必,須知善惡存於一念,一念天堂,一念地獄。

本文至此,已大功告成,申明一下:本文只作技術交流,勿用作非法途徑。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 輔助園地 的精彩文章:

TAG:輔助園地 |