歡迎光臨
我們一直在努力

零基礎學破解-第三集

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


首先我們先開啟"飞扬英语一点通",這邊可以看到在一般情況下是未購買用戶。如果想要升級的話,必須輸入註冊碼。
我們用戶名與註冊碼隨便取一個,測試看看。
這邊我們註冊名取LonelyPoPO
機器碼預設為0F8BFBFF00000000000000000001 (每台電腦的機器碼都不一樣)
註冊碼隨便打 11111111111111111111111111

接下來我們透過PEID檢查一下軟體有沒有加殼
ASPack 2.12 -> Alexey Solodovnikov,這邊加了ASPack 的殼
加殼的程式你可以想像成程式碼被加密或被混淆,目的是為了不希望程式輕易被破解

ASPack是個常見的加殼方式,網路上也有很多破解ASPack"脫殼"的案例,但這集先不講如何脫殼。
加殼WiKi 脫殼介紹

首先我們一樣先將"飞扬英语一点通"導入到Immunity Debugger

因為程式有被加殼,所以會彈出這個視窗,這邊我們暫時先不用理會,按下"是"或"否"都可以。

首先滑鼠右鍵-->轉到-->表達式,也可以直接Ctrl+G快捷鍵,然後輸入0x401000,進入到0x401000位址。

進入0x401000位址這個步驟是什麼意思 ?
((Immunity Debugger加載exe檔案後並不是直接執行到程序入口,
這跟直接執行exe原理是一樣的,系統加載器加載exe後,還需要執行一些初始化操作,最後才執行到主程式入口。
在這種情況下,一般直接按一下F9就會停在主程式入口點。
可以在加載後直接在401000地址入口下斷點(預設編譯exe的入口,若不是,直接查看下exe的PE頭就知道入口在哪裡了,下斷點)再按F9,就會主程式入口起點。))

這邊可以稍微參考下,如果看不懂沒關係,反正之後都會在講解。

因為程式有被加殼過,所以這邊我們會看到這樣,沒辦法正常看到程式碼。

這邊我們滑鼠右鍵-->分析-->從模塊中刪除分析。

F9執行程式。

我們利用ASCII搜尋"未购买用户"

 

到達未購買用戶後的地址後,我們稍微往上看有沒有什麼跳轉或是可利用的點。

這個程式因為不是像前面兩集那樣輸入帳號密碼後登入的概念,所以跳轉的點能利用不大

這邊我們觀察到004BC8A0地址 有Software\engydt,而Software\engydt通常是指登錄檔(Registry)的訊息,程式在啟動時,會去訪問登錄檔(Registry),讀取用戶的資料,比如Key、金鑰等,然後進行判斷。

所以我們在這邊先下一個斷點。

下完斷點後,我們重啟啟動,點左上角這個"<--" 符號。

這邊會報錯,因為是有加殼的程式,所以不用理他,直接確定,下一步。

這邊隨便點一個,是、否都可以。

在這邊我們利用"插件"-->"API斷點設置工具"-->"初始化設置斷點"。

因為程式在一啟動的時候,會去讀取你的登錄檔(Registry)有沒有註冊Key (購買用戶),所以我們這集的教學斷點應該是在"初始化設置斷點",在啟動程式,但還沒完全啟動程式前,先下斷點,然後想辦法繞過他在我們啟動程式時去驗證我們電腦的登錄檔(Registry),或是想辦法用其他方式破解。

設定好"初始化設置斷點"後,我們觀察下右下角的變化,然後F9執行程式,可以觀察到右下角顯示"Call 到GetStartupInfoA 來自engydt.00401402",表示程式執行時,在程式初始化的階段時已經被斷點斷下來了。

接下來我們點上方的"B",按工具欄中的“B”按鈕,切換到“斷點視窗框”,就是可以看到我們當下下的斷點。

右鍵選擇第二行(即激活狀態為“始終”-->"已禁止")禁止掉這個斷點。

然後將第一行初始化的斷點把"已禁止"-->"始終",讓程式讀取登錄檔(Registry)的斷點生效。然後第一行點兩下回到原本的視窗。

回到原本畫面後,我們重新F9執行程式,可以發現程式並沒有真的執行起來,而是被我們下的斷點給斷下來了。

而我們此時的地址是在004BC8A0地址,也就是程式讀取登錄檔(Registry)的地址。

這時候我們F8慢慢地往下觀察,看看程式怎麼運作,有沒有什麼可靠的資訊可以蒐集。

(觀察右上角的視窗和右下角的框框)

我們F8來到004BC8BB,發現到右上角的視窗顯示了LonelyPoPo,而這個正是我們在一開始點擊購買用戶時所填寫的帳號。

我們繼續F8慢慢往下,並隨時觀察有沒有其他資訊。

當我們來到004BC8D7地址後,觀察到右上角及右下角的視窗顯示了我們一開始註冊碼輸入的1111111111111111

我們F8繼續往下可以在004BC908地址觀察到右上角及右下角視窗顯示了一組有趣的ASCII資訊,這組我們先把抄下來,說不定會有利用價值。(只要看到你覺得奇怪的資訊,都先抄下來,說不定之後都會用到,也就是資訊蒐集)

其實這邊主要就是去比對你一開始輸入的帳號與註冊碼跟機器碼有沒有符合,也就是你的註冊碼要跟

4FF3252F27XXXXX 這組一樣,才是購買用戶。

我們F8一路往下可以觀察到004BC924地址有一個jnz的判斷跳轉,而未購買用戶在004BC939,所以這邊可能就是去判斷比對如果我們的註冊碼與機器碼不同的話,就是未購買用戶,如果註冊碼與機器碼相同,那就是購買用戶。

(這邊也許可以用其他方法,比如jmp ? 等等其他方式想辦法跳過之類的,但因為這是有加殼的程式,修改完要儲存會有很多限制,很麻煩,所以這邊就先不提這個,日後再提。)

這邊我們把剛才蒐集到的ASCII(機器碼)輸入試試看"購買用戶"。

結果成功註冊了"本軟件已註冊給LonelyPoPo",並且可以使用已購買用戶的功能。

 

 

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

波波的寂寞世界

Facebook聯繫我們

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

掃一掃打賞作者狗糧