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

正文內(nèi)容

ollydbg圖文入門教程資料-閱讀頁

2024-11-23 05:21本頁面
  

【正文】 就是指程序往我們指定的內(nèi)存地址中寫東西時中斷。還記得前面我叫大家記住的那個 40339C 內(nèi)存地址嗎?現(xiàn)在我們要用上了。我們選擇其中的轉(zhuǎn)到 表達式(也可以左鍵點擊數(shù)據(jù)窗口后按 CTR+G 組合 鍵)。我們現(xiàn)在在 40339C 地址處后面的 HEX 數(shù)據(jù)或 ASCII 欄中按住左鍵往后拖放,選擇一段。這里我就 選從 40339C 地址處開始的四個字節(jié),主要是為了讓大家提前了解一下硬件斷點的設法,因為硬件斷點最多只能選 4 個字節(jié)。選好以后松開鼠標左鍵,在我們選中的灰色部分上右擊: 經(jīng)過上面的操作,我們的內(nèi)存斷點就設好了(這里還有個要注意的地方:內(nèi)存斷點只在當前調(diào)試的進程中有效,就是說你如果 重新載入程序的話內(nèi)存斷點就自動刪除了。就是說你不能像按 F2 鍵那樣同時設置多個斷點)。 這就是我們第一次斷下來的地方 7C932F3B 40 INC EAX 7C932F3C 4F DEC EDI 7C932F3D 4E DEC ESI 7C932F3E ^ 75 CB JNZ SHORT 7C932F40 8B4D 10 MOV ECX,DWORD PTR SS:[EBP+10] 上面就是我們中斷后反匯編窗口中的代碼。沒關系,這里不是關鍵。系統(tǒng)領空,我們現(xiàn)在要考慮返回到程序領空。 現(xiàn)在我們來按一下 ALT+F9 組合鍵,我們來到下面的代碼: 00401431 |. 8D35 9C334000 LEA ESI,DWORD PTR DS:[40339C] 。 /RootPathName = NULL 0040140F |. E8 B4000000 CALL JMP.amp。 \GetDriveTypeA 00401414 |. A2 EC334000 MOV BYTE PTR DS:[4033EC],AL 。 /pFileSystemNameSize = NULL 0040141B |. 6A 00 PUSH 0 。 |pFileSystemFlags = NULL 0040141F |. 6A 00 PUSH 0 。 |pVolumeSerialNumber = NULL 00401423 |. 6A 0B PUSH 0B 。 |VolumeNameBuffer = 0040142A |. 6A 00 PUSH 0 。 。 把crackme 程序所在分區(qū)的卷標名稱送到 ESI 00401437 |. 0FB60D EC334000 MOVZX ECX,BYTE PTR DS:[4033EC] 。 把 EDI 清零 00401440 | 8BC1 MOV EAX,ECX 。 把卷標名作為數(shù)值送到 EBX 00401444 |. F7E3 MUL EBX 。 每次計算結果再加上上次計算結果保存在 EDI 中 00401448 |. 49 DEC ECX 。 判斷是否計算完 0040144C |.^ 75 F2 JNZ SHORT 。 把計算后值送到內(nèi)存地址 40339C,這就是我們后來在 ESI 中看到的值 00401454 |. 61 POPAD 00401455 \. C3 RETN 通過上面的分析,我們知道基本算法是這樣的:先用 GetDriveTypeA 函數(shù)獲取磁盤類型參數(shù),再用 GetVolumeInformationA 函數(shù)獲取這個 crackme 程序所在分區(qū)的卷標。但我們發(fā)現(xiàn)一個問題:假如原來我們在數(shù)據(jù)窗口中看到的地址 40339C 處的 16 進制代碼是 “47414D45”,即 “GAME”,但經(jīng)過地址 00401442 處的那條 MOV EBX,DWORD PTR DS:[ESI] 指令后,我們卻發(fā)現(xiàn) EBX 中的值是“454D4147”,正好把我們上面那個 “47414D45”反過來了。我們知道 “GAME”有四個字節(jié),即 ASCII 碼為 “47414D45”。 如下圖: 系統(tǒng)存儲的原則為 “高高低低 ”,即低字節(jié)存放在地址較低的字節(jié)單元中,高字節(jié)存放在地址較高的字節(jié)單元中。上面的那條指令 MOV EBX,DWORD PTR DS:[ESI] 等同于 MOV EBX,DWORD PTR DS:[40339C]。而取地址為 40339C 的雙字單元中的內(nèi)容時,我們應該得到的是 “454D4147”,即由高字節(jié)到低字節(jié)順序的值。好了,這里弄清楚了,我們再接著談這個程序的算法?,F(xiàn)在我們把磁盤類型值作為 n,卷標值 ASCII 碼的逆序數(shù)值作為 a,最后得出的結果作為 b,有這樣的計算過程: 第一次: b = a * n 第二次: b = a * (n 1) + b 第三次: b = a * (n 2) + b … 第 n 次: b = a * 1 + b 可得出公式為 b = a * [n + (n 1) + (n 2) + … + 1] = a * [n * (n + 1) / 2] 還記得上一篇我們的分析嗎?看這一句: 00401405 |. 81F6 53757A79 XOR ESI,797A7553 。只 要你對編程有所了解,這個注冊機就很好寫了。 到此已經(jīng)差不多了,最后還有幾個東西也說一下吧: 上面用到了兩個 API 函數(shù),一個是 GetDriveTypeA,還有一個是 GetVolumeInformationA,關于這兩個函數(shù)的具體用法我就不多說了,大家可以查一下 MSDN。先看一下這里: 00401419 |. 6A 00 PUSH 0 。 |pFileSystemNameBuffer = NULL 0040141D |. 6A 00 PUSH 0 。 |pMaxFilenameLength = NULL 00401421 |. 6A 00 PUSH 0 。 |MaxVolumeNameSize = B (11.) 00401425 |. 68 9C334000 PUSH 。 |RootPathName = NULL 0040142C |. E8 A3000000 CALL JMP.amp。 \GetVolumeInformationA 把上面代碼后的 OllyDBG 自動添加的注釋與 MSDN 中的函數(shù)原型比較一下: BOOL GetVolumeInformation( LPCTSTR lpRootPathName, // address of root directory of the file system LPTSTR lpVolumeNameBuffer, // address of name of the volume DWORD nVolumeNameSize, // length of lpVolumeNameBuffer LPDWORD lpVolumeSerialNumber, // address of volume serial number LPDWORD lpMaximumComponentLength, // address of system39。 大家應該看出來點什么了吧?函數(shù)調(diào)用是先把最后一個參數(shù)壓棧,參數(shù)壓棧順序是從后往前。 我在前面的 00401414 地址處的那條 MOV BYTE PTR DS:[4033EC],AL 指令后加的注釋是 “磁盤類型參數(shù)送內(nèi)存地址 4033EC”。 。 磁盤類型參數(shù)送內(nèi)存地址4033EC 地址 0040140F 處的那條指令是調(diào)用 GetDriveTypeA 函數(shù),一般函數(shù)調(diào)用后的返回值都保存在 EAX 中,所以地址 00401414 處的那一句 MOV BYTE PTR DS:[4033EC],AL 就是傳遞返回值。 通過分析這個程序的算法,我們發(fā)現(xiàn)這個注冊算法是有漏洞的。 而如果你的卷標和我一樣,且磁盤類型一樣的話,注冊碼也會一樣,并不能真正做到一機一碼。先發(fā)到這感興趣的先消化一下。 再附個斷點表: 常用斷點 (OD 中 ) 攔截窗口: bp CreateWindow 創(chuàng)建窗 口 bp CreateWindowEx(A) 創(chuàng)建窗口 bp ShowWindow 顯示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 獲取窗口文本 攔截消息框: bp MessageBox(A) 創(chuàng)建消息框 bp MessageBoxExA 創(chuàng)建消息框 bp MessageBoxIndirect(A) 創(chuàng)建定制消息框 bp IsDialogMessageW 攔截警告聲: bp MessageBeep 發(fā)出系統(tǒng)警告聲 (如果沒有聲卡就直接驅(qū)動系統(tǒng)喇叭 發(fā)聲 ) 攔截對話框: bp DialogBox 創(chuàng)建模態(tài)對話框 bp DialogBoxParam(A) 創(chuàng)建模態(tài)對話框 bp DialogBoxIndirect 創(chuàng)建模態(tài)對話框 bp DialogBoxIndirectParam(A) 創(chuàng)建模態(tài)對話框 bp CreateDialog 創(chuàng)建非模態(tài)對話框 bp CreateDialogParam(A) 創(chuàng)建非模態(tài)對話框 bp CreateDialogIndirect 創(chuàng)建非模態(tài)對話框 bp CreateDialogIndirectParam(A) 創(chuàng)建非模態(tài)對話框 bp GetDlgItemText(A) 獲取對話框文本 bp GetDlgItemInt 獲取對話框整數(shù)值 攔截剪貼板: bp GetClipboardData 獲取剪貼板數(shù)據(jù) 攔截注冊表: bp RegOpenKey(A) 打開子健 bp RegOpenKeyEx 打開子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 設置子健 bp RegSetValueEx(A) 設置子 健 功能限制攔截斷點: bp EnableMenuItem 禁止或允許菜單項 bp EnableWindow 禁止或允許窗口 攔截時間: bp GetLocalTime 獲取本地時間 bp GetSystemTime 獲取系統(tǒng)時間 bp GetFileTime 獲取文件時間 bp GetTickCount 獲得自系統(tǒng)成功啟動以來所經(jīng)歷的毫秒數(shù) bp GetCurrentTime 獲取當前時間( 16 位) bp SetTimer 創(chuàng)建定時器 bp TimerProc 定時器超時回調(diào)函數(shù) GetDlgItemInt 得指定輸入框整數(shù)值 GetDlgItemText 得指定輸入框輸入字符串 GetDlgItemTextA 得指定輸入框輸入字符串 攔截文件: bp CreateFileA 創(chuàng)建或打開文件 (32 位 ) bp OpenFile 打開文件 (32 位 ) bp ReadFile 讀文件 (32 位 ) bp WriteFile 寫文件 (32 位 ) GetModuleFileNameA GetFileSize Setfilepointer fileopen FindFirstFileA ReadFile 攔截驅(qū)動器: bp GetDriveTypeA 獲取磁盤驅(qū)動器類型 bp GetLogicalDrives 獲取邏輯驅(qū)動器符號 bp GetLogicalDriv
點擊復制文檔內(nèi)容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1