freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

ollydbg圖文入門教程資料(參考版)

2024-11-07 05:21本頁面
  

【正文】 另成立一個菜鳥入門群( 6167883),目的在于探討剛剛接觸做輔助的同志們遇到的基礎(chǔ)和常識問題,(比如基礎(chǔ)思路?軟件報錯系統(tǒng)報錯?編程語言基礎(chǔ)問題?工具哪里有?哪個過NP?插件怎么用?等等電腦雞毛蒜皮的事,因為一般問題老鳥都懶得回答你,而你還沒動手就卡住了!當然更歡迎高手來做老師指導我們。 有七章之多。如果我的分區(qū)沒有卷標的話,則卷標值為 0,最后的注冊碼就是 797A7553H,即十進制 2038068563。查一下 MSDN 可以知道 GetDriveTypeA 函數(shù)的返回值有這幾個: Value Meaning 返回在 EAX中的值 DRIVE_UNKNOWN The drive type cannot be determined. 0 DRIVE_NO_ROOT_DIR The root directory does not exist. 1 DRIVE_REMOVABLE The disk can be removed from the drive. 2 DRIVE_FIXED The disk cannot be removed from the drive. 3 DRIVE_REMOTE The drive is a remote (work) drive. 4 DRIVE_CDROM The drive is a CDROM drive. 5 DRIVE_RAMDISK The drive is a RAM disk. 6 上面那個 “返回在 EAX 中的值 ”是我加的,我這里返回的是 3,即磁盤不可從驅(qū)動器上刪除。 \GetDriveTypeA 00401414 |. A2 EC334000 MOV BYTE PTR DS:[4033EC],AL 。為什么這樣寫?大家把前一句和這一句合起來看一下: 0040140F |. E8 B4000000 CALL JMP.amp。這就是一般比較常見的 stdcall 調(diào)用約定。s maximum filename length LPDWORD lpFileSystemFlags, // address of file system flags LPTSTR lpFileSystemNameBuffer, // address of name of file system DWORD nFileSystemNameSize // length of lpFileSystemNameBuffer )。 。 |VolumeNameBuffer = 0040142A |. 6A 00 PUSH 0 。 |pVolumeSerialNumber = NULL 00401423 |. 6A 0B PUSH 0B 。 |pFileSystemFlags = NULL 0040141F |. 6A 00 PUSH 0 。 /pFileSystemNameSize = NULL 0040141B |. 6A 00 PUSH 0 。這里只要大家注意函數(shù)參數(shù)傳遞的次序,即調(diào)用約定。如果用匯編來寫這個注冊機的話就更簡單了,很多內(nèi)容可以直接照抄。 把 ESI 中的值與 797A7553H 異或 這里算出來的 b 最后還要和 797A7553H 異或一下才是真正的注冊碼。前面我們已經(jīng)說了取磁盤類型參數(shù)做循環(huán)次數(shù),再取卷標值 ASCII 碼的逆序作為數(shù)值,有了這兩個值就開始計算了。因此經(jīng)過 MOV EBX,DWORD PTR DS:[ESI] 這條指令,就是把從地址 40339C 開始處的值送到 EBX,所以我們得到了 “454D4147”。注意這里是 DWORD,即 “雙字 ”,由 4 個連續(xù)的字節(jié)構(gòu)成。比如一個字由兩個字節(jié)組成,像這樣: 12 34 ,這里的高字節(jié)就是 12 ,低字節(jié)就是 34。我們看一下數(shù)據(jù)窗口中的情況: 0040339C 47 41 4D 45 00 00 00 00 00 00 00 00 00 00 00 00 GAME............ 大家可以看出來內(nèi)存地址 40339CH 到 40339FH 分別按順序存放的是 47 41 4D 45。為什么會這樣呢?如果大家對 x86 系列 CPU 的存儲方式了解的話,這里就容易理解了。如我把這個 Crackme 程序放在 F:\OD 教程\crackhead\ 目錄下,而我 F 盤設(shè)置的卷標是 GAME,則這里獲取的就是 GAME, ASCII 碼為 “47414D45”。 沒完繼續(xù) 0040144E |. 893D 9C334000 MOV DWORD PTR DS:[40339C],EDI 。 把磁盤類型參數(shù)作為循環(huán)次數(shù),依次遞減 00401449 |. 83F9 00 CMP ECX,0 。 循環(huán)遞減取磁盤類型參數(shù)值與卷標名 值相乘 00401446 |. 03F8 ADD EDI,EAX 。 磁盤類型參數(shù)送 EAX 00401442 |. 8B1E MOV EBX,DWORD PTR DS:[ESI] 。 磁盤類型參數(shù)送 ECX 0040143E |. 33FF XOR EDI,EDI 。 \GetVolumeInformationA 00401431 |. 8D35 9C334000 LEA ESI,DWORD PTR DS:[40339C] 。 |RootPathName = NULL 0040142C |. E8 A3000000 CALL JMP.amp。 |MaxVolumeNameSize = B (11.) 00401425 |. 68 9C334000 PUSH 。 |pMaxFilenameLength = NULL 00401421 |. 6A 00 PUSH 0 。 |pFileSystemNameBuffer = NULL 0040141D |. 6A 00 PUSH 0 。 磁盤類型參數(shù)送內(nèi)存地址 4033EC 00401419 |. 6A 00 PUSH 0 。 。 ALT+F9 返回后來到的位置 00401437 |. 0FB60D EC334000 MOVZX ECX,BYTE PTR DS:[4033EC] 0040143E |. 33FF XOR EDI,EDI 我們把反匯編窗口往上翻翻,呵,原來就在我們上一篇分析的代碼下面??? 現(xiàn)在我們在 0040140C 地址處那條指令上按 F2 設(shè)置一個斷點,現(xiàn)在我們按 CTR+F2 組合鍵重新載入程序,載入后按 F9 鍵運行,我們將會中斷在我們剛才在 0040140C 地址下的那個斷點處: 0040140C /$ 60 PUSHAD 0040140D |. 6A 00 PUSH 0 。返回前我們看一下數(shù)據(jù)窗口: 現(xiàn)在我們轉(zhuǎn)到反匯編窗口,右擊鼠標,在彈出菜單上選擇斷點 刪除內(nèi)存斷點,這樣內(nèi)存斷點就被刪除了。我們看一下領(lǐng)空,原來是在 內(nèi)。如果你是其它系統(tǒng),如 Win98 的話,可能會有所不同?,F(xiàn)在按 F9 鍵讓程序運行,呵, OllyDBG 中斷了! 7C932F39 8808 MOV BYTE PTR DS:[EAX],CL 。且內(nèi)存斷點每一時刻只能有一個。選中部分會顯示為灰色。內(nèi)存斷點的特性就是不管你選幾個字節(jié), OllyDBG 都會分配 4096 字節(jié)的內(nèi)存區(qū)。如下圖: 現(xiàn)在將會出現(xiàn)這樣一個對話框: 我們在上面那個編輯框中輸入我們想查看內(nèi)容的內(nèi)存地址 40339C,然后點確定按鈕,數(shù)據(jù)窗口中顯示如下: 我們可以看到, 40339C 地址開始處的這段內(nèi)存里面還沒有內(nèi)容。我們先在 OllyDBG 的數(shù)據(jù)窗口中左鍵點擊一下,再右擊,會彈出一個如下圖所示的菜單。更多關(guān)于斷點的知識大家可以參考 論壇精華 7基礎(chǔ)知識 斷點技巧 斷點原理 這篇 Lenus 兄弟寫的《如何對抗硬件斷點之一 調(diào)試寄存器》文章,也可以看這個帖: 根據(jù)當前我們調(diào)試的具體程序的情況,我們選用內(nèi)存寫入斷點。在 OllyDBG 中一般我們用到的內(nèi)存斷點有內(nèi)存訪問和內(nèi)存寫入斷點。這里我們選 “ 是 ” ,程序被重新載入,我們停在下面這一句上: 00401000 /$ 6A 00 PUSH 0 ?,F(xiàn)在怎么辦呢?我們考慮一下,看情況程序是把這個值算出來以后寫在這個內(nèi)存地址,那我們要是能讓 OllyDBG 在程序開始往這個內(nèi)存地址寫東西的時候中斷下來,不就有可能知道目標程序是怎么 算出這個值的嗎?說干就干,我們在 OllyDBG 的菜單上點 調(diào)試 重新開始,或者按 CTR+F2 組合鍵(還可以點擊工具欄上的那個有兩個實心左箭頭的圖標)來重新載入程序。哈哈,原來就在附近?。? 我們現(xiàn)在知道 ESI 寄存器的值是從內(nèi)存地址 40339C 中送過來的,那內(nèi)存地址 40339C 中的數(shù)據(jù)是什么時候產(chǎn)生的呢?大家注意,我這里信息窗口中顯示的是 DS:[0040339C]=9FCF87AA,你那可能是 DS:[0040339C]=XXXXXXXX,這里的 XXXXXXXX 表示的是其它的值,就是說與我這里顯示的 9FCF87AA 不一樣。 比較 0040132F |. 75 42 JNZ SHORT 。 GetWindowTextA 00401328 |. E8 A5000000 CALL 。下面我們開始: 還記得我們上篇中所說的關(guān)鍵代碼的地方嗎?溫習一下: 00401323 |. E8 4C010000 CALL JMP.amp。今天我們的任務就是使用 OllyDBG 的內(nèi)存斷點功能找到這個地方,搞清楚這個值是如何算出來的。今天就先說到這里,關(guān)于如何追出 ESI 寄存器的值我就留到下一篇 OllyDBG 入門系列(四)-內(nèi)存斷點 中再講吧。還記得我在前面說到的那個 ESI 寄存器值的問題嗎?現(xiàn)在看看我們上面的分析,其實對做注冊機來說是沒有多少幫助的。且慢高興,這個 crackme 是要求寫出注冊機的。我們原來輸入的是字串 “12345666” ,現(xiàn)在轉(zhuǎn)換為了數(shù)字 12345666。我們來看一下信息窗口: ESI=E6B5F2F9 EAX=FF439EBE 左鍵選擇信息窗口 中的 ESI=E6B5F2F9,再按右鍵,在彈出菜單上選 “ 修改寄存器 ” ,我們會看到這樣一個窗口: 可能你的顯示跟我不一樣,因為這個 crackme 中已經(jīng)說了每個機器的序列號不一樣。 不等則完蛋 光標停在了 0040132D 地址處的那條指令上?,F(xiàn)在我們回到了這里: 0040132D |. 3BC6 CMP EAX,ESI ??吹竭@條和下一條指令,我們要考慮一下這個 ESI 的值是哪里運算得出的呢? 00401405 |. 81F6 53757A79 XOR ESI,797A7553
點擊復制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1