用OllyDbg做破解

2022-03-06 08:04:55 字數 2192 閱讀 8344

朋友所託,要幫忙破解乙個mfc的小程式,他急等著用 (背景:幾個人合夥創業,其中乙個負責寫這個有點小核心的專案,為了鞏固自己的」地位「搞的小把戲,給加了密,要用必須通過他 - 我艹~~~)。

雖說自己搞c++比較多,相對來講native一點,但是對於彙編與破解,了解相當有限,去年這朋友也找過我,因為當時剛換公司比較忙,是求助另外一好友才搞定的。這次還是自己花點時間研究研究吧。工具嗎,用windbg貌似只能看,softice與ollydbg之間,選擇了ollydbg。

一、基礎知識

ollydbg是乙個動態反彙編分析除錯工具,其功能強大的令人髮指,而且居然還是免費的,其官方位址為:

要用ollydbg做破解,最好先過一遍下面的知識點:

了解組合語言的基本結構,特別是函式的呼叫與返回,引數傳遞等,可以參考這篇文章:反彙編深入分析函式呼叫

, 簡短卻又清晰,切中要點,我配合visualstudio的反彙編視窗執行了幾遍,基本掌握了其結構。(我自己也維護了乙個分析:

另外,intel這三大卷:intel® 64 and ia-32 architectures software developer manuals也是非常經典的參考資料,沒必要讀,但不理解時可以查查,尤其是第一卷中的基本結構介紹和第二卷的指令集介紹。

ollydbg入門完全教程(完美排版), 非常詳盡的介紹了ollydbg的各個組成部分及功能,40來頁的內容,花乙個小時過一遍就可以了。

二、例項操作

先是乙個非常簡單的helloworld程式,原始碼如下:

1 #include 2 #include 3

4#pragma comment(lib, "user32.lib")56

void printhelloworld(inta)7

1011

intmain()

1218

else

1922 }

該程式總是在console輸出"hello, world",現在要修改其binary,使其總是彈出乙個messagebox。

編譯並使用ollydbg開啟,因為我知道要傳乙個引數10到printhelloworld函式中去,可以肯定會有乙個指令:push 0a,關鍵**在其附近,在反彙編視窗搜尋定位:

可以看到,在push 0a前面是乙個條件判斷,對應源**中的那個判斷,於是不難推出,mov byte ptr ss:[local.1+3],0就是給bool型變數bmsgbox賦值的指令,0就是false。

於是,在這裡雙擊該指令,把0改成1,執行便看到程式彈出了messagebox。

注意,為了儲存修改過的可執行檔案,你需要:

三、破解

需要破解的程式,其行為是:在任何一台機器上使用該程式,你需要輸入乙個授權碼,該授權碼由特定程式通過系統資訊產生,其工作流程為:

在客戶電腦上執行該程式,獲取系統資訊(乙個字串)

將該字串發給授權人,他有乙個工具會產生授權碼,並發給使用者

使用者輸入該授權碼,程式驗證,如通過則可使用。

單從行為上分析,突破口在於授權驗證這一步,該程式要驗證輸入的授權碼是否正確,也就是說它肯定知道正確的驗證碼,也就是說由系統資訊產生授權碼的演算法也是內建在客戶程式這邊的,我們只不過需要乙個辦法把它讀出來。

該驗證步驟是:獲取系統資訊,並個根據該資訊產生正確的授權碼,然後從某文字檔案讀入使用者輸入的驗證碼,對兩者進行對比,如果成功,則彈出乙個messagebox:output(true), 否則就是output(false)。根據以上資訊,設定以下斷點:

有了這幾個斷點,你就可以在執行中觀察暫存器/棧/記憶體等內容,以及彙編指令來了解整個程式的運作機理。多走幾遍,多觀察思考,適當新增斷點與注釋。特別注意哪些條件測試指令與call指令,確定其行為後繼續跟進去。

這樣,就找到了其內部獲取系統資訊的函式呼叫,與根據系統資訊算出授權碼的函式呼叫,從而得到了正確的授權碼,結束。

當然,要做的好一點的話,還可以:

但對於第一項,這需要閱讀很多彙編**,我沒時間;對於第二項,需要插入對windows api函式的呼叫,這比簡單的修改乙個指令要複雜,暫時還不會,也不打算仔細研究。畢竟,是朋友所託,完成任務即可,不打算仔細研究 - 我還有很多其他重要的事情要做。

四、技巧總結

用 hashcat 破解 WIFI WPA2破解

首先用cdlinux系統進行抓包,cdlinux抓包我就不詳細說明 到這裡可以檢視如何安裝cdlinux 到這裡可以檢視如何使用cdlinux 進入正題 hashcat是用來破解wpa2的包,當然也可以破解很多東西 如系統密碼 rar md5等等,它比較受歡迎 windows 和linux 都可以,...

用VB做黑客

一 所用控制項 在程式中將使用winsock控制項。winsock控制項是乙個activex控制項,使用tcp協議或udp協議連線到遠端計算機上並與之交換資料。和定時器控制項一樣,winsock控制項在執行時是不可見的。winsock的工作原理是 客戶端向伺服器端發出連線請求,伺服器端則不停地監聽客...

用graphite diamond做監控

開局先貼兩個文章,值得一讀 很讚的blog 另一篇介紹graphite的文章 無論是什麼系統,只要上線,就需要運維,這時候很想看一些監控的圖表,graphite就很方便的實現了這個需求。而graphite採用metrics的方式,又有很多其他的tool為他做支援,所監控的不僅僅是機器的一些東西,你可...