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

正文內(nèi)容

ollydbg圖文入門教程資料(文件)

2024-11-27 05:21 上一頁面

下一頁面
 

【正文】 401449 |. 83F9 00 CMP ECX,0 。如我把這個(gè) Crackme 程序放在 F:\OD 教程\crackhead\ 目錄下,而我 F 盤設(shè)置的卷標(biāo)是 GAME,則這里獲取的就是 GAME, ASCII 碼為 “47414D45”。我們看一下數(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。注意這里是 DWORD,即 “雙字 ”,由 4 個(gè)連續(xù)的字節(jié)構(gòu)成。前面我們已經(jīng)說了取磁盤類型參數(shù)做循環(huán)次數(shù),再取卷標(biāo)值 ASCII 碼的逆序作為數(shù)值,有了這兩個(gè)值就開始計(jì)算了。如果用匯編來寫這個(gè)注冊機(jī)的話就更簡單了,很多內(nèi)容可以直接照抄。 /pFileSystemNameSize = NULL 0040141B |. 6A 00 PUSH 0 。 |pVolumeSerialNumber = NULL 00401423 |. 6A 0B PUSH 0B 。 。這就是一般比較常見的 stdcall 調(diào)用約定。 \GetDriveTypeA 00401414 |. A2 EC334000 MOV BYTE PTR DS:[4033EC],AL 。如果我的分區(qū)沒有卷標(biāo)的話,則卷標(biāo)值為 0,最后的注冊碼就是 797A7553H,即十進(jìn)制 2038068563。另成立一個(gè)菜鳥入門群( 6167883),目的在于探討剛剛接觸做輔助的同志們遇到的基礎(chǔ)和常識(shí)問題,(比如基礎(chǔ)思路?軟件報(bào)錯(cuò)系統(tǒng)報(bào)錯(cuò)?編程語言基礎(chǔ)問題?工具哪里有?哪個(gè)過NP?插件怎么用?等等電腦雞毛蒜皮的事,因?yàn)橐话銌栴}老鳥都懶得回答你,而你還沒動(dòng)手就卡住了!當(dāng)然更歡迎高手來做老師指導(dǎo)我們。 有七章之多。查一下 MSDN 可以知道 GetDriveTypeA 函數(shù)的返回值有這幾個(gè): 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 上面那個(gè) “返回在 EAX 中的值 ”是我加的,我這里返回的是 3,即磁盤不可從驅(qū)動(dòng)器上刪除。為什么這樣寫?大家把前一句和這一句合起來看一下: 0040140F |. E8 B4000000 CALL JMP.amp。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 。 |pFileSystemFlags = NULL 0040141F |. 6A 00 PUSH 0 。這里只要大家注意函數(shù)參數(shù)傳遞的次序,即調(diào)用約定。 把 ESI 中的值與 797A7553H 異或 這里算出來的 b 最后還要和 797A7553H 異或一下才是真正的注冊碼。因此經(jīng)過 MOV EBX,DWORD PTR DS:[ESI] 這條指令,就是把從地址 40339C 開始處的值送到 EBX,所以我們得到了 “454D4147”。比如一個(gè)字由兩個(gè)字節(jié)組成,像這樣: 12 34 ,這里的高字節(jié)就是 12 ,低字節(jié)就是 34。為什么會(huì)這樣呢?如果大家對(duì) x86 系列 CPU 的存儲(chǔ)方式了解的話,這里就容易理解了。 沒完繼續(xù) 0040144E |. 893D 9C334000 MOV DWORD PTR DS:[40339C],EDI 。 循環(huán)遞減取磁盤類型參數(shù)值與卷標(biāo)名 值相乘 00401446 |. 03F8 ADD EDI,EAX 。 磁盤類型參數(shù)送 ECX 0040143E |. 33FF XOR EDI,EDI 。 |RootPathName = NULL 0040142C |. E8 A3000000 CALL JMP.amp。 |pMaxFilenameLength = NULL 00401421 |. 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è)置一個(gè)斷點(diǎn),現(xiàn)在我們按 CTR+F2 組合鍵重新載入程序,載入后按 F9 鍵運(yùn)行,我們將會(huì)中斷在我們剛才在 0040140C 地址下的那個(gè)斷點(diǎn)處: 0040140C /$ 60 PUSHAD 0040140D |. 6A 00 PUSH 0 。我們看一下領(lǐng)空,原來是在 內(nèi)?,F(xiàn)在按 F9 鍵讓程序運(yùn)行,呵, OllyDBG 中斷了! 7C932F39 8808 MOV BYTE PTR DS:[EAX],CL 。選中部分會(huì)顯示為灰色。如下圖: 現(xiàn)在將會(huì)出現(xiàn)這樣一個(gè)對(duì)話框: 我們在上面那個(gè)編輯框中輸入我們想查看內(nèi)容的內(nèi)存地址 40339C,然后點(diǎn)確定按鈕,數(shù)據(jù)窗口中顯示如下: 我們可以看到, 40339C 地址開始處的這段內(nèi)存里面還沒有內(nèi)容。更多關(guān)于斷點(diǎn)的知識(shí)大家可以參考 論壇精華 7基礎(chǔ)知識(shí) 斷點(diǎn)技巧 斷點(diǎn)原理 這篇 Lenus 兄弟寫的《如何對(duì)抗硬件斷點(diǎn)之一 調(diào)試寄存器》文章,也可以看這個(gè)帖: 根據(jù)當(dāng)前我們調(diào)試的具體程序的情況,我們選用內(nèi)存寫入斷點(diǎn)。這里我們選 “ 是 ” ,程序被重新載入,我們停在下面這一句上: 00401000 /$ 6A 00 PUSH 0 。哈哈,原來就在附近?。? 我們現(xiàn)在知道 ESI 寄存器的值是從內(nèi)存地址 40339C 中送過來的,那內(nèi)存地址 40339C 中的數(shù)據(jù)是什么時(shí)候產(chǎn)生的呢?大家注意,我這里信息窗口中顯示的是 DS:[0040339C]=9FCF87AA,你那可能是 DS:[0040339C]=XXXXXXXX,這里的 XXXXXXXX 表示的是其它的值,就是說與我這里顯示的 9FCF87AA 不一樣。 GetWindowTextA 00401328 |. E8 A5000000 CALL 。今天我們的任務(wù)就是使用 OllyDBG 的內(nèi)存斷點(diǎn)功能找到這個(gè)地方,搞清楚這個(gè)值是如何算出來的。還記得我在前面說到的那個(gè) ESI 寄存器值的問題嗎?現(xiàn)在看看我們上面的分析,其實(shí)對(duì)做注冊機(jī)來說是沒有多少幫助的。我們原來輸入的是字串 “12345666” ,現(xiàn)在轉(zhuǎn)換為了數(shù)字 12345666。 不等則完蛋 光標(biāo)停在了 0040132D 地址處的那條指令上。看到這條和下一條指令,我們要考慮一下這個(gè) ESI 的值是哪里運(yùn)算得出的呢? 00401405 |. 81F6 53757A79 XOR ESI,797A7553 。 把 EDX中的值與經(jīng)過上面運(yùn)算后的 ECX 中值相加送到 EAX 00401402 |. 33C2 XOR EAX,EDX 。 每位字符運(yùn)算后的值與 2倍上一位字符運(yùn)算后值相加后送 ECX 004013F8 |. 8A06 MOV AL,BYTE PTR DS:[ESI] 。 取 “”號(hào)后的第一個(gè)字符 004013ED |. 46 INC ESI 。 指針加 1,指向下一個(gè)字符 004013E2 |. 3C 2D CMP AL,2D 。 把注冊碼框中的數(shù)值送到 ESI 004013DB |. 33C9 XOR ECX,ECX 。 不等則完蛋 光標(biāo)停在 00401328 地址處的那條指令上。刪掉 00401474 地址處的斷點(diǎn)后,我再按 F8 鍵,呵,完了,跑到 的領(lǐng)空了。 0040148C $ FF25 24204000 JMP DWORD PTR DS:[amp。 00401480 $ FF25 1C204000 JMP DWORD PTR DS:[amp。等等,怎么回事?怎么按一下 F8 鍵跑到這來了: 00401474 $ FF25 2C204000 JMP DWORD PTR DS:[amp。 MessageBoxA 從上面的代碼,我們很容易看出 00401328 地址處的 CALL 是關(guān)鍵,必須仔細(xì)跟蹤。 Text = Now write a keygen and tut and you39。re done.,0 0040135F | 6A 00 PUSH 0 。 GetWindowTextA 00401328 |. E8 A5000000 CALL 。這個(gè)程序只需在第一條指令設(shè)斷點(diǎn)就可以了?,F(xiàn)在回到我們調(diào)試的程序上來,我們現(xiàn)在就是要找一下我們調(diào)試的程序有沒有調(diào)用 GetDlgItemTextA 或 GetWindowTextA 函數(shù)。對(duì)于編譯為 UNCODE 版的程序可能在 Win98 下不能運(yùn)行,因?yàn)? Win98 并非是完全支持 UNICODE 的系統(tǒng)。我們在 OllyDBG 的反匯編窗口中右擊鼠標(biāo),在彈出菜單中選擇 查找 當(dāng)前模塊中的名稱 (標(biāo)簽 ),或者我們通過按 CTR+N 組合鍵也可以達(dá)到同樣的效果(注意在進(jìn)行此操作時(shí)要在 OllyDBG 中保證是在當(dāng)前被調(diào)試程序的
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1