入門系統(tǒng)六消息斷點及RUN跟蹤補充_第1頁
入門系統(tǒng)六消息斷點及RUN跟蹤補充_第2頁
入門系統(tǒng)六消息斷點及RUN跟蹤補充_第3頁
入門系統(tǒng)六消息斷點及RUN跟蹤補充_第4頁
入門系統(tǒng)六消息斷點及RUN跟蹤補充_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、OllyDBG 入門系統(tǒng)(六)-消息斷點及RUN跟蹤補充 看完了0IlyDBG 入門系統(tǒng)(五)-消息斷點及 RUN跟蹤之后感覺如何?會否有如下問題: 1、是否覺得不知道在哪下斷? 2、為什么要這樣子下斷? 3、如何確定斷下來后的位置就是正確的? 好,就本著這幾個問題來分析一遍。 首先,先回顧下 Windows的消息機制。要點:所有要處理的消息必然會由程序自己處理, 不處理的消息都交由 Windows處理。Windows的消息處理函數(shù)的格式,如下: LRESULT CALLBACK Win dowProc( HWND hwnd,/ han dle of wi ndow UINT uMsg, /

2、message ide ntifier WPARAM wParam, / first message parameter LPARAM lParam/ sec ond message parameter ); 其中uMsg就是關(guān)鍵,它代表消息的類型,如:WM_COMMAND,WM_GETTEXT等。記好 哦。 F面,我們來用實例講解。 這個CrackMe是用對話框做的(你是怎么知道的?)。 1、用 OllyDbg 加載,Crtl N,找到函數(shù):USER32.DialogBoxParamA,右擊- “在每個 參考上設(shè)置斷點”。 2、F9,運行??矗粩r了下來,如圖: 00401 OtIO $ p

3、ush 10401102 - 00401007| - nou 0 0401 60C push 0048100E push 00481013 - push - push 00401017| L push 0040101D L_ call OrpModule - NULL s t Q006049A -uuutuy* 0O06049A it0e049A .0006049A nnncn jfia 刷新 COOOOSEa LLHJUKfrr COOOPFFF 00000067 00000003 fitvmnrtia 94C30A4 00010100 50010060 OOOOOE04 UJUJULiU

4、OCOCOC04 OCOCOC04 DC000004 00000004 (M000204 bLRJZUUJU 50020000 50010000 50010000 跟隨 Cl assProc 在ClwsProc上切換斷點 在ClsProc上設(shè)條件恒錄斯點 cnri10000 ooeo oooo oooo 壬主土主主主主主主圭 宣制到剪貼板 排序按 界面選頊 vi晁 MakeCHIL coh 要下消息斷點,首先得找到具有Windows消息處理函數(shù)格式的函數(shù),然后,再根據(jù)棧的數(shù) 據(jù)來判斷消息,如果符合下斷的消息,那么,OllyDbg就會攔下來(還會覺得不知道在哪下 消息斷點了嗎?知道該如何下消息斷

5、點了吧?)。很明顯有一點,這個消息斷點的功能是有 限的,比如,要攔主窗口中的菜單消息呢?所以,消息斷點的功能還是有限的。如何擴展? 扯遠了,下面再講。 4、Ctrl G來到cyle.0041029,我們來到了消息處理函數(shù)了,但是, OllyDbg并未識別出 這個函數(shù)是消息處理函數(shù)。所以,在cyle.0041029處,右擊- “分析”- “假定參數(shù)”,女口 圖: 復(fù)制到可執(zhí)行文件 分折P AJunk Asm2Clipho9rd 書簽 去除花扌旨令 超級拷貝 假定參數(shù) 分析代碼Ctrl+A 風(fēng)稅塊中移除分析 掃描目標(biāo)立件)Ctrl+O 從模塊中移除目標(biāo)掃描 從選奄內(nèi)查寧 在下廂襯r 彈出一個對話框

6、,選擇“ WinProc(hWnd,msg,wParam,IParam) ”。 假定參數(shù)穆于00401029 選定命令是使用以下參數(shù)的函數(shù)入口點: 無爲(wèi)除已有解碼) WinPr “斷點”- “在 Win Proc上的消息斷點”(平時是不是沒見過 這個菜單呀?呵呵)。 3切換F2 耳條塚4MakeCHM?fcBin 條件記錄(L)Shi ft+F4 HIT跟產(chǎn) RW跟蹤 在“消息”列表框中,選擇你要下斷的消息 (AltB,刪除以前的斷點,以免影響心情)。 5、 6、F9,運行,程序運行起來了。這時沒什么事情發(fā)生,當(dāng)你在里面點了一個文本框之后 (點它,是想讓它獲得 Focus(焦點),以便能夠輸入

7、數(shù)據(jù)),事情就發(fā)生了。現(xiàn)在沒辦法在文 本框里輸入注冊碼,也沒辦法點擊按鈕。這是怎么回事呢?仔細看一下 口,噢!原來被 文本框的 通知EN_SETFOUCE 搞壞了!停留在 EN_KILLFOCUS兩個消息之間了。 7、好,現(xiàn)在來擴展消息斷點(消息斷點是否是條件斷點的特殊例子?) (賣弄了一下,呵呵)。 Stack(棧)的那個窗 EN SETFOCUS 和 ,即使用條件斷點 1 KTT跟蹤 RUN跟晾 此St為新EIF 轉(zhuǎn)到 數(shù)據(jù)窗口中跟隨 查看調(diào)用樹 Ctrlil 杏粧) 切孰 F2 條件 Shi ft+F2 案件IE錄 Sht+F4 1在WinTroc上的消息斷點 運行到選定垃置 F斗 內(nèi)存

8、訪問 內(nèi)存寫入(11 MakeCHIL com 看你需求,條件和條件記錄,在這里是沒什么區(qū)別的,因為不需要記錄的內(nèi)容。 8、按 Shitf F2,輸入 MSG =WM_COMMAND 解碼為 0040102D |. push ebx 0040102E |. push edi 0040102F |. push esi 00401030 |. cmp arg.2, 110 00401037 |. je short cycle.0040105E 00401039 |. cmp arg.2, 111 /111=WM_COMMAND 00401040 |. je short cycle.00401082

9、 / 肯定在這里跳(為什么?) 00401042 |. cmp arg.2, 10 00401046 |. je short cycle.00401057 00401048 |. cmp arg.2, 2 0040104C |. je short cycle.00401057 0040104E |. xor eax, eax 11、來到 cycle.00401082 , 00401082 | cmp arg.3, 67 00401086 |. jnz short cycle.0040108D /這里肯定會跳 00401088 |. call cycle.00401151 0040108D |

10、cmp arg.3, 66 00401091 |. jnz short cycle.00401098 / 這里肯定不會跳(又是為什么呢?) 00401093 |. call cycle.0040109C/關(guān)鍵, 00401098 | xor eax, eax 12、藍色部分, 已經(jīng)在 CCDebuger 那篇文章分析過了,這里就不分析了,我用紅色字體來 標(biāo)明重點。 0040109C /$ mov dword ptr ds:402182, FEDCBA98 004010A6 |. push 11 ; /Count = 11 (17.) 004010A8 |. push cycle.0040217

11、1 ; |Buffer = cycle.00402171 004010AD |. push 3E9 ; |ControlID = 3E9 (1001.) 004010B2 |. push arg.1 |hWnd 004010B5 |. call ; GetDlgItemTextA ( Serial ) 004010BA |. or eax, eax 004010BC |. je short cycle.0040111F 004010BE |. push 11 ; /Count = 11 (17.) 004010C0 |. push cycle.00402160 ; |Buffer = cycl

12、e.00402160 004010C5 |. push 3E8 ; |ControlID = 3E8 (1000.) 004010CA |. push arg.1 ; |hWnd 004010CD |. call ; GetDlgItemTextA ( name) 004010D2 |. or eax, eax 004010D4 |. je short cycle.0040111F 004010D6 |. mov ecx, 10 004010DB |. sub ecx, eax 00401105 |. call cycle.004011F1/算法 0040110A |. mov ecx, 0F

13、F01 0040110F |. push ecx 00401110 |. call cycle.00401190 /算法 00401115 |. cmp ecx, 1 00401118 |. je short cycle.00401120 /需要跳 0040111A | call cycle.00401166 0040111F | retn 00401120 | mov eax, dword ptr ds:402168 00401125 |. mov ebx, dword ptr ds:40216C 0040112B |. xor eax, ebx 0040112D |. xor eax, d

14、word ptr ds:402182 00401133 |. or eax, 40404040 00401138 |. and eax, 77777777 0040113D |. xor eax, dword ptr ds:402179 00401143 |. xor eax, dword ptr ds:40217D 00401149 |.A jnz short cycle.0040111A /不可以跳 0040114B |. call cycle.0040117B/提示注冊成功 00401150 . retn 004010DD |. mov esi, cycle.00402160 00401

15、0E2 |. mov edi, esi 004010E4 |. add edi, eax 004010E6 |. cld 004010E7 |. rep movs byte ptr es:edi, byte ptr 004010E9 |. xor ecx, ecx 004010EB |. mov esi, cycle.00402171 004010F0 | /inc ecx 004010F1 |. |lods byte ptr ds:esi 004010F2 |. |or al, al 004010F4 |. |je short cycle.00401100 004010F6 |. |cmp

16、al, 7E 004010F8 |. |jg short cycle.00401100 004010FA |. |cmp al, 30 004010FC |. |jb short cycle.00401100 004010FE |.A jmp short cycle.004010F0 00401100 | cmp ecx, 11 00401103 |. jnz short cycle.0040111F /判斷長度是否為 字節(jié),不是則跳 16 個有效字符,即 16 個 Esp 終于寫完了,現(xiàn)在來回顧下剛開始的問題: 1、 是否覺得不知道在哪下斷? 答:在 Windows 消息處理函數(shù)的入口處下消

17、息斷點。 2、 為什么要這樣子下斷? 答:可能 OllyDbg 是根據(jù)棧的數(shù)據(jù)和函數(shù)原型來匹配, 所以,一般來說, 匹配條件都會是 XX =XXXXX 3、 如何確定斷下來后的位置就是正確的? 答:這里是根據(jù)編程的思路以及 Windows 的消息處理機制來定位的,理論與實戰(zhàn)相結(jié)合。 最后,總結(jié)下,由于 windows 是消息驅(qū)動的,很大一部分都是通過消息來完成的,所以, 有很大一部分可以通過對消息下斷來達到目的, 但是, 如何下消息斷點?從大體上講, 是這 樣子的: 1、找出消息循環(huán)處理的函數(shù)2、在消息循環(huán)處理函數(shù)的入口處設(shè)斷 寫到這里,廢話一下。贊揚 CCDebuger 的太多了,但是,在贊

18、揚的同時,不知道大家有沒 仔細消化人家的成果?呵呵,其實,我也沒有,因為我看不太懂,所以,還是照著自己的思 路走。寫這篇文章的目的是為了幫一位朋友,他想下消息斷點,但是,不知道如何下,我就 把 CCDebuger 的這那篇消息斷點給他,可是,還是沒解決,后來,自己也動了一下手,確 實,對于 WM_COMMAND 消息來說, OD 肯定會不停的攔下來的,所以,單純的消息斷點 就行不通了,所以,再結(jié)合 Run 跟蹤來記錄下,剛好能解決問題,也就產(chǎn)生了 CCDebuger 的那篇文章(猜的,呵呵) 。 最后,幫忙糾正下錯誤: 引用: 寫到這準(zhǔn)備跟蹤算法時,才發(fā)現(xiàn)這個 crackme 還是挺復(fù)雜的,具體算法我就不寫了,實在 沒那么多時

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論