日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinDbg学习笔记(二)--字符串访问断点

發布時間:2024/4/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinDbg学习笔记(二)--字符串访问断点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


標 題:?【原創】WinDbg學習筆記(二)--字符串訪問斷點
作 者:?gaorqing
時 間:?2009-07-25,21:39:04
鏈 接:?http://bbs.pediy.com/showthread.php?t=94326

WinDbg學習筆記(二)--字符串訪問斷點


一、前言
????
本文是我自己學習WinDbg的過程,因為目標是逆向分析一個驅動文件,但現在對驅動開發的知識還不是很熟悉,所以先在用戶級練習一下破解,熟悉一下操作。我選擇的破解程序是《OllyDBG?入門系列(二)-字串參考》中的Crack3.exe,也模仿一下在OllyDbg破解的流程,在WinDbg實現一遍。

二、調試思想
???《OllyDBG?入門系列(二)-字串參考》一文中是使用字符串參考來找到關鍵的地方,但是很可惜WinDbg沒有字串參考的功能,不能直接模仿。雖然我不太知道OllyDbg得到字串參考的原理,不過我想一般的程序都會把要顯示的字符串放在內存里。所以,猜想一下只要在內存里找到對應的字符串的位置,然后下內存訪問斷點,那么程序在要調用該字符串時就會被斷下來。而在程序被斷下來后一般都是在系統函數里,所以回到用戶代碼,在返回的地方附近就應該能找到關鍵的代碼。下面利用Crack3.exe嘗試一下。

三、調試步驟
1、先運行程序,熟悉一下程序的操作。運行Crack3.exe,界面如下:


點擊一下“Register now”,就會彈出一個對話框:


我們這里就是從這個對話框里顯示的字符串入手。

2、點擊“Quit the CrackMe”退出Crack,然后啟動WinDbg。【File】?【Open Executable】?選擇Crack3.exe。WinDbg載入程序后會自動中斷下來:


3、下入口斷點
到這里,就會發現跟OllyDbg載入程序時不一樣。為什么程序會停在系統代碼區域里而不是在用戶代碼里?為什么入口地址不一樣的?

其實我也是不太知道為什么會停在這里,不過大概這時Crack3已經載入內存里,只不過要等用戶操作才進行下一步。
那怎樣才能到程序的入口點?
WinDbg里有個偽寄存器叫$exentry,里面記錄了程序的入口點。所以我們只要在命令輸入欄里輸入
bp $exentry
(bp就是用來下斷點的命令,詳細用法可以參考WinDbg的幫助文檔)
在輸入完命令并敲擊Enter后,在命令輸入行的前端一般會顯示“*BUSY*”的字樣。這時因為WinDbg要從目錄或網站上找到對應的符號文件。如果網速慢的話可能會等好一陣子。如圖:


在WinDbg找完符號文件后,就會變成:


什么,提示錯誤?
不過可以放心,這里不是說斷點設置失敗。我英文不太好,不過也可以大概理解說模塊加載成功,但image00400000處的符號不能加載。這個對于我們沒什么關系,因為我們調試的是沒有源代碼的程序,^_^。

這里也補充一下。要查看當前已經設置的斷點,可以在命令欄輸入? bl?,如圖:


如圖上所示,現在我們設置里一個斷點,斷點位置在?0041270。在00441270前的字母?e
代表斷點是被激活的。而在最前面的0代表的是第0個斷點,可以說是斷點的編號。對于斷點,還有其它經常用到的操作,例如:
be???激活斷點
bd???禁用斷點
bc???刪除某個斷點
詳細的用法和其它操作可參考WinDbg幫助文檔(在索引里輸入?user-space breakpoints)。

其實我們不一定要用到$exentry寄存器,因為我們自己也可以算出程序的入口地址。用Stud_PE或其它PE工具,找到ImageBase和EntryPoint,那么ImageBase+EntryPoint就是入口地址了。對于Crack3,情況就是00400000+00041270=00441270(注意是16進制)。


使用bp下斷點:
bp? 00441270
得到的結果是一樣的。

4、運行到入口點
按F5(或輸入g),那么程序就會停在正式的入口點,如圖:

現在貌似熟悉多了,終于回到用戶代碼了。

5、查找字符串
在步驟1我們運行程序時就記錄了提示注冊錯誤的字符串“Wrong Serial, try again!”,現在我們就要在內存找到該字符串的位置。

輸入命令
s?–a 00400000 L53000?“Wrong”
該命令的意思是以ASCII碼形式在內存地址00400000往后53000個字節搜索字符串“Wrong”。
s,就是要調用查找的命令
-a,指定使用ASCII碼的形式查找
00400000,指定要開始尋找的內存地址。
L53000,說明要在00400000往后的53000字節搜索。這個數值和00400000都可以從Stud_PE獲得。00400000是程序的裝入地址,而53000是映像的大小,也就是程序載入內存后占用的內存大小。使用這兩個數值,基本上可以搜索到程序使用的整個內存范圍。
“Wrong”,就不用多解釋了,就是我們要尋找的字符串。不過WinDbg不支持模糊搜索,所以這里輸入的字符串必定要完全正確。

具體用法可以參考幫助文檔

最后,命令窗口輸出:

表示在0044108c的地方找到我們想要的字符串。

6、下內存訪問斷點
WinDbg中,ba命令代表Break On Access,即訪問時中斷。
我們在命令行輸入:
ba r 1 0044108c

命令的意思是在內存0044108c的位置下字節的讀斷點。命令中各元素的含義可以參考幫助文檔,這里不啰嗦。
輸入bl,查看斷點使用情況:


7、按F5或輸入命令g運行程序,點擊“Register now”,程序被中斷下來


可以看到,程序中斷在系統代碼區域。然后連續幾次按或Shift+F11,又或者在命令行輸入gu,直到程序彈出注冊失敗的窗口。點擊?確定,繼續shift+F11,直到用戶回到用戶代碼區域。


到這里的話可能就需要借助IDA的幫忙了。因為在WinDbg的反匯編窗口里,跳轉指令的調用不太明顯,很難找出關鍵的跳轉。而借用IDA,則可以很方便找出。如果不用IDA幫忙當然也可以,就是尋找起來可能稍微吃力點而已。
復制多一份Crack3.exe,再使用IDA,這樣就不會影響到當前的調試。
用IDA載入Crack3的復件后,跳到0043d14b的地方(IDA不會用?那就隨便看看IDA的一些教程,反正這里只用到IDA的一點點功能),如圖:


什么,我們剛才進入的就是MessageBoxA?為什么WinDbg沒有顯示的?這也沒辦法,WinDbg本身就是這樣,所以說結合IDA分析方便很多。其實也不能說WinDbg沒提示,只要我們跟蹤進MessageBoxA就知道了。下面實現一下:
重新載入Crack3,并在0043d146處(剛才調用MessageBoxA的地方)下斷點,運行程序。點擊“Register Now”后程序斷了下來:


按或F11,進入函數


看看,這里就不一樣了,這里就可以提示是MessageBoxA了。

8、尋找關鍵跳轉
在找到顯示“Wrong Serial, try again!”的地方后,就嘗試一下在代碼附近有沒有可以跳過顯示這句提示的跳轉指令。借用IDA,可以看到在當前函數里都沒有一句跳轉可以跳過提示,那么就說明當前函數整個都是注冊錯誤后才調用的函數。
直接按跳出當前函數


借助IDA查看:


可以看到原來有兩處地方調用剛才顯示注冊失敗的函數。所以,我們要找的就是尋找一些可以跳過這兩個地方的跳轉指令。
關于怎樣尋找,只要看一下IDA的那些跳轉流程線就會很容易得到結果。而在這里,我直接給出關鍵的跳轉,它們分別是00440F39?的jnz?和00440F56?的jnz。只要把這兩個位置的jnz指令nop掉,就可以爆破成功。


9、修改指令
按重新載入Crack3,然后分別使用
bp 00440F39
bp 00440F56

在關鍵的跳轉下斷點。按運行程序,點擊“Register Now”,程序中斷下來


現在就要修改這條指令。WinDbg提供命令a來修改指令。

簡要用法是確認到當前要執行的指令,
首先,輸入a,Enter
然后,輸入要修改成的指令
最后,Enter,結束

在修改指令時要注意,修改后的指令占用的空間應該比原來的小,不然的話就會影響下面的指令。例如原來00440f39處的指令實際為?7551?,占用兩個字節,而我們修改后的指令占用空間必須小于或等于兩個字節,多出的用90(nop)替代。這里我們要使用nop指令取代,也就是要替換成兩個nop。

所以,我們接下來的操作是
在命令輸入行:
輸入a,Enter
輸入nop,Enter
輸入nop,Enter
直接Enter,結束


結果為:


00440F56處的指令采取的處理一樣。最后按F5運行程序


提示注冊成功。

到這里,就遇到一個問題。OllyDbg可以將修改后的指令保存到文件,而WinDbg怎么辦?很遺憾,到現在我還沒找到一個好的方法,不過可以根據要修改的地址,然后根據PE文件里的數據,算出對應的文件偏移,然后用Hex Workshop等工具把相應位置上的值改掉。這樣貌似比較麻煩,不過也沒辦法,我能力就到這里。有人能提示一種更好的辦法嗎?

本文只是作為菜鳥的我初次接觸WinDbg做的筆記,也是為了后面自己做驅動的逆向反匯編做準備。這里用到的破解方法不是很先進,不過就是為熟悉一下WinDbg的命令操作而已。

第一次發貼,見笑了,也請大家多多包涵,多多指教

上傳的附件

CrackMe3.rar?(125.1 KB, 324?次下載)

[誰下載?]

總結

以上是生活随笔為你收集整理的WinDbg学习笔记(二)--字符串访问断点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。