歡迎光臨
我們一直在努力

零基礎學破解-第五集

作業系統環境:Windows XP Pro 32bit 版本2002  SP3
使用工具:Immunity Debugger ,用OllyDbg也可以,(這邊我自己是使用別人改良過的簡體中文化Immunity )
查殼工具:PEID (用來偵測程式有沒有被加殼)
要破解的軟體:视频转换专家 下載點,壓縮密碼lonelysec
(下載的練習程式不保證是安全無毒的,所以建議都下載安裝在虛擬機上。如載點失效,請私訊波波粉專)


這集主要介紹如何修改EAX來破解程式。在開始前可以先Google了解下EAX(al)、test指令、je指令。
五集總結下來,大家應該都有個基本的思路了,大致上都是先查殼,然後丟OD,搜索關鍵字,找看看有沒有跳轉...然後破解。思路是活的,要靈活運用,分享的方式不一定是最好的,大家可以多嘗試看看有沒有其他方式破解。
每集都會拿一個程式來當作範例,分享給大家,程式也有分享在文章裡,可以下載練習。

先用PEID查詢程式有沒有被加殼,通常這都是第一步。

這邊可以觀察到程式是 Delphi,沒有加殼過。

開啟程式,跳出"軟件註冊",這邊我們一樣隨便輸入

註冊名:LonelyPoPo

註冊碼:111111111111111111111

因為是亂輸入的,肯定會出錯。但有看過前面幾集教學的朋友們一定都記得,我們主要是觀察程式的運作流程、記住程式的訊息,方便我們去調試。

這邊我們記住幾個關鍵字,例如:註冊、出錯啦、註冊碼有誤...等等的。

老方法,我們在Immunity Debugger 透過ASCII去搜尋關鍵字。

這邊我們搜尋 "註冊" 關鍵字。

這邊很幸運找到一個看起來可以利用的資訊 "感謝您註冊我們的軟件......."

我們追蹤下去看看。

點進來後,我們一樣觀察他的運作流程,可以往上看他上方有沒有什麼判斷式去判斷你的註冊名與註冊碼。

可以觀察到在 0050A980地址 這邊有一個 call CoolVide.0050BA88,

而下面則是test al,al。test 就是邏輯運算指令,test al,al 的意思就是比較上面Call的返回值,可能返回0(假)會返回1(真) 等等。

0050A987地址則是 je的判斷式,在前面幾集我們有提到 "je ;等於則跳轉"。

je根據上面比較的返回值來決定(判斷)要跳轉或不跳轉。

我們這邊有兩個方式,一種是在0050A980地址 call CoolVide.0050BA88,下斷點,然後去更改值,讓他的je判斷式能夠實現跳轉。

第二種是直接更改je 把je改成jnz也可以,或是其他的。破解方法很多種,思路是活的,可以多嘗試。

因為第二種 je 改成 jnz跳轉 或是 改nop 等等等 前面幾集有介紹過類似的方法,所以這集改介紹第一種方法。

第一種方法也是比較保險的,因為0050A980地址 call CoolVide.0050BA88 ,他可能去call了很多的Function來計算來判斷,所以如果只用第二種方式把je改成jnz的話,很容易出問題。

於是我們先在0050A980地址下一個斷點。然後F9執行程式

執行程式後,我們一樣隨便輸入註冊名與註冊碼。

我們F8單步向下,觀察一下右邊寄存器的位置有沒有什麼反應。

在0050A985地址 test al,al,可以觀察到右邊寄存器的EAX紅字 是00000000

al 是甚麼意思呢? 可以觀察下圖。al 是EAX的低位。EAX 可拆成 AX,而AX又可拆成 AH和AL。

不懂得可以Google一下 "逆向 EAX"

我們繼續F8往下可以觀察到在0050A987地址 je跳轉這邊 ,左下方顯示'跳轉已實現",代表上面的call與test al,al進行了運算,然後判斷EAX (al) ,也因為EAX這邊是 00000000,所以je就實現跳轉了。

繼續F8往下,可以觀察到跳轉到下方了。所以我們回到上面說的,我們要透過第一種方法來修改一些值,讓他的je判斷式能通過。

我們在剛才下斷點的位置0050A980地址 call CoolVide.0050BA88這邊點 F7跟蹤進去。

這邊跟蹤進來後,我們直接右鍵,新增個彙編指令。

mov eax,1,你要mov al,1也可以,思路是活的。

大概的意思就是 賦予 1 這個值 給 eax 或 al。

為甚麼是 1 ? 你可以試試看 2、3、4、5....試試看就知道了,說不定也能成功?

反正多嘗試,多了解,學習就是這樣。

然後再新增一個 retn(返回),因為我們 賦予 1值給eax或al後,我們希望讓他能夠馬上retn返回到剛才的 test al,al那邊,不希望他繼續往下進行一些額外的計算或判斷,導致我們的 mov eax,1 失效,所以新增一個retn 讓他執行完 mov eax,1後,能夠馬上退出這裡。

更改完後,我們返回到剛才的畫面,然後觀察 test al,al 右上方寄存器的位置,可以發現變成 00000001了。

F8往下,可以觀察到 在je的位置,左下角顯示 "跳轉未實現"。代表我們修改成功,他跳轉沒實現。

接下來我們將修改過的程式選起來,然後保存。(前面幾集有教怎麼保存修改後的程式)

這樣就破解成功了。

 

贊(0) 打賞
轉載請附上作者連結:波波的寂寞世界 » 零基礎學破解-第五集

波波的寂寞世界

Facebook聯繫我們

覺得文章有用,請作者喝杯咖啡

掃一掃打賞作者狗糧