3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

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

编程问答

OllyDBG完美教程(超强入门级)

發(fā)布時間:2024/7/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OllyDBG完美教程(超强入门级) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

OllyDBG?視頻教程:https://www.bilibili.com/video/av6889190

動態(tài)調試工具之OllyDbg(OD)教程:https://www.bilibili.com/video/av70600053

?

使用 OllyDbg 從零開始 Cracking.chm ( 58章?):https://pan.baidu.com/s/18iXvF5I_No4-a1DK3jKrbg????提取碼:45xy?
OllyDBG 完美教程(超強入門級)?:鏈接:https://pan.baidu.com/s/1fLTdBn9400rkx_iAgJ7bZg????提取碼:dvi5
OllyDbg 幫助文檔翻譯:https://www.0xaa55.com/thread-1122-1-1.html
看雪論壇工具介紹及下載:https://tools.pediy.com/win/debuggers.htm

?

?

?

一、OllyDBG?的安裝與配置

?

OllyDBG?1.10?版的發(fā)布版本是個?ZIP?壓縮包,只要解壓到一個目錄下,運行?OllyDBG.exe?就可以了。漢化版的發(fā)布版本是個?RAR?壓縮包,同樣只需解壓到一個目錄下運行?OllyDBG.exe?即可:

OllyDBG?中各個窗口的功能如上圖。簡單解釋一下各個窗口的功能,更詳細的內容可以參考?TT?小組翻譯的中文幫助:

  • 反匯編窗口?:顯示被調試程序的反匯編代碼,標題欄上的地址、HEX?數據、反匯編、注釋 可以通過在窗口中右擊出現的菜單?界面選項 -> 隱藏標題?或?顯示標題?來進行切換是否顯示。用鼠標左鍵點擊注釋標簽可以切換注釋顯示的方式。
  • 寄存器窗口?:顯示當前所選線程的?CPU?寄存器內容。同樣點擊標簽?寄存器?(FPU)?可以切換顯示寄存器的方式。
  • 信息窗口?:顯示反匯編窗口中選中的第一個命令的參數及一些跳轉目標地址、字串等。
  • 數據窗口?:顯示內存或文件的內容。右鍵菜單可用于切換顯示方式。
  • 堆棧窗口?:顯示當前線程的堆棧。

要調整上面各個窗口的大小的話,只需左鍵按住邊框拖動,等調整好了,重新啟動一下?OllyDBG?就可以生效了。

啟動后,我們要把 插件 及?UDD的目錄?配置為 絕對路徑,點擊菜單上的?選項 -> 界面,將會出來一個界面選項的對話框,我們點擊其中的 目錄 標簽 :

因為我這里是把?OllyDBG?解壓在?F:\OllyDBG?目錄下,所以相應的?UDD?目錄及插件目錄按圖上配置。還有一個常用到的標簽就是上圖后面那個字體,在這里你可以更改?OllyDBG?中顯示的字體。上圖中其它的選項可以保留為默認,若有需要也可以自己修改。修改完以后點擊確定,彈出一個對話框,說我們更改了插件路徑,要重新啟動?OllyDBG。在這個對話框上點確定,重新啟動一下?OllyDBG,我們再到界面選項中看一下,會發(fā)現我們原先設置好的路徑都已保存了。

有人可能知道插件的作用,但對那個?UDD?目錄不清楚。我這簡單解釋一下:這個?UDD?目錄的作用是保存你調試的工作。比如你調試一個軟件,設置了斷點,添加了注釋,一次沒做完,這時?OllyDBG?就會把你所做的工作保存到這個?UDD?目錄,以便你下次調試時可以繼續(xù)以前的工作。如果不設置這個?UDD?目錄,OllyDBG?默認是在其安裝目錄下保存這些后綴名為?udd?的文件,時間長了就會顯的很亂,所以還是建議專門設置一個目錄來保存這些文件。

另外一個重要的選項就是調試選項,可通過 菜單?-> 選項 -> 調試設置?來配置:

新手一般不需更改這里的選項,默認已配置好,可以直接使用。建議在對?OllyDBG?已比較熟的情況下再來進行配置。上面那個異常標簽中的選項經常會在脫殼中用到,建議在有一定調試基礎后學脫殼時再配置這里。

除了直接啟動?OllyDBG?來調試外,我們還可以把?OllyDBG?添加到資源管理器右鍵菜單,這樣我們就可以直接在?.exe?及?.dll?文件上點右鍵選擇 "?用Ollydbg打開 "?菜單來進行調試。要把?OllyDBG?添加到資源管理器右鍵菜單,只需點 菜單 -> 選項 -> 添加到瀏覽器,將會出現一個對話框,先點擊 "?添加?Ollydbg?到系統(tǒng)資源管理器菜單 ",再點擊 ”完成” 按鈕即可。要從右鍵菜單中刪除也很簡單,還是這個對話框,點擊 "?從系統(tǒng)資源管理器菜單刪除?Ollydbg ",再點擊”完成”就行了。

OllyDBG?支持插件功能,插件的安裝也很簡單,只要把下載的插件(一般是個?DLL?文件)復制到?OllyDBG?安裝目錄下的?PLUGIN?目錄中就可以了,OllyDBG?啟動時會自動識別。要注意的是?OllyDBG?1.10?對插件的個數有限制,最多不能超過?32?個,否則會出錯。建議插件不要添加的太多。
到這里基本配置就完成了,OllyDBG?把所有配置都放在安裝目錄下的?ollydbg.ini?文件中。

?

?

二、基本調試方法

?

OllyDBG?有三種方式來載入程序進行調試:

  • 一種是點擊 菜單 ->?文件 -> 打開?( 快捷鍵是?F3 )來打開一個可執(zhí)行文件進行調試,
  • 另一種是點擊 菜單 -> 文件 -> 附加,來附加到一個已運行的進程上進行調試。注意這里要附加的程序必須已運行。
  • 第三種就是用右鍵菜單來載入程序(不知這種算不算)。
  • 一般情況下我們選第一種方式。比如我們選擇一個?test.exe?來調試,通過菜單?文件->打開?來載入這個程序,OllyDBG?中顯示的內容將會是這樣:

    調試中我們經常要用到的快捷鍵有這些:

    • F2:設置斷點。只要在光標定位的位置(上圖中灰色條)按F2鍵即可,再按一次F2鍵則會刪除斷點。(相當于?SoftICE?中的?F9)
    • F8:單步跳過。每按一次這個鍵執(zhí)行一條反匯編窗口中的一條指令,遇到?CALL?等子程序不進入其代碼。(相當于?SoftICE?中的?F10)
    • F7:單步步入。功能同單步步過(F8)類似,區(qū)別是遇到?CALL?等子程序時會進入其中,進入后首先會停留在子程序的第一條指令上。(相當于?SoftICE?中的?F8)
    • F4:運行到選定位置。作用就是直接運行到光標所在位置處暫停。(相當于?SoftICE?中的?F7)
    • F9:運行。按下這個鍵如果沒有設置相應斷點的話,被調試的程序將直接開始運行。(相當于?SoftICE?中的?F5)
    • CTR + F9:執(zhí)行到返回。此命令在執(zhí)行到一個?ret?(返回指令)指令時暫停,常用于從系統(tǒng)領空返回到我們調試的程序領空。(相當于?SoftICE?中的?F12)
    • ALT + F9:執(zhí)行到用戶代碼。可用于從系統(tǒng)領空快速返回到我們調試的程序領空。(相當于?SoftICE?中的?F11)

    上面提到的幾個快捷鍵對于一般的調試基本上已夠用了。要開始調試只需設置好斷點,找到你感興趣的代碼段再按?F8?或?F7?鍵來一條條分析指令功能就可以了

    ?

    ?

    字串參考

    ?

    Crackme?#3?鏈接:https://pan.baidu.com/s/1AVJliU_L9BrqIrTVJBL8dw?? ?提取碼:un9n?

    上一篇是使用入門,現在我們開始正式進入破解。今天的目標程序是看雪兄《加密與解密》第一版附帶光盤中的?crackmes.cjb.NET?鏡像打包中的?CFF?Crackme?#3,采用用戶名/序列號保護方式。原版加了個?UPX?的殼。剛開始學破解先不涉及殼的問題,我們主要是熟悉用?OllyDBG?來破解的一般方法。我這里把殼脫掉來分析,附件是脫殼后的文件,直接就可以拿來用。先說一下一般軟件破解的流程:拿到一個軟件先別接著馬上用?OllyDBG?調試,先運行一下,有幫助文檔的最好先看一下幫助,熟悉一下軟件的使用方法,再看看注冊的方式。如果是序列號方式可以先輸個假的來試一下,看看有什么反應,也給我們破解留下一些有用的線索。如果沒有輸入注冊碼的地方,要考慮一下是不是讀取注冊表或?Key?文件(一般稱?keyfile,就是程序讀取一個文件中的內容來判斷是否注冊),這些可以用其它工具來輔助分析。如果這些都不是,原程序只是一個功能不全的試用版,那要注冊為正式版本就要自己來寫代碼完善了。有點跑題了,呵呵。獲得程序的一些基本信息后,還要用查殼的工具來查一下程序是否加了殼,若沒殼的話看看程序是什么編譯器編的,如?VC、Delphi、VB?等。這樣的查殼工具有?PEiD?和?FI。有殼的話我們要盡量脫了殼后再來用?OllyDBG?調試,特殊情況下也可帶殼調試。下面進入正題:
    我們先來運行一下這個?crackme(用?PEiD?檢測顯示是?Delphi?編的),界面如圖:

    這個?crackme?已經把用戶名和注冊碼都輸好了,省得我們動手^_^。我們在那個“Register?now?!”按鈕上點擊一下,將會跳出一個對話框:

    好了,今天我們就從這個錯誤對話框中顯示的“Wrong?Serial,?try?again!”來入手。啟動?OllyDBG,選擇菜單?文件->打開?載入?CrackMe3.exe?文件,我們會停在這里:

    我們在反匯編窗口中右擊,出來一個菜單,我們在?查找->所有參考文本字串?上左鍵點擊:

    當然如果用上面那個?超級字串參考+?插件會更方便。但我們的目標是熟悉?OllyDBG?的一些操作,我就盡量使用?OllyDBG?自帶的功能,少用插件。好了,現在出來另一個對話框,我們在這個對話框里右擊,選擇”查找文本”菜單項,輸入“Wrong?Serial,?try?again!”的開頭單詞“Wrong”(注意這里查找內容要區(qū)分大小寫)來查找,找到一處:

    在我們找到的字串上右擊,再在出來的菜單上點擊”反匯編窗口中跟隨”,我們來到這里:

    見上圖,為了看看是否還有其他的參考,可以通過選擇右鍵菜單查找參考->立即數,會出來一個對話框:

    分別雙擊上面標出的兩個地址,我們會來到對應的位置:

    00440F79?|.?BA?8C104400? ? ? ?MOV?EDX,CrackMe3.0044108C?????????????;?ASCII?“Wrong?Serial,try?again!”
    00440F7E?|.?A1?442C4400? ? ? ?MOV?EAX,DWORD?PTR?DS:[442C44]
    00440F83?|.?8B00? ? ? ? ? ? ? ? ? ? ?MOV?EAX,DWORD?PTR?DS:[EAX]
    00440F85?|.?E8?DEC0FFFF? ? ?CALL?CrackMe3.0043D068
    00440F8A?|.?EB?18? ? ? ? ? ? ? ? ? ?JMP?SHORT?CrackMe3.00440FA4
    00440F8C?|>?6A?00? ? ? ? ? ? ? ? ? PUSH?0
    00440F8E?|.?B9?80104400? ? ? ?MOV?ECX,CrackMe3.00441080?????????????;?ASCII?“Beggar?off!”
    00440F93?|.?BA?8C104400? ? ? ?MOV?EDX,CrackMe3.0044108C?????????????;?ASCII?“Wrong?Serial,try?again!”
    00440F98?|.?A1?442C4400? ? ? ?MOV?EAX,DWORD?PTR?DS:[442C44]
    00440F9D?|.?8B00? ? ? ? ? ? ? ? ? ? MOV?EAX,DWORD?PTR?DS:[EAX]
    00440F9F?|.?E8?C4C0FFFF?????CALL?CrackMe3.0043D068

    我們在反匯編窗口中向上滾動一下再看看:

    00440F2C |. 8B45 FC ? ? ? ? MOV EAX,DWORD PTR SS:[EBP-4]
    00440F2F |. BA 14104400 ? ? MOV EDX,CrackMe3.00441014 ? ? ? ? ? ? ; ASCII “Registered User”
    00440F34 |. E8 F32BFCFF ? ? CALL CrackMe3.00403B2C ? ? ? ? ? ? ? ?; 關鍵,要用F7跟進去
    00440F39 |. 75 51 ? ? ? ? ? JNZ SHORT CrackMe3.00440F8C ? ? ? ? ? ; 這里跳走就完蛋
    00440F3B |. 8D55 FC ? ? ? ? LEA EDX,DWORD PTR SS:[EBP-4]
    00440F3E |. 8B83 C8020000 ? MOV EAX,DWORD PTR DS:[EBX+2C8]
    00440F44 |. E8 D7FEFDFF ? ? CALL CrackMe3.00420E20
    00440F49 |. 8B45 FC ? ? ? ? MOV EAX,DWORD PTR SS:[EBP-4]
    00440F4C |. BA 2C104400 ? ? MOV EDX,CrackMe3.0044102C ? ? ? ? ? ? ; ASCII “GFX-754-IER-954”
    00440F51 |. E8 D62BFCFF ? ? CALL CrackMe3.00403B2C ? ? ? ? ? ? ? ?; 關鍵,要用F7跟進去
    00440F56 |. 75 1A ? ? ? ? ? JNZ SHORT CrackMe3.00440F72 ? ? ? ? ? ; 這里跳走就完蛋
    00440F58 |. 6A 00 PUSH 0
    00440F5A |. B9 3C104400 ? ? MOV ECX,CrackMe3.0044103C ? ? ? ? ? ? ; ASCII “CrackMe cracked successfully”
    00440F5F |. BA 5C104400 ? ? MOV EDX,CrackMe3.0044105C ? ? ? ? ? ? ; ASCII “Congrats! You cracked this CrackMe!”
    00440F64 |. A1 442C4400 ? ? MOV EAX,DWORD PTR DS:[442C44]
    00440F69 |. 8B00 ? ? ? ? ? ?MOV EAX,DWORD PTR DS:[EAX]
    00440F6B |. E8 F8C0FFFF ? ? CALL CrackMe3.0043D068
    00440F70 |. EB 32 ? ? ? ? ? JMP SHORT CrackMe3.00440FA4
    00440F72 |> 6A 00 ? ? ? ? ? PUSH 0
    00440F74 |. B9 80104400 ? ? MOV ECX,CrackMe3.00441080 ? ? ? ? ? ? ; ASCII “Beggar off!”
    00440F79 |. BA 8C104400 ? ? MOV EDX,CrackMe3.0044108C ? ? ? ? ? ? ; ASCII “Wrong Serial,try again!”
    00440F7E |. A1 442C4400 ? ? MOV EAX,DWORD PTR DS:[442C44]
    00440F83 |. 8B00 ? ? ? ? ? ?MOV EAX,DWORD PTR DS:[EAX]
    00440F85 |. E8 DEC0FFFF ? ? CALL CrackMe3.0043D068
    00440F8A |. EB 18 ? ? ? ? ? JMP SHORT CrackMe3.00440FA4
    00440F8C |> 6A 00 ? ? ? ? ? PUSH 0
    00440F8E |. B9 80104400 ? ? MOV ECX,CrackMe3.00441080 ? ? ? ? ? ? ; ASCII “Beggar off!”
    00440F93 |. BA 8C104400 ? ? MOV EDX,CrackMe3.0044108C ? ? ? ? ? ? ; ASCII “Wrong Serial,try again!”
    00440F98 |. A1 442C4400 ? ? MOV EAX,DWORD PTR DS:[442C44]
    00440F9D |. 8B00 ? ? ? ? ? ?MOV EAX,DWORD PTR DS:[EAX]
    00440F9F |. E8 C4C0FFFF ? ? CALL CrackMe3.0043D068

    大家注意看一下上面的注釋,我在上面標了兩個關鍵點。有人可能要問,你怎么知道那兩個地方是關鍵點?其實很簡單,我是根據查看是哪條指令跳到 “wrong?serial,try?again” 這條字串對應的指令來決定的。如果你在?調試選項->CPU?標簽中把”顯示跳轉路徑”及其下面的兩個”如跳轉未實現則顯示灰色路徑”、”顯示跳轉到選定命令的路徑”都選上的話,就會看到是從什么地方跳到出錯字串處的:

    我們在上圖中地址?00440F2C?處按?F2?鍵設個斷點,現在我們按?F9?鍵,程序已運行起來了。我在上面那個編輯框中隨便輸入一下,如?CCDebuger,下面那個編輯框我還保留為原來的“754-GFX-IER-954”,我們點一下那個“Register?now?!”按鈕,呵,OllyDBG?跳了出來,暫停在我們下的斷點處。我們看一下信息窗口,你應該發(fā)現了你剛才輸入的內容了吧?我這里顯示是這樣:

    堆棧?SS:[0012F9AC]=00D44DB4,?(ASCII?“CCDebuger”)
    EAX=00000009

    上面的內存地址?00D44DB4?中就是我們剛才輸入的內容,我這里是?CCDebuger。你可以在?堆棧?SS:[0012F9AC]=00D44DB4,?(ASCII?“CCDebuger”)?這條內容上左擊選擇一下,再點右鍵,在彈出菜單中選擇”數據窗口中跟隨數值”,你就會在下面的數據窗口中看到你剛才輸入的內容。而?EAX=00000009?指的是你輸入內容的長度。如我輸入的?CCDebuger?是9個字符。如下圖所示:

    現在我們來按?F8?鍵一步步分析一下:

    00440F2C?|.?8B45?FC?????????MOV?EAX,DWORD?PTR?SS:[EBP-4]??????????;?把我們輸入的內容送到EAX,我這里是“CCDebuger”
    00440F2F?|.?BA?14104400?????MOV?EDX,CrackMe3.00441014?????????????;?ASCII?“Registered?User”
    00440F34?|.?E8?F32BFCFF?????CALL?CrackMe3.00403B2C????????????????;?關鍵,要用F7跟進去
    00440F39?|.?75?51???????????JNZ?SHORT?CrackMe3.00440F8C???????????;?這里跳走就完蛋

    當我們按?F8?鍵走到?00440F34?|.?E8?F32BFCFF?????CALL?CrackMe3.00403B2C?這一句時,我們按一下?F7?鍵,進入這個?CALL,進去后光標停在這一句:

    我們所看到的那些?PUSH?EBX、?PUSH?ESI?等都是調用子程序保存堆棧時用的指令,不用管它,按?F8?鍵一步步過來,我們只關心關鍵部分:

    00403B2C?/$?53??????????????PUSH?EBX
    00403B2D?|.?56??????????????PUSH?ESI
    00403B2E?|.?57??????????????PUSH?EDI
    00403B2F?|.?89C6????????????MOV?ESI,EAX?????????????????????????;?把EAX內我們輸入的用戶名送到?ESI
    00403B31?|.?89D7????????????MOV?EDI,EDX?????????????????????????;?把EDX內的數據“Registered?User”送到EDI
    00403B33?|.?39D0????????????CMP?EAX,EDX?????????????????????????;?用“Registered?User”和我們輸入的用戶名作比較
    00403B35?|.?0F84?8F000000???JE?CrackMe3.00403BCA????????????????;?相同則跳
    00403B3B?|.?85F6????????????TEST?ESI,ESI????????????????????????;?看看ESI中是否有數據,主要是看看我們有沒有輸入用戶名
    00403B3D?|.?74?68???????????JE?SHORT?CrackMe3.00403BA7??????????;?用戶名為空則跳
    00403B3F?|.?85FF????????????TEST?EDI,EDI
    00403B41?|.?74?6B???????????JE?SHORT?CrackMe3.00403BAE
    00403B43?|.?8B46?FC?????????MOV?EAX,DWORD?PTR?DS:[ESI-4]????????;?用戶名長度送EAX
    00403B46?|.?8B57?FC?????????MOV?EDX,DWORD?PTR?DS:[EDI-4]????????;?“Registered?User”字串的長度送EDX
    00403B49?|.?29D0????????????SUB?EAX,EDX?????????????????????????;?把用戶名長度和“Registered?User”字串長度相減
    00403B4B?|.?77?02???????????JA?SHORT?CrackMe3.00403B4F??????????;?用戶名長度大于“Registered?User”長度則跳
    00403B4D?|.?01C2????????????ADD?EDX,EAX?????????????????????????;?把減后值與“Registered?User”長度相加,即用戶名長度
    00403B4F?|>?52??????????????PUSH?EDX
    00403B50?|.?C1EA?02?????????SHR?EDX,2???????????????????????????;?用戶名長度值右移2位,這里相當于長度除以4
    00403B53?|.?74?26???????????JE?SHORT?CrackMe3.00403B7B??????????;?上面的指令及這條指令就是判斷用戶名長度最少不能低于4
    00403B55?|>?8B0E????????????MOV?ECX,DWORD?PTR?DS:[ESI]??????????;?把我們輸入的用戶名送到ECX
    00403B57?|.?8B1F????????????MOV?EBX,DWORD?PTR?DS:[EDI]??????????;?把“Registered?User”送到EBX
    00403B59?|.?39D9????????????CMP?ECX,EBX?????????????????????????;?比較
    00403B5B?|.?75?58???????????JNZ?SHORT?CrackMe3.00403BB5?????????;?不等則完蛋

    根據上面的分析,我們知道用戶名必須是“Registered?User”。我們按?F9?鍵讓程序運行,出現錯誤對話框,點確定,重新在第一個編輯框中輸入“Registered?User”,再次點擊那個“Register?now?!”按鈕,被?OllyDBG?攔下。因為地址?00440F34?處的那個?CALL?我們已經分析清楚了,這次就不用再按?F7?鍵跟進去了,直接按?F8?鍵通過。我們一路按?F8?鍵,來到第二個關鍵代碼處:

    00440F49?|.?8B45?FC?????????MOV?EAX,DWORD?PTR?SS:[EBP-4]?????????;?取輸入的注冊碼
    00440F4C?|.?BA?2C104400?????MOV?EDX,CrackMe3.0044102C????????????;?ASCII?“GFX-754-IER-954”
    00440F51?|.?E8?D62BFCFF?????CALL?CrackMe3.00403B2C???????????????;?關鍵,要用F7跟進去
    00440F56?|.?75?1A???????????JNZ?SHORT?CrackMe3.00440F72??????????;?這里跳走就完蛋

    大家注意看一下,地址?00440F51?處的?CALL?CrackMe3.00403B2C?和上面我們分析的地址?00440F34?處的?CALL?CrackMe3.00403B2C?是不是匯編指令都一樣啊?這說明檢測用戶名和注冊碼是用的同一個子程序。而這個子程序?CALL?我們在上面已經分析過了。我們執(zhí)行到現在可以很容易得出結論,這個?CALL?也就是把我們輸入的注冊碼與?00440F4C?地址處指令后的“GFX-754-IER-954”作比較,相等則?OK。好了,我們已經得到足夠的信息了。現在我們在菜單?查看->斷點?上點擊一下,打開斷點窗口(也可以通過組合鍵?ALT+B?或點擊工具欄上那個“B”圖標打開斷點窗口):

    為什么要做這一步,而不是把這個斷點刪除呢?這里主要是為了保險一點,萬一分析錯誤,我們還要接著分析,要是把斷點刪除了就要做一些重復工作了。還是先禁用一下,如果經過實際驗證證明我們的分析是正確的,再刪不遲。現在我們把斷點禁用,在?OllyDBG?中按?F9?鍵讓程序運行。輸入我們經分析得出的內容:
    用戶名:Registered?User
    注冊碼:GFX-754-IER-954
    點擊“Register?now?!”按鈕,呵呵,終于成功了:

    ?

    ?

    函數參考

    ?

    現在進入第三篇,這一篇我們重點講解怎樣使用?OllyDBG?中的函數參考(即名稱參考)功能。仍然選擇?crackmes.cjb.Net?鏡像打包中的一個名稱為?CrackHead?的crackme。老規(guī)矩,先運行一下這個程序看看:

    呵,竟然沒找到輸入注冊碼的地方!別急,我們點一下程序上的那個菜單“Shit”(真是?Shit?啊,呵呵),在下拉菜單中選“Try?It”,會來到如下界面:

    我們點一下那個“Check?It”按鈕試一下,哦,竟然沒反應!我再輸個“78787878”試試,還是沒反應。再試試輸入字母或其它字符,輸不進去。由此判斷注冊碼應該都是數字,只有輸入正確的注冊碼才有動靜。用?PEiD?檢測一下,結果為?MASM32?/?TASM32,怪不得程序比較小。信息收集的差不多了,現在關掉這個程序,我們用?OllyDBG?載入,按?F9?鍵直接讓它運行起來,依次點擊上面圖中所說的菜單,使被調試程序顯示如上面的第二個圖。先不要點那個“Check?It”按鈕,保留上圖的狀態(tài)。現在我們沒有什么字串好參考了,我們就在?API?函數上下斷點,來讓被調試程序中斷在我們希望的地方。我們在?OllyDBG?的反匯編窗口中右擊鼠標,在彈出菜單中選擇?查找->當前模塊中的名稱?(標簽),或者我們通過按?CTR+N?組合鍵也可以達到同樣的效果(注意在進行此操作時要在?OllyDBG?中保證是在當前被調試程序的領空,我在第一篇中已經介紹了領空的概念,如我這里調試這個程序時?OllyDBG?的標題欄顯示的就是“[CPU?-?主線程,?模塊?-?CrackHea]”,這表明我們當前在被調試程序的領空)。通過上面的操作后會彈出一個對話框,如圖:

    對于這樣的編輯框中輸注冊碼的程序我們要設斷點首選的?API?函數就是?GetDlgItemText?及?GetWindowText。每個函數都有兩個版本,一個是?ASCII?版,在函數后添加一個?A?表示,如?GetDlgItemTextA,另一個是?UNICODE?版,在函數后添加一個?W?表示。如?GetDlgItemTextW。對于編譯為?UNCODE?版的程序可能在?Win98?下不能運行,因為?Win98?并非是完全支持?UNICODE?的系統(tǒng)。而?NT?系統(tǒng)則從底層支持?UNICODE,它可以在操作系統(tǒng)內對字串進行轉換,同時支持?ASCII?和?UNICODE?版本函數的調用。一般我們打開的程序看到的調用都是?ASCII?類型的函數,以“A”結尾。又跑題了,呵呵。現在回到我們調試的程序上來,我們現在就是要找一下我們調試的程序有沒有調用?GetDlgItemTextA?或?GetWindowTextA?函數。還好,找到一個?GetWindowTextA。在這個函數上右擊,在彈出菜單上選擇”在每個參考上設置斷點”,我們會在?OllyDBG?窗口最下面的那個狀態(tài)欄里看到”已設置?2?個斷點”。另一種方法就是那個?GetWindowTextA?函數上右擊,在彈出菜單上選擇”查找輸入函數參考”(或者按回車鍵),將會出現下面的對話框:

    看上圖,我們可以把兩條都設上斷點。這個程序只需在第一條指令設斷點就可以了。好,我們現在按前面提到的第一條方法,就是”在每個參考上設置斷點”,這樣上圖中的兩條指令都會設上斷點。斷點設好后我們轉到我們調試的程序上來,現在我們在被我們調試的程序上點擊那個“Check?It”按鈕,被?OllyDBG?斷下:

    00401323?|.?E8?4C010000?????????CALL?<JMP.&USER32.GetWindowTextA>???????????;?GetWindowTextA
    00401328?|.?E8?A5000000?????????CALL?CrackHea.004013D2??????????????????????;?關鍵,要按F7鍵跟進去
    0040132D?|.?3BC6????????????????CMP?EAX,ESI?????????????????????????????????;?比較
    0040132F?|.?75?42???????????????JNZ?SHORT?CrackHea.00401373?????????????????;?不等則完蛋
    00401331?|.?EB?2C???????????????JMP?SHORT?CrackHea.0040135F
    00401333?|.?4E?6F?77?20?7>??????ASCII?“Now?write?a?keyg”
    00401343?|.?65?6E?20?61?6>??????ASCII?“en?and?tut?and?y”
    00401353?|.?6F?75?27?72?6>??????ASCII?“ou&apos;re?done.”,0
    0040135F?|>?6A?00???????????????PUSH?0??????????????????????????????????????;?Style?=?MB_OK|MB_APPLMODAL
    00401361?|.?68?0F304000?????????PUSH?CrackHea.0040300F??????????????????????;?Title?=?“Crudd&apos;s?Crack?Head”
    00401366?|.?68?33134000?????????PUSH?CrackHea.00401333??????????????????????;?Text?=?“Now?write?a?keygen?and?tut?and?you&apos;re?done.”
    0040136B?|.?FF75?08?????????????PUSH?DWORD?PTR?SS:[EBP+8]???????????????????;?hOwner
    0040136E?|.?E8?19010000?????????CALL?<JMP.&USER32.MessageBoxA>??????????????;?MessageBoxA

    從上面的代碼,我們很容易看出?00401328?地址處的?CALL?CrackHea.004013D2?是關鍵,必須仔細跟蹤。而注冊成功則會顯示一個對話框,標題是“Crudd&apos;s?Crack?Head”,對話框顯示的內容是“Now?write?a?keygen?and?tut?and?you&apos;re?done.”現在我按一下?F8,準備步進到?00401328?地址處的那條?CALL?CrackHea.004013D2?指令后再按?F7?鍵跟進去。等等,怎么回事?怎么按一下?F8?鍵跑到這來了:

    00401474?-?FF25?30204000??????JMP?DWORD?PTR?DS:[<&USER32.LoadCursorA>]?????;?USER32.LoadCursorA
    00401480?-?FF25?20204000??????JMP?DWORD?PTR?DS:[<&USER32.LoadMenuA>]???????;?USER32.LoadMenuA
    0040148C?$-?FF25?24204000??????JMP?DWORD?PTR?DS:[<&USER32.MessageBoxA>]?????;?USER32.MessageBoxA

    原來是跳到另一個斷點了。這個斷點我們不需要,按一下?F2?鍵刪掉它吧。刪掉?00401474?地址處的斷點后,我再按?F8?鍵,呵,完了,跑到?User32.dll?的領空了。看一下?OllyDBG?的標題欄:“[CPU?-?主線程,?模塊?-?USER32],跑到系統(tǒng)領空了,OllyDBG?反匯編窗口中顯示代碼是這樣:

    77D3213C?6A?0C?????????????????PUSH?0C
    77D3213E?68?A021D377???????????PUSH?USER32.77D321A0
    77D32143?E8?7864FEFF???????????CALL?USER32.77D185C0

    怎么辦?別急,我們按一下?ALT+F9?組合鍵,呵,回來了:

    00401328?|.?E8?A5000000????????CALL?CrackHea.004013D2?????????????????????;?關鍵,要按F7鍵跟進去
    0040132D?|.?3BC6???????????????CMP?EAX,ESI????????????????????????????????;?比較
    0040132F?|.?75?42??????????????JNZ?SHORT?CrackHea.00401373????????????????;?不等則完蛋

    光標停在?00401328?地址處的那條指令上。現在我們按?F7?鍵跟進:

    004013D2?/$?56????????????????PUSH?ESI????????????????????????????????????;?ESI入棧
    004013D3?|.?33C0??????????????XOR?EAX,EAX?????????????????????????????????;?EAX清零
    004013D5?|.?8D35?C4334000?????LEA?ESI,DWORD?PTR?DS:[4033C4]???????????????;?把注冊碼框中的數值送到ESI
    004013DB?|.?33C9??????????????XOR?ECX,ECX?????????????????????????????????;?ECX清零
    004013DD?|.?33D2??????????????XOR?EDX,EDX?????????????????????????????????;?EDX清零
    004013DF?|.?8A06??????????????MOV?AL,BYTE?PTR?DS:[ESI]????????????????????;?把注冊碼中的每個字符送到AL
    004013E1?|.?46????????????????INC?ESI?????????????????????????????????????;?指針加1,指向下一個字符
    004013E2?|.?3C?2D?????????????CMP?AL,2D???????????????????????????????????;?把取得的字符與16進制值為2D的字符(即“-“)比較,這里主要用于判斷輸入的是不是負數
    004013E4?|.?75?08?????????????JNZ?SHORT?CrackHea.004013EE?????????????????;?不等則跳
    004013E6?|.?BA?FFFFFFFF???????MOV?EDX,-1??????????????????????????????????;?如果輸入的是負數,則把-1送到EDX,即16進制FFFFFFFF
    004013EB?|.?8A06??????????????MOV?AL,BYTE?PTR?DS:[ESI]????????????????????;?取“-“號后的第一個字符
    004013ED?|.?46????????????????INC?ESI?????????????????????????????????????;?指針加1,指向再下一個字符
    004013EE?|>?EB?0B?????????????JMP?SHORT?CrackHea.004013FB
    004013F0?|>?2C?30?????????????SUB?AL,30???????????????????????????????????;?每位字符減16進制的30,因為這里都是數字,如1的ASCII碼是“31H”,減30H后為1,即我們平時看到的數值
    004013F2?|.?8D0C89????????????LEA?ECX,DWORD?PTR?DS:[ECX+ECX*4]????????????;?把前面運算后保存在ECX中的結果乘5再送到ECX
    004013F5?|.?8D0C48????????????LEA?ECX,DWORD?PTR?DS:[EAX+ECX*2]????????????;?每位字符運算后的值與2倍上一位字符運算后值相加后送ECX
    004013F8?|.?8A06??????????????MOV?AL,BYTE?PTR?DS:[ESI]????????????????????;?取下一個字符
    004013FA?|.?46????????????????INC?ESI?????????????????????????????????????;?指針加1,指向再下一個字符
    004013FB?|>?0AC0??????????????OR?AL,AL
    004013FD?|.^?75?F1????????????JNZ?SHORT?CrackHea.004013F0?????????????????;?上面一條和這一條指令主要是用來判斷是否已把用戶輸入的注冊碼計算完
    004013FF?|.?8D040A????????????LEA?EAX,DWORD?PTR?DS:[EDX+ECX]??????????????;?把EDX中的值與經過上面運算后的ECX中值相加送到EAX
    00401402?|.?33C2??????????????XOR?EAX,EDX?????????????????????????????????;?把EAX與EDX異或。如果我們輸入的是負數,則此處功能就是把EAX中的值取反
    00401404?|.?5E????????????????POP?ESI?????????????????????????????????????;?ESI出棧。看到這條和下一條指令,我們要考慮一下這個ESI的值是哪里運算得出的呢?
    00401405?|.?81F6?53757A79?????XOR?ESI,797A7553????????????????????????????;?把ESI中的值與797A7553H異或
    0040140B?\.?C3????????????????RETN


    這里留下了一個問題:那個?ESI?寄存器中的值是從哪運算出來的?先不管這里,我們接著按?F8?鍵往下走,來到?0040140B?地址處的那條?RETN?指令(這里可以通過在調試選項的”命令”標簽中勾選”使用?RET?代替?RETN”來更改返回指令的顯示方式),再按一下?F8,我們就走出?00401328?地址處的那個?CALL?了。現在我們回到了這里:

    0040132D?|.?3BC6?????????????CMP?EAX,ESI??????????????????????????????????;?比較
    0040132F?|.?75?42????????????JNZ?SHORT?CrackHea.00401373??????????????????;?不等則完蛋

    光標停在了?0040132D?地址處的那條指令上。根據前面的分析,我們知道?EAX?中存放的是我們輸入的注冊碼經過計算后的值。我們來看一下信息窗口:

    ESI=E6B5F2F9
    EAX=FF439EBE

    左鍵選擇信息窗口中的?ESI=E6B5F2F9,再按右鍵,在彈出菜單上選”修改寄存器”,我們會看到這樣一個窗口:

    可能你的顯示跟我不一樣,因為這個?crackme?中已經說了每個機器的序列號不一樣。關掉上面的窗口,再對信息窗口中的?EAX=FF439EBE?做同樣操作:

    由上圖我們知道了原來前面分析的對我們輸入的注冊碼進行處理后的結果就是把字符格式轉為數字格式。我們原來輸入的是字串“12345666”,現在轉換為了數字?12345666。這下就很清楚了,隨便在上面那個修改?ESI?圖中顯示的有符號或無符號編輯框中復制一個,粘貼到我們調試的程序中的編輯框中試一下:

    呵呵,成功了。且慢高興,這個?crackme?是要求寫出注冊機的。我們先不要求寫注冊機,但注冊的算法我們要搞清楚。還記得我在前面說到的那個?ESI?寄存器值的問題嗎?現在看看我們上面的分析,其實對做注冊機來說是沒有多少幫助的。要搞清注冊算法,必須知道上面那個?ESI?寄存器值是如何產生的,這弄清楚后才能真正清楚這個?crackme?算法。今天就先說到這里,關于如何追出?ESI?寄存器的值我就留到下一篇-內存斷點?中再講吧。

    ?

    ?

    內存斷點

    ?

    還記得上一篇的內容嗎?在那篇文章中我們分析后發(fā)現一個?ESI?寄存器值不知是從什么地方產生的,要弄清這個問題必須要找到生成這個?ESI?值的計算部分。今天我們的任務就是使用?OllyDBG?的內存斷點功能找到這個地方,搞清楚這個值是如何算出來的。這次分析的目標程序還是上一篇的那個?crackme,附件我就不再上傳了,用上篇中的附件就可以了。下面我們開始:
    還記得我們上篇中所說的關鍵代碼的地方嗎?溫習一下:

    00401323?|.?E8?4C010000?????????CALL?<JMP.&USER32.GetWindowTextA>???????????;?GetWindowTextA
    00401328?|.?E8?A5000000?????????CALL?CrackHea.004013D2??????????????????????;?關鍵,要按F7鍵跟進去
    0040132D?|.?3BC6????????????????CMP?EAX,ESI?????????????????????????????????;?比較
    0040132F?|.?75?42???????????????JNZ?SHORT?CrackHea.00401373?????????????????;?不等則完蛋

    我們重新用?OllyDBG?載入目標程序,F9運行來到上面代碼所在的地方(你上次設的斷點應該沒刪吧?),我們向上看看能不能找到那個?ESI?寄存器中最近是在哪里賦的值。哈哈,原來就在附近啊:

    我們現在知道?ESI?寄存器的值是從內存地址?40339C?中送過來的,那內存地址?40339C?中的數據是什么時候產生的呢?大家注意,我這里信息窗口中顯示的是?DS:[0040339C]=9FCF87AA,你那可能是?DS:[0040339C]=XXXXXXXX,這里的?XXXXXXXX?表示的是其它的值,就是說與我這里顯示的?9FCF87AA?不一樣。我們按上圖的操作在數據窗口中看一下:

    從上圖我們可以看出內存地址?40339C?處的值已經有了,說明早就算過了。現在怎么辦呢?我們考慮一下,看情況程序是把這個值算出來以后寫在這個內存地址,那我們要是能讓?OllyDBG?在程序開始往這個內存地址寫東西的時候中斷下來,不就有可能知道目標程序是怎么算出這個值的嗎?說干就干,我們在?OllyDBG?的菜單上點?調試->重新開始,或者按?CTR+F2?組合鍵(還可以點擊工具欄上的那個有兩個實心左箭頭的圖標)來重新載入程序。這時會跳出一個”進程仍處于激活狀態(tài)”的對話框(我們可以在在調試選項的安全標簽下把”終止活動進程時警告”這條前面的勾去掉,這樣下次就不會出現這個對話框了),問我們是否要終止進程。這里我們選”是”,程序被重新載入,我們停在下面這一句上:

    00401000?>/$?6A?00??????????????PUSH?0??????????????????????????????????????;?pModule?=?NULL

    現在我們就要來設內存斷點了。在?OllyDBG?中一般我們用到的內存斷點有內存訪問和內存寫入斷點。內存訪問斷點就是指程序訪問內存中我們指定的內存地址時中斷,內存寫入斷點就是指程序往我們指定的內存地址中寫東西時中斷。更多關于斷點的知識大家可以參考?論壇精華7->基礎知識->斷點技巧->斷點原理?這篇?Lenus?兄弟寫的《如何對抗硬件斷點之一?—?調試寄存器》文章,也可以看這個帖:http://bbs.pediy.com/showthread.PHP?threadid=10829。根據當前我們調試的具體程序的情況,我們選用內存寫入斷點。還記得前面我叫大家記住的那個?40339C?內存地址嗎?現在我們要用上了。我們先在?OllyDBG?的數據窗口中左鍵點擊一下,再右擊,會彈出一個如下圖所示的菜單。我們選擇其中的轉到->表達式(也可以左鍵點擊數據窗口后按?CTR+G?組合鍵)。如下圖:

    現在將會出現這樣一個對話框:
    ?
    我們在上面那個編輯框中輸入我們想查看內容的內存地址?40339C,然后點確定按鈕,數據窗口中顯示如下:

    我們可以看到,40339C?地址開始處的這段內存里面還沒有內容。我們現在在?40339C?地址處后面的?HEX?數據或?ASCII?欄中按住左鍵往后拖放,選擇一段。內存斷點的特性就是不管你選幾個字節(jié),OllyDBG?都會分配?4096?字節(jié)的內存區(qū)。這里我就選從?40339C?地址處開始的四個字節(jié),主要是為了讓大家提前了解一下硬件斷點的設法,因為硬件斷點最多只能選?4?個字節(jié)。選中部分會顯示為灰色。選好以后松開鼠標左鍵,在我們選中的灰色部分上右擊:

    經過上面的操作,我們的內存斷點就設好了(這里還有個要注意的地方:內存斷點只在當前調試的進程中有效,就是說你如果重新載入程序的話內存斷點就自動刪除了。且內存斷點每一時刻只能有一個。就是說你不能像按?F2?鍵那樣同時設置多個斷點)。現在按?F9?鍵讓程序運行,呵,OllyDBG?中斷了!

    7C932F39?8808???????????????????MOV?BYTE?PTR?DS:[EAX],CL????????????????????;?這就是我們第一次斷下來的地方
    7C932F3B?40?????????????????????INC?EAX
    7C932F3C?4F?????????????????????DEC?EDI
    7C932F3D?4E?????????????????????DEC?ESI
    7C932F3E?^?75?CB????????????????JNZ?SHORT?ntdll.7C932F0B
    7C932F40?8B4D?10????????????????MOV?ECX,DWORD?PTR?SS:[EBP+10]

    上面就是我們中斷后反匯編窗口中的代碼。如果你是其它系統(tǒng),如?Win98?的話,可能會有所不同。沒關系,這里不是關鍵。我們看一下領空,原來是在?ntdll.dll?內。系統(tǒng)領空,我們現在要考慮返回到程序領空。返回前我們看一下數據窗口:

    現在我們轉到反匯編窗口,右擊鼠標,在彈出菜單上選擇斷點->刪除內存斷點,這樣內存斷點就被刪除了。

    現在我們來按一下?ALT+F9?組合鍵,我們來到下面的代碼:

    00401431?|.?8D35?9C334000??????LEA?ESI,DWORD?PTR?DS:[40339C]???????????????;?ALT+F9返回后來到的位置
    00401437?|.?0FB60D?EC334000????MOVZX?ECX,BYTE?PTR?DS:[4033EC]
    0040143E?|.?33FF???????????????XOR?EDI,EDI

    我們把反匯編窗口往上翻翻,呵,原來就在我們上一篇分析的代碼下面啊?

    現在我們在?0040140C?地址處那條指令上按?F2?設置一個斷點,現在我們按??CTR+F2?組合鍵重新載入程序,載入后按?F9?鍵運行,我們將會中斷在我們剛才在?0040140C?地址下的那個斷點處:

    0040140C?/$?60?????????????????PUSHAD
    0040140D?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?/RootPathName?=?NULL
    0040140F?|.?E8?B4000000????????CALL?<JMP.&KERNEL32.GetDriveTypeA>??????????;?\GetDriveTypeA
    00401414?|.?A2?EC334000????????MOV?BYTE?PTR?DS:[4033EC],AL?????????????????;?磁盤類型參數送內存地址4033EC
    00401419?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?/pFileSystemNameSize?=?NULL
    0040141B?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|pFileSystemNameBuffer?=?NULL
    0040141D?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|pFileSystemFlags?=?NULL
    0040141F?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|pMaxFilenameLength?=?NULL
    00401421?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|pVolumeSerialNumber?=?NULL
    00401423?|.?6A?0B??????????????PUSH?0B?????????????????????????????????????;?|MaxVolumeNameSize?=?B?(11.)
    00401425?|.?68?9C334000????????PUSH?CrackHea.0040339C??????????????????????;?|VolumeNameBuffer?=?CrackHea.0040339C
    0040142A?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|RootPathName?=?NULL
    0040142C?|.?E8?A3000000????????CALL?<JMP.&KERNEL32.GetVolumeInformationA>??;?\GetVolumeInformationA
    00401431?|.?8D35?9C334000??????LEA?ESI,DWORD?PTR?DS:[40339C]???????????????;?把crackme程序所在分區(qū)的卷標名稱送到ESI
    00401437?|.?0FB60D?EC334000????MOVZX?ECX,BYTE?PTR?DS:[4033EC]??????????????;?磁盤類型參數送ECX
    0040143E?|.?33FF???????????????XOR?EDI,EDI?????????????????????????????????;?把EDI清零
    00401440?|>?8BC1???????????????MOV?EAX,ECX?????????????????????????????????;?磁盤類型參數送EAX
    00401442?|.?8B1E???????????????MOV?EBX,DWORD?PTR?DS:[ESI]??????????????????;?把卷標名作為數值送到?EBX
    00401444?|.?F7E3???????????????MUL?EBX?????????????????????????????????????;?循環(huán)遞減取磁盤類型參數值與卷標名值相乘
    00401446?|.?03F8???????????????ADD?EDI,EAX?????????????????????????????????;?每次計算結果再加上上次計算結果保存在EDI中
    00401448?|.?49?????????????????DEC?ECX?????????????????????????????????????;?把磁盤類型參數作為循環(huán)次數,依次遞減
    00401449?|.?83F9?00????????????CMP?ECX,0???????????????????????????????????;?判斷是否計算完
    0040144C?|.^?75?F2?????????????JNZ?SHORT?CrackHea.00401440?????????????????;?沒完繼續(xù)
    0040144E?|.?893D?9C334000??????MOV?DWORD?PTR?DS:[40339C],EDI???????????????;?把計算后值送到內存地址40339C,這就是我們后來在ESI中看到的值
    00401454?|.?61?????????????????POPAD
    00401455?\.?C3?????????????????RETN

    通過上面的分析,我們知道基本算法是這樣的:先用?GetDriveTypeA?函數獲取磁盤類型參數,再用?GetVolumeInformationA?函數獲取這個?crackme?程序所在分區(qū)的卷標。如我把這個?Crackme?程序放在?F:\OD教程\crackhead\?目錄下,而我?F?盤設置的卷標是?GAME,則這里獲取的就是?GAME,ASCII?碼為“47414D45”。但我們發(fā)現一個問題:假如原來我們在數據窗口中看到的地址?40339C?處的?16?進制代碼是“47414D45”,即“GAME”,但經過地址?00401442?處的那條?MOV?EBX,DWORD?PTR?DS:[ESI]?指令后,我們卻發(fā)現?EBX?中的值是“454D4147”,正好把我們上面那個“47414D45”反過來了。為什么會這樣呢?如果大家對?x86系列?CPU?的存儲方式了解的話,這里就容易理解了。我們知道“GAME”有四個字節(jié),即?ASCII?碼為“47414D45”。我們看一下數據窗口中的情況:

    0040339C?????47?41?4D?45?00?00?00?00?00?00?00?00?00?00?00?00?????GAME…………

    大家可以看出來內存地址?40339CH?到?40339FH?分別按順序存放的是?47?41?4D?45。
    如下圖:

    系統(tǒng)存儲的原則為”高高低低”,即低字節(jié)存放在地址較低的字節(jié)單元中,高字節(jié)存放在地址較高的字節(jié)單元中。比如一個字由兩個字節(jié)組成,像這樣:12?34?,這里的高字節(jié)就是?12?,低字節(jié)就是?34。上面的那條指令?MOV?EBX,DWORD?PTR?DS:[ESI]?等同于?MOV?EBX,DWORD?PTR?DS:[40339C]。注意這里是?DWORD,即”雙字”,由?4?個連續(xù)的字節(jié)構成。而取地址為?40339C?的雙字單元中的內容時,我們應該得到的是“454D4147”,即由高字節(jié)到低字節(jié)順序的值。因此經過?MOV?EBX,DWORD?PTR?DS:[ESI]?這條指令,就是把從地址?40339C?開始處的值送到?EBX,所以我們得到了“454D4147”。好了,這里弄清楚了,我們再接著談這個程序的算法。前面我們已經說了取磁盤類型參數做循環(huán)次數,再取卷標值?ASCII?碼的逆序作為數值,有了這兩個值就開始計算了。現在我們把磁盤類型值作為?n,卷標值?ASCII?碼的逆序數值作為?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????????????????????????????;?把ESI中的值與797A7553H異或

    這里算出來的?b?最后還要和?797A7553H?異或一下才是真正的注冊碼。只要你對編程有所了解,這個注冊機就很好寫了。如果用匯編來寫這個注冊機的話就更簡單了,很多內容可以直接照抄。
    到此已經差不多了,最后還有幾個東西也說一下吧:
    1、上面用到了兩個?API?函數,一個是?GetDriveTypeA,還有一個是?GetVolumeInformationA,關于這兩個函數的具體用法我就不多說了,大家可以查一下?MSDN。這里只要大家注意函數參數傳遞的次序,即調用約定。先看一下這里:

    00401419?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?/pFileSystemNameSize?=?NULL
    0040141B?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|pFileSystemNameBuffer?=?NULL
    0040141D?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|pFileSystemFlags?=?NULL
    0040141F?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|pMaxFilenameLength?=?NULL
    00401421?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|pVolumeSerialNumber?=?NULL
    00401423?|.?6A?0B??????????????PUSH?0B?????????????????????????????????????;?|MaxVolumeNameSize?=?B?(11.)
    00401425?|.?68?9C334000????????PUSH?CrackHea.0040339C??????????????????????;?|VolumeNameBuffer?=?CrackHea.0040339C
    0040142A?|.?6A?00??????????????PUSH?0??????????????????????????????????????;?|RootPathName?=?NULL
    0040142C?|.?E8?A3000000????????CALL?<JMP.&KERNEL32.GetVolumeInformationA>??;?\GetVolumeInformationA

    把上面代碼后的?OllyDBG?自動添加的注釋與?MSDN?中的函數原型比較一下:
    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?system&apos;s?maximum?filename?length
    LPDWORD?lpFileSystemFlags,??????????//?address?of?file?system?flags
    LPTSTR?lpFileSystemNameBuffer,??????//?address?of?name?of?file?system
    DWORD?nFileSystemNameSize???????????//?length?of?lpFileSystemNameBuffer
    );

    大家應該看出來點什么了吧?函數調用是先把最后一個參數壓棧,參數壓棧順序是從后往前。這就是一般比較常見的?stdcall?調用約定。
    2、我在前面的?00401414?地址處的那條?MOV?BYTE?PTR?DS:[4033EC],AL?指令后加的注釋是”磁盤類型參數送內存地址4033EC”。為什么這樣寫?大家把前一句和這一句合起來看一下:

    0040140F?|.?E8?B4000000????????CALL?<JMP.&KERNEL32.GetDriveTypeA>??????????;?\GetDriveTypeA
    00401414?|.?A2?EC334000????????MOV?BYTE?PTR?DS:[4033EC],AL?????????????????;?磁盤類型參數送內存地址4033EC

    地址?0040140F?處的那條指令是調用?GetDriveTypeA?函數,一般函數調用后的返回值都保存在?EAX?中,所以地址?00401414?處的那一句?MOV?BYTE?PTR?DS:[4033EC],AL?就是傳遞返回值。查一下?MSDN?可以知道?GetDriveTypeA?函數的返回值有這幾個:

    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?(network)?drive.?????????????4
    DRIVE_CDROM???????????????The?drive?is?a?CD-ROM?drive.???????????????????????5
    DRIVE_RAMDISK?????????????The?drive?is?a?RAM?disk.???????????????????????????6

    上面那個”返回在EAX中的值”是我加的,我這里返回的是?3,即磁盤不可從驅動器上刪除。
    3、通過分析這個程序的算法,我們發(fā)現這個注冊算法是有漏洞的。如果我的分區(qū)沒有卷標的話,則卷標值為?0,最后的注冊碼就是?797A7553H,即十進制?2038068563。而如果你的卷標和我一樣,且磁盤類型一樣的話,注冊碼也會一樣,并不能真正做到一機一碼。

    ?

    ?

    消息斷點及?RUN?跟蹤

    ?

    找了幾十個不同語言編寫的?crackme,發(fā)現只用消息斷點的話有很多并不能真正到達我們要找的關鍵位置,想想還是把消息斷點和?RUN?跟蹤結合在一起講,更有效一點。關于消息斷點的更多內容大家可以參考?jingulong?兄的那篇《幾種典型程序Button處理代碼的定位》的文章,堪稱經典之作。今天仍然選擇?crackmes.cjb.net?鏡像打包中的一個名稱為?cycle?的?crackme。按照慣例,我們先運行一下這個程序看看:

    我們輸入用戶名?CCDebuger,序列號?78787878,點上面那個“Check”按鈕,呵,?沒反應!看來是要注冊碼正確才有動靜。現在關掉這個?crackme,用?PEiD?查一下殼,原來是?MASM32?/?TASM32?[Overlay]。啟動?OllyDBG?載入這個程序,F9讓它運行。這個程序按我們前面講的采用字串參考或函數參考的方法都很容易斷下來。但我們今天主要學習的是消息斷點及?RUN?跟蹤,就先用消息斷點來斷這個程序吧。在設消息斷點前,有兩個內容我們要簡單了解一下:首先我們要了解的是消息。Windows?的中文翻譯就是”窗口”,而?Windows?上面的應用程序也都是通過窗口來與用戶交互的。現在就有一個問題,應用程序是如何知道用戶作了什么樣的操作的?這里就要用到消息了。Windows?是個基于消息的系統(tǒng),它在應用程序開始執(zhí)行后,為該程序創(chuàng)建一個”消息隊列”,用來存放該程序可能創(chuàng)建的各種不同窗口的信息。比如你創(chuàng)建窗口、點擊按鈕、移動鼠標等等,都是通過消息來完成的。通俗的說,Windows?就像一個中間人,你要干什么事是先通知它,然后它才通過傳遞消息的方式通知應用程序作出相應的操作。說到這,又有個問題了,在?Windows?下有多個程序都在運行,那我點了某個按鈕,或把某個窗口最大化,Windows?知道我是點的哪個嗎?這里就要說到另一個內容:句柄(handle)了。句柄一般是個?32?位的數,表示一個對象。Windows?通過使用句柄來標識它代表的對象。比如你點擊某個按鈕,Windows?就是通過句柄來判斷你是點擊了那一個按鈕,然后發(fā)送相應的消息通知程序。說完這些我們再回到我們調試的程序上來,你應該已經用?OllyDBG?把這個?crackme?載入并按?F9?鍵運行了吧?現在我們輸入用戶名“CCDebuger”,序列號“78787878”,先不要點那個“Check”按鈕,我們來到?OllyDBG?中,點擊菜單?查看->窗口(或者點擊工具欄上那個“W”的圖標),我們會看到以下內容:

    我們在選中的條目上點右鍵,再選擇上圖所示的菜單項,會來到下面這個窗口:

    現在我們點擊圖上的那個下拉菜單,呵,原來里面的消息真不少。這么多消息我們選哪個呢?注冊是個按鈕,我們就在按下按鈕再松開時讓程序中斷。查一下?MSDN,我們知道這個消息應該是?WM_LBUTTON_UP,看字面意思也可以知道是左鍵松開時的消息:

    從下拉菜單中選中那個?202?WM_LBUTTON_UP,再按確定按鈕,我們的消息斷點就設好了。現在我們還要做一件事,就是把?RUN?跟蹤打開。有人可能要問,這個?RUN?跟蹤是干什么的?簡單的說,RUN?跟蹤就是把被調試程序執(zhí)行過的指令保存下來,讓你可以查看被調試程序運行期間干了哪些事。RUN?跟蹤會把地址、寄存器的內容、消息以及已知的操作數記錄到?RUN?跟蹤緩沖區(qū)中,你可以通過查看?RUN?跟蹤的記錄來了解程序執(zhí)行了那些指令。在這還要注意一個緩沖區(qū)大小的問題,如果執(zhí)行的指令太多,緩沖區(qū)滿了的話,就會自動丟棄前面老的記錄。我們可以在調試選項->跟蹤中設置:

    現在我們回到?OllyDBG?中,點擊菜單調試->打開或清除?RUN?跟蹤(第一次點這個菜單是打開?RUN?跟蹤,在打開的情況下點擊就是清除?RUN?跟蹤的記錄,對?RUN?跟蹤熟悉時還可以設置條件),保證當前在我們調試的程序領空,在反匯編窗口中點擊右鍵,在彈出菜單中選擇?RUN?跟蹤->添加所有函數過程的入口:

    我們可以看到?OllyDBG?把識別出的函數過程都在前面加了灰色條:

    現在我們回到那個?crackme?中按那個“Check”按鈕,被?OllyDBG?斷下了:

    這時我們點擊菜單查看->內存,或者點擊工具欄上那個“M”按鈕(也可以按組合鍵?ALT+M),來到內存映射窗口:

    為什么在這里設訪問斷點,我也說一下。我們可以看一下常見的?PE?文件,沒加過殼的用?PEiD?檢測是這樣:

    點一下?EP?段后面那個“>”符號,我們可以看到以下內容:

    看完上面的圖我們應該了解為什么在?401000?處的代碼段下訪問斷點了,我們這里的意思就是在消息斷點斷下后,只要按?F9?鍵運行時執(zhí)行到程序代碼段的指令我們就中斷,這樣就可以回到程序領空了(當然在?401000?處所在的段不是絕對的,我們主要是要看程序的代碼段在什么位置,其實在上面圖中?OllyDBG?內存窗口的”包含”欄中我們就可以看得很清楚了)。設好訪問斷點后我們按?F9?鍵,被?OllyDBG?斷下:

    現在我們先不管,按?F9?鍵(或者按?CTR+F12?組合鍵跟蹤步過)讓程序運行,再點擊菜單查看->RUN?跟蹤,或者點擊工具欄上的那個“…”符號,打開?RUN?跟蹤的記錄窗口看看:

    我們現在再來看看統(tǒng)計的情況:

    在地址?401082?處的那條指令上雙擊一下,來到以下位置:

    現在我們在地址?4010A6?處的那條指令上按?F2,刪除所有其它的斷點,點菜單調試->關閉?RUN?跟蹤,現在我們就可以開始分析了:

    004010E2?|.?8BFE?????????????MOV?EDI,ESI?????????????????????????????????????????;?用戶名送?EDI
    004010E4?|.?03F8?????????????ADD?EDI,EAX
    004010E6?|.?FC???????????????CLD
    004010E7?|.?F3:A4????????????REP?MOVS?BYTE?PTR?ES:[EDI],BYTE?PTR?DS:[ESI]
    004010E9?|.?33C9?????????????XOR?ECX,ECX?????????????????????????????????????????;?清零,設循環(huán)計數器
    004010EB?|.?BE?71214000??????MOV?ESI,cycle.00402171??????????????????????????????;?注冊碼送ESI
    004010F0?|>?41???????????????INC?ECX
    004010F1?|.?AC???????????????LODS?BYTE?PTR?DS:[ESI]??????????????????????????????;?取注冊碼的每個字符
    004010F2?|.?0AC0?????????????OR?AL,AL????????????????????????????????????????????;?判斷是否為空
    004010F4?|.?74?0A????????????JE?SHORT?cycle.00401100?????????????????????????????;?沒有則跳走
    004010F6?|.?3C?7E????????????CMP?AL,7E???????????????????????????????????????????;?判斷字符是否為非ASCII字符
    004010F8?|.?7F?06????????????JG?SHORT?cycle.00401100?????????????????????????????;?非ASCII字符跳走
    004010FA?|.?3C?30????????????CMP?AL,30???????????????????????????????????????????;?看是否小于30H,主要是判斷是不是數字或字母等
    004010FC?|.?72?02????????????JB?SHORT?cycle.00401100?????????????????????????????;?小于跳走
    004010FE?|.^?EB?F0???????????JMP?SHORT?cycle.004010F0
    00401100?|>?83F9?11??????????CMP?ECX,11??????????????????????????????????????????;?比較注冊碼位數,必須為十進制17位
    00401103?|.?75?1A????????????JNZ?SHORT?cycle.0040111F
    00401105?|.?E8?E7000000??????CALL?cycle.004011F1?????????????????????????????????;?關鍵,F7跟進去
    0040110A?|.?B9?01FF0000??????MOV?ECX,0FF01
    0040110F?|.?51???????????????PUSH?ECX
    00401110?|.?E8?7B000000??????CALL?cycle.00401190?????????????????????????????????;?關鍵,跟進去
    00401115?|.?83F9?01??????????CMP?ECX,1
    00401118?|.?74?06????????????JE?SHORT?cycle.00401120
    0040111A?|>?E8?47000000??????CALL?cycle.00401166?????????????????????????????????;?注冊失敗對話框
    0040111F?|>?C3???????????????RETN
    00401120?|>?A1?68214000??????MOV?EAX,DWORD?PTR?DS:[402168]
    00401125?|.?8B1D?6C214000????MOV?EBX,DWORD?PTR?DS:[40216C]
    0040112B?|.?33C3?????????????XOR?EAX,EBX
    0040112D?|.?3305?82214000????XOR?EAX,DWORD?PTR?DS:[402182]
    00401133?|.?0D?40404040??????OR?EAX,40404040
    00401138?|.?25?77777777??????AND?EAX,77777777
    0040113D?|.?3305?79214000????XOR?EAX,DWORD?PTR?DS:[402179]
    00401143?|.?3305?7D214000????XOR?EAX,DWORD?PTR?DS:[40217D]
    00401149?|.^?75?CF???????????JNZ?SHORT?cycle.0040111A?????????????????????????????;?這里跳走就完蛋
    0040114B?|.?E8?2B000000??????CALL?cycle.0040117B??????????????????????????????????;?注冊成功對話框

    寫到這準備跟蹤算法時,才發(fā)現這個?crackme?還是挺復雜的,具體算法我就不寫了,實在沒那么多時間詳細跟蹤。有興趣的可以跟一下,注冊碼是17位,用戶名采用復制的方式擴展到?16?位,如我輸入“CCDebuger”,擴展后就是“CCDebugerCCDebug”。大致是先取擴展后用戶名的前?8?位和注冊碼的前?8?位,把用戶名的前四位和后四位分別與注冊碼的前四位和后四位進行運算,算完后再把擴展后用戶名的后?8?位和注冊碼的后?8?位分兩部分,再與前面用戶名和注冊碼的前?8?位計算后的值進行異或計算,最后結果等于?0?就成功。注冊碼的第?17?位我尚未發(fā)現有何用處。對于新手來說,可能這個?crackme?的難度大了一點。沒關系,我們主要是學習?OllyDBG?的使用,方法掌握就可以了。

    最后說明一下:
    1、這個程序在設置了消息斷點后可以省略在代碼段上設訪問斷點那一步,直接打開?RUN?跟蹤,消息斷點斷下后按?CTR+F12?組合鍵讓程序執(zhí)行,RUN?跟蹤記錄中就可以找到關鍵地方。
    2、對于這個程序,你可以不設消息斷點,在輸入用戶名和注冊碼后先不按那個“Check”按鈕,直接打開?RUN?跟蹤,添加”所有函數過程的入口”后再回到程序中點“Check”按鈕,這時在?OllyDBG?中打開?RUN?跟蹤記錄同樣可以找到關鍵位置。

    ?

    ?

    匯編功能

    ?

    今天我們的目標程序是?MyUninstaller?1.34?版。這是一個非常小的程序卸載工具,VC6編寫,大小只有61K。我拿到的這個是上次閃電狼兄弟給我的,附帶在里面的簡體中文語言文件是由六芒星制作的。這個程序有個毛病:就是在列出的可卸載程序上雙擊查看屬性時,彈出的屬性窗口的字體非常難看,應該就是系統(tǒng)字體(SYSTEM_FONT):

    我們今天的目標就是利用?OllyDBG?的匯編功能把上面顯示的字體改成我們常見的9號(小五)宋體。首先我們用?OllyDBG?載入程序,按?CTR+N?組合鍵查找一下有哪些?API?函數,只發(fā)現一個和設置字體相關的?CreateFontIndirectA。現在我們按鼠標右鍵,選擇”在每個參考上設置斷點”,關掉名稱對話框,F9運行,程序已經運行起來了。我們在程序的列表框中隨便找一項雙擊一下,很不幸,那個字體難看的界面又出現了,OllyDBG?沒有任何動作。可見創(chuàng)建這個窗口的時候根本沒調用?CreateFontIndirectA,問題現在就變得有點復雜了。先點確定把這個字體難看的對話框關閉,現在我們從另一個方面考慮:既然沒有調用設置字體的函數,那我們來看看這個窗口是如何創(chuàng)建的,跟蹤窗口創(chuàng)建過程可能會找到一些對我們有用的信息。現在我們再回到我們調試程序的領空,按?CTR+N?看一下,發(fā)現?CreateWindowExA?這個?API?函數比較可疑。我們在?CreateWindowExA?函數的每個參考上設上斷點,在?MyUninstaller?的列表框中再隨便找一項雙擊一下,被?OllyDBG?斷下:

    ??00408F5E??|.??FF15?98B24000???|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]????;?\斷在這里

    上下翻看一下代碼:

    ??00408F3B??|.??50??????????????|PUSH?EAX?????????????????????????????????????????;?|hInst
    ??00408F3C??|.??8B45?C0?????????|MOV?EAX,DWORD?PTR?SS:[EBP-40]????????????????????;?|
    ??00408F3F??|.??6A?00???????????|PUSH?0???????????????????????????????????????????;?|hMenu?=?NULL
    ??00408F41??|.??03C6????????????|ADD?EAX,ESI??????????????????????????????????????;?|
    ??00408F43??|.??FF75?08?????????|PUSH?DWORD?PTR?SS:[EBP+8]????????????????????????;?|hParent
    ??00408F46??|.??FF75?D0?????????|PUSH?DWORD?PTR?SS:[EBP-30]???????????????????????;?|Height
    ??00408F49??|.??57??????????????|PUSH?EDI?????????????????????????????????????????;?|Width
    ??00408F4A??|.??50??????????????|PUSH?EAX?????????????????????????????????????????;?|Y
    ??00408F4B??|.??FF75?BC?????????|PUSH?DWORD?PTR?SS:[EBP-44]???????????????????????;?|X
    ??00408F4E??|.??FF75?EC?????????|PUSH?DWORD?PTR?SS:[EBP-14]???????????????????????;?|Style
    ??00408F51??|.??68?80DE4000?????|PUSH?myuninst.0040DE80???????????????????????????;?|WindowName?=?”“
    ??00408F56??|.??68?DCD94000?????|PUSH?myuninst.0040D9DC???????????????????????????;?|Class?=?“STATIC”
    ??00408F5B??|.??FF75?D4?????????|PUSH?DWORD?PTR?SS:[EBP-2C]???????????????????????;?|ExtStyle
    ??00408F5E??|.??FF15?98B24000???|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]????;?\斷在這里
    ??00408F64??|???6A?00???????????|PUSH?0???????????????????????????????????????????;??第一處要修改的地方
    ??00408F66??|???8945?F4?????????|MOV?DWORD?PTR?SS:[EBP-C],EAX
    ??00408F69??|.??E8?A098FFFF?????|CALL?<myuninst.sub_40280E>
    ??00408F6E??|.??50??????????????|PUSH?EAX?????????????????????????????????????????;?|hInst
    ??00408F6F??|.??8B45?DC?????????|MOV?EAX,DWORD?PTR?SS:[EBP-24]????????????????????;?|
    ??00408F72??|.??6A?00???????????|PUSH?0???????????????????????????????????????????;?|hMenu?=?NULL
    ??00408F74??|.??03F0????????????|ADD?ESI,EAX??????????????????????????????????????;?|
    ??00408F76??|.??FF75?08?????????|PUSH?DWORD?PTR?SS:[EBP+8]????????????????????????;?|hParent
    ??00408F79??|.??FF75?CC?????????|PUSH?DWORD?PTR?SS:[EBP-34]???????????????????????;?|Height
    ??00408F7C??|.??53??????????????|PUSH?EBX?????????????????????????????????????????;?|Width
    ??00408F7D??|.??56??????????????|PUSH?ESI?????????????????????????????????????????;?|Y
    ??00408F7E??|.??FF75?D8?????????|PUSH?DWORD?PTR?SS:[EBP-28]???????????????????????;?|X
    ??00408F81??|.??FF75?E8?????????|PUSH?DWORD?PTR?SS:[EBP-18]???????????????????????;?|Style
    ??00408F84??|.??68?80DE4000?????|PUSH?myuninst.0040DE80???????????????????????????;?|WindowName?=?”“
    ??00408F89??|.??68?D4D94000?????|PUSH?myuninst.0040D9D4???????????????????????????;?|Class?=?“EDIT”
    ??00408F8E??|.??FF75?B8?????????|PUSH?DWORD?PTR?SS:[EBP-48]???????????????????????;?|ExtStyle
    ??00408F91??|.??FF15?98B24000???|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]????;?\CreateWindowExA
    ??00408F97??|???8945?F0?????????|MOV?DWORD?PTR?SS:[EBP-10],EAX????????????????????;??第二處要修改的地方
    ??00408F9A??|???8B45?F8?????????|MOV?EAX,DWORD?PTR?SS:[EBP-8]
    ??00408F9D??|.??FF30????????????|PUSH?DWORD?PTR?DS:[EAX]??????????????????????????;?/<%s>
    ??00408F9F??|.??8D85?B0FEFFFF???|LEA?EAX,DWORD?PTR?SS:[EBP-150]???????????????????;?|
    ??00408FA5??|.??68?D0D94000?????|PUSH?myuninst.0040D9D0???????????????????????????;?|format?=?”%s:”
    ??00408FAA??|.??50??????????????|PUSH?EAX?????????????????????????????????????????;?|s
    ??00408FAB??|.??FF15?90B14000???|CALL?DWORD?PTR?DS:[<&MSVCRT.sprintf>]????????????;?\sprintf
    ??00408FB1??|.??8B35?84B24000???|MOV?ESI,DWORD?PTR?DS:[<&USER32.SetWindowTextA>]??;??USER32.SetWindowTextA
    ??00408FB7??|.??83C4?0C?????????|ADD?ESP,0C
    ??00408FBA??|.??8D85?B0FEFFFF???|LEA?EAX,DWORD?PTR?SS:[EBP-150]
    ??00408FC0??|.??50??????????????|PUSH?EAX?????????????????????????????????????????;?/Text
    ??00408FC1??|.??FF75?F4?????????|PUSH?DWORD?PTR?SS:[EBP-C]????????????????????????;?|hWnd
    ??00408FC4??|.??FFD6????????????|CALL?ESI?????????????????????????????????????????;?\SetWindowTextA
    ??00408FC6??|.??8D85?ACFAFFFF???|LEA?EAX,DWORD?PTR?SS:[EBP-554]
    ??00408FCC??|.??50??????????????|PUSH?EAX?????????????????????????????????????????;?/Arg3
    ??00408FCD??|.??FF75?FC?????????|PUSH?DWORD?PTR?SS:[EBP-4]????????????????????????;?|Arg2
    ??00408FD0??|.??FF35?00EF4000???|PUSH?DWORD?PTR?DS:[40EF00]???????????????????????;?|Arg1?=?00BEADCC
    ??00408FD6??|.??E8?1884FFFF?????|CALL??<myuninst.sub_4013F3>??????????????????????;?\sub_4013F3
    ??00408FDB??|.??83C4?0C?????????|ADD?ESP,0C
    ??00408FDE??|.??50??????????????|PUSH?EAX
    ??00408FDF??|.??FF75?F0?????????|PUSH?DWORD?PTR?SS:[EBP-10]
    ??00408FE2??|.??FFD6????????????|CALL?ESI
    ??00408FE4??|.??FF45?FC?????????|INC?DWORD?PTR?SS:[EBP-4]
    ??00408FE7??|.??8345?F8?14??????|ADD?DWORD?PTR?SS:[EBP-8],14
    ??00408FEB??|.??837D?FC?0F??????|CMP?DWORD?PTR?SS:[EBP-4],0F
    ??00408FEF??|.^?0F8C?32FFFFFF???\JL?<myuninst.loc_408F27>
    ??00408FF5??|.??5F??????????????POP?EDI
    ??00408FF6??|.??5E??????????????POP?ESI
    ??00408FF7??|.??5B??????????????POP?EBX
    ??00408FF8??|.??C9??????????????LEAVE
    ??00408FF9??\.??C3??????????????RETN
     

    我想上面的代碼我不需多做解釋,OllyDBG?自動給出的注釋已經夠清楚的了。我們雙擊?MyUninstaller?列表框中的的某項查看屬性時,彈出的屬性窗口上的?STATIC?控件和?EDIT?控件都是由?CreateWindowExA?函數創(chuàng)建的,然后再調用?SetWindowTextA?來設置文本,根本沒考慮控件上字體顯示的問題,所以我們看到的都是系統(tǒng)默認的字體。我們要設置控件上的字體,可以考慮在?CreateWindowExA?創(chuàng)建完控件后,在使用?SetWindowTextA?函數設置文本之前調用相關字體創(chuàng)建函數來選擇字體,再調用?SendMessageA?函數發(fā)送?WM_SETFONT?消息來設置控件字體。思路定下來后,我們就開始來實施。首先我們看一下這個程序中的導入函數,CreateFontIndirectA?這個字體創(chuàng)建函數已經有了,再看看?SendMessageA,呵呵,不錯,原程序也有這個函數。這樣我們就省事了。有人可能要問,如果原來并沒有這兩個導入函數,那怎么辦呢?其實這也很簡單,我們可以直接用?LordPE?來在程序中添加我們需要的導入函數。我這里用個很小的?PE?工具?zeroadd?來示范一下,這個程序里面沒有?CreateFontIndirectA?和?SendMessageA?函數(這里還有個問題說一下,其實我們編程時調用這兩個函數時都是直接寫?CreateFontIndirect?及?SendMessage,一般不需指定。但在程序中寫補丁代碼時我們要指定這是什么類型的函數。這里在函數后面加個“A”表示這是?ASCII?版本,同樣?UNICODE?版本在后面加個“W”,如?SendMessageW。在?Win9X?下我們一般都用?ASCII?版本的函數,UNICODE?版本的函數很多在?Win9X?下是不能運行的。而NT?系統(tǒng)如?WinXP?一般都是?UNICODE?版本的,但如果我們用了?ASCII?版本的函數,系統(tǒng)會自動轉換調用?UNICODE?版本。這樣我們寫補丁代碼的時候就可以直接指定為?ASCII?版本的函數,可以兼容各個系統(tǒng)):我們用?LordPE?的?PE?編輯器載入?zeroadd?程序,選擇”目錄”,再在彈出的目錄表對話框中選擇輸入表后面的那個“…”按鈕,會彈出一個對話框:

    因為?SendMessageA?在?USER32.dll?中,我們在右鍵菜單中點擊按鈕”添加導入表”,來到下面:

    按上面的提示完成后點”確定”,我們回到原先的那個”輸入表”對話框:

    從上圖中我們可以看出多出了一個?USER32.dll,這就是我們添加?SendMessageA?的結果。這也是用工具添加的一個缺點。我們一般希望把添加的函數直接放到已存在的?DLL?中,而不是多出來一個,這樣顯得不好看。但用工具就沒辦法,LordPE?默認是建一個?1K?的新區(qū)段來保存添加后的結果,由此出現了上圖中的情況。如果你對?PE?結構比較熟悉的話,也可以直接用?16進制編輯工具來添加你需要的函數,這樣改出來的東西好看。如果想偷懶,就像我一樣用工具吧,呵呵。在上圖中我還標出了要注意?FirstThunk?及那個?ThunkRVA?的值,并且要把”總是查看?FirstThunk”那個選項選上。有人可能不理解其作用,我這里也解釋一下:一般講述?PE?格式的文章中對?FirstThunk?的解釋是這樣的:FirstThunk?包含指向一個?IMAGE_THUNK_DATA?結構數組的?RVA?偏移地址,當把?PE?文件裝載到內存中時,PE裝載器將查找?IMAGE_THUNK_DATA?和?IMAGE_IMPORT_BY_NAME?這些結構數組來決定導入函數的地址,隨后用導入函數真實地址來替代由?FirstThunk?指向的?IMAGE_THUNK_DATA?數組里的元素值。這樣說起來還是讓人不明白,我舉個例子:比如你有個很要好的朋友,他是個大忙人,雖然你知道他的家庭住址,可他很少回家。如果你哪天想找他,直接去他家,很可能吃個閉門羹,找不到他人。怎么辦?幸好你有他的手機號碼,你就給他撥了一個電話:”小子,你在哪呢?”,他告訴你:”我正在XXX飯店喝酒呢!”這時你怎么辦?(當然是殺到他說的那家飯店去蹭飯了!^_^)這里的?ThunkRVA?就相當于你朋友的手機號碼,?SendMessageA?就相當于你那個朋友。而?FirstThunk?就是你手機里的號碼分組。你把你的多個朋友都放在?FirstThunk?這樣的號碼分組里,每個?ThunkRVA?就是你一個朋友的手機號碼。你要找他們,就是通過?ThunkRVA?這樣的手機號碼來和他們聯系,直接去他家找他你很可能要碰壁。而移動或聯通就相當于操作系統(tǒng),他們負責把你的手機號碼和你的朋友對應上。而?FirstThunk?這樣的號碼分組還有一個好處就是你可以不記你某個朋友的具體號碼,只要記得?FirstThunk?號碼分組的值,你的朋友會按順序在里面排列。比如上圖中?USER32.dll?中的第一個函數是?SendMessageA,它的?ThunkRVA?值就是?FirstThunk?值。如果還有第二個函數,比如是?MessageBoxA,它的值就是?FirstThunk?值加上?4,其余類推。你只要記住各個函數的位置,也可以通過?FirstThunk?加上位置對應值來找到它。當然這比不上直接看?ThunkRVA?來得方便。說了上面這些,我們就要考慮怎么在程序中調用了。你可能會說,我在?OllyDBG?中直接在我們要修改的程序中這樣調用:CALL?SendMessageA。哦,別這樣。這等于我上面說的都是廢話,會讓我感到傷心的。你這里的?CALL?SendMessageA?就相當于也不跟你朋友打個招呼就直接去他家找他,很有可能你會乘興而去,敗興而歸。別忘了他的手機號碼,我們只有通過號碼才知道他到底在什么地方。我們應該這樣:CALL?DWORD?PTR?[40B01A],這里的?40B01A?就是上面的?SendMessageA?在程序載入后的所在的地方,由基址?00400000?加上?ThunkRVA?0000B01A?得到的。這就是你要找的人所在的地方,不管他跑到哪,你有他的手機號碼就能找到他。同樣道理,你只要記住了?ThunkRVA?值,就按這個來調用你需要的函數,在別的?Windows?系統(tǒng)下也是沒有問題的。系統(tǒng)會自動把你要找到函數和?ThunkRVA?值對應上。而你在?OllyDBG?中寫?CALL?SendMessageA,可能你在你的系統(tǒng)上成功了,可放到別的系統(tǒng)下就要出錯了。為什么?因為你找的人已經不在原來的位置了,他跑到別的地方去了。你還到老地方找他,當然看不見人了。說了這么多廢話,也不知大家聽明白了沒有,別越聽越糊涂就行了。總之一句話,別像?CALL?SendMessageA?這樣直接調用某個函數,而應該通過?ThunkRVA?值來調用它。下面我們回到我們要修改的?MyUninstaller?上來,先用?LordPE?打開看一下,呵呵,原來?CreateFontIndirectA?和?SendMessageA?原程序里面都有了,省了我們不少事情。看一下這兩個函數的?ThunkRVA?值,CreateFontIndirectA?在?GDI32.dll?里面,ThunkRVA?值是?0000B044,這樣我們就知道在程序中調用它的時候就是?CALL?DWORD?PTR?[0040B044]。同樣,SendMessageA?的ThunkRVA?值是?0000B23C,調用時應該是這樣:CALL?DWORD?PTR?[0040B23C]。了解了這些東西我們就來考慮怎么寫代碼了。首先我們來看一下?CreateFontIndirectA?和?SendMessageA?這兩個函數的定義:

    CreateFontIndirectA:

    HFONT?CreateFontIndirect(
    CONST?LOGFONT?*lplf?//?pointer?to?logical?font?structure
    );
    CreateFontIndirect的返回值就是字體的句柄。

    對于這個函數我們需要的參數就是給它一個?LOGFONT?的字體結構指針,我們只要在要修改程序的空白處建一個標準的9號(小五)宋體的?LOGFONT?字體結構,再把指針給?CreateFontIndirectA?就可以了。

    SendMessageA:

    LRESULT?SendMessage(
    HWND?hWnd,?//?handle?of?destination?window
    UINT?Msg,?//?message?to?send
    WPARAM?wParam,?//?first?message?parameter
    LPARAM?lParam?//?second?message?parameter
    );
    上面的第一個參數是窗口句柄,我們知道?CreateWindowExA?返回的就是窗口句柄,我們可以直接拿來用。第二個消息參數我們這里是設置字體,選WM_SETFONT,這個值是?30H。第三個參數是字體句柄,可以由上面的?CreateFontIndirectA?獲得。第四個參數我們不需要,留空。現在我們準備開始寫代碼,首先我們要在程序中建一個標準9號宋體的?LOGFONT,以便于我們調用。對于?LOGFONT,我們再來看一下定義:

    typedef?struct?tagLOGFONT?{?//?lf?
    LONG?lfHeight;?
    LONG?lfWidth;?
    LONG?lfEscapement;?
    LONG?lfOrientation;?
    LONG?lfWeight;?
    BYTE?lfItalic;?
    BYTE?lfUnderline;?
    BYTE?lfStrikeOut;?
    BYTE?lfCharSet;?
    BYTE?lfOutPrecision;?
    BYTE?lfClipPrecision;?
    BYTE?lfQuality;?
    BYTE?lfPitchAndFamily;?
    TCHAR?lfFaceName[LF_FACESIZE];?
    }?LOGFONT;

    這樣我們的標準9號宋體的?LOGFONT?值應該是32字節(jié),16進制就像這樣:F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5。現在在程序中找個空地。我們用?PEiD?來幫助我們尋找,用?PEiD?打開程序,點?EP?段后面的那個?>?號,隨便選擇一個區(qū)段右擊,選”搜索全0處”(原版好像是cave什么的):

    我們看到?PEiD?把搜索到的空間都給我們列出來了:

    現在我們用?WinHEX?打開我們要修改的程序,轉到偏移?9815?處,從?9815?處選擇?32?字節(jié)(16進制是0X20)的一個選塊,把光標定位到?9815?處,右鍵選擇菜單?剪貼板數據->寫入(從當前位置覆寫),隨后的格式選擇?ASCII?Hex,把我們?LOGFONT?的?16?進制值

    ?F4FFFFFF000000000000000000000000900100000000008600000000CBCECCE5?

    寫入保存。現在我們用?OllyDBG?載入已添加了?LOGFONT?數據的程序,先轉到?VA?40A415?處(從上圖中看到的)往下看一下:
    ?

    因為?SendMessageA?還要用到一個窗口句柄,我們可以通過前面的?CreateWindowExA?來獲得。現在我們就把前一張圖中的?.rdata?區(qū)段中的地址?0040C56E?作為我們保存窗口句柄?HWND?值的臨時空間。一切就緒,開始寫代碼。先回顧一下我們最先說的那兩個要修改的地方:

    第一個要改的地方:

    ??00408F5E??|.??FF15?98B24000?|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]??;?\CreateWindowExA
    ??00408F64??????6A?00?????????PUSH?0??????????????????????????????????????????;??修改前
    ??00408F66??????8945?F4???????MOV?DWORD?PTR?SS:[EBP-C],EAX
    ??00408F69??|.??E8?A098FFFF???|CALL?<myuninst.sub_40280E>

    修改后:

    ??00408F5E??|.??FF15?98B24000?|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]??;?\CreateWindowExA
    ??00408F64??????E9?D5140000???JMP?myuninst.0040A43E???????????????????????????;??跳轉到我們的補丁代碼處
    ??00408F69??|.??E8?A098FFFF???|CALL?<myuninst.sub_40280E>

    第二個要改的地方:

    ??00408F91??|.??FF15?98B24000????|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]????;?\CreateWindowExA
    ??00408F97??????8945?F0???????????MOV?DWORD?PTR?SS:[EBP-10],EAX?????????????????????;??改這里
    ??00408F9A??????8B45?F8???????????MOV?EAX,DWORD?PTR?SS:[EBP-8]
    ??00408F9D??|.??FF30?????????????|PUSH?DWORD?PTR?DS:[EAX]??????????????????????????;?/<%s>
    ??00408F9F??|.??8D85?B0FEFFFF????|LEA?EAX,DWORD?PTR?SS:[EBP-150]???????????????????;?|
    ??00408FA5??|.??68?D0D94000??????|PUSH?myuninst.0040D9D0???????????????????????????;?|format?=?”%s:”
    ??00408FAA??|.??50???????????????|PUSH?EAX?????????????????????????????????????????;?|s
    ??00408FAB??|.??FF15?90B14000????|CALL?DWORD?PTR?DS:[<&MSVCRT.sprintf>]????????????;?\sprintf
    ??00408FB1??|.??8B35?84B24000????|MOV?ESI,DWORD?PTR?DS:[<&USER32.SetWindowTextA>]??;??USER32.SetWindowTextA

    修改后:

    ??00408F91??|.??FF15?98B24000????|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]????;?\CreateWindowExA
    ??00408F97??????E9?D4140000??????JMP?myuninst.0040A470?????????????????????????????;??跳到我們的第二部分補丁代碼處
    ??00408F9C??????90???????????????NOP
    ??00408F9D??|.??FF30?????????????|PUSH?DWORD?PTR?DS:[EAX]??????????????????????????;?/<%s>
    ??00408F9F??|.??8D85?B0FEFFFF????|LEA?EAX,DWORD?PTR?SS:[EBP-150]???????????????????;?|
    ??00408FA5??|.??68?D0D94000??????|PUSH?myuninst.0040D9D0???????????????????????????;?|format?=?”%s:”
    ??00408FAA??|.??50???????????????|PUSH?EAX?????????????????????????????????????????;?|s
    ??00408FAB??|.??FF15?90B14000????|CALL?DWORD?PTR?DS:[<&MSVCRT.sprintf>]????????????;?\sprintf
    ??00408FB1??|.??8B35?84B24000????|MOV?ESI,DWORD?PTR?DS:[<&USER32.SetWindowTextA>]??;??USER32.SetWindowTextA

    這兩個地方的修改都是把原代碼改成跳轉,跳到我們的補丁代碼那繼續(xù)執(zhí)行。在修改之前先把原代碼復制下來,以便恢復。我們在?OllyDBG?中按?CTR+G?組合鍵,來到?0040A43E?地址處,開始輸補丁代碼:

    同樣,我們也在?0040A470?地址處輸入我們另一部分的補丁代碼。兩部分的補丁代碼分別如下:

    補丁代碼1:

    ??0040A43E??????60???????????????PUSHAD????????????????????????????????????????????;??保護現場
    ??0040A43F??????A3?6EC54000??????MOV?DWORD?PTR?DS:[40C56E],EAX?????????????????????;??保存窗口句柄
    ??0040A444??????68?15A44000??????PUSH?myuninst.0040A415????????????????????????????;??傳遞字體句柄LOGFONT
    ??0040A449??????FF15?44B04000????CALL?DWORD?PTR?DS:[<&GDI32.CreateFontIndirectA>]??;??GDI32.CreateFontIndirectA
    ??0040A44F??????6A?00????????????PUSH?0????????????????????????????????????????????;??lParam?參數留空
    ??0040A451??????50???????????????PUSH?EAX??????????????????????????????????????????;??字體句柄LOGFONT
    ??0040A452??????6A?30????????????PUSH?30???????????????????????????????????????????;??WM_SETFONT
    ??0040A454??????8B0D?6EC54000????MOV?ECX,DWORD?PTR?DS:[40C56E]?????????????????????;??窗口句柄送ECX
    ??0040A45A??????51???????????????PUSH?ECX??????????????????????????????????????????;??壓入窗口句柄參數
    ??0040A45B??????FF15?3CB24000????CALL?DWORD?PTR?DS:[<&USER32.SendMessageA>]????????;??USER32.SendMessageA
    ??0040A461??????61???????????????POPAD?????????????????????????????????????????????;??恢復現場
    ??0040A462??????6A?00????????????PUSH?0????????????????????????????????????????????;??恢復原代碼
    ??0040A464??????8945?F4??????????MOV?DWORD?PTR?SS:[EBP-C],EAX
    ??0040A467????^?E9?FDEAFFFF??????JMP?myuninst.00408F69?????????????????????????????;??返回

    補丁代碼2:

    ??0040A470???>?\60????????????PUSHAD
    ??0040A471???.??A3?6EC54000???MOV?DWORD?PTR?DS:[40C56E],EAX
    ??0040A476???.??68?15A44000???PUSH?myuninst.0040A415?????????????????????????????;?/pLogfont?=?myuninst.0040A415
    ??0040A47B???.??FF15?44B04000?CALL?DWORD?PTR?DS:[<&GDI32.CreateFontIndirectA>]???;?\CreateFontIndirectA
    ??0040A481???.??6A?00?????????PUSH?0?????????????????????????????????????????????;?/lParam?=?0
    ??0040A483???.??50????????????PUSH?EAX???????????????????????????????????????????;?|wParam
    ??0040A484???.??6A?30?????????PUSH?30????????????????????????????????????????????;?|Message?=?WM_SETFONT
    ??0040A486???.??8B0D?6EC54000?MOV?ECX,DWORD?PTR?DS:[40C56E]??????????????????????;?|
    ??0040A48C???.??51????????????PUSH?ECX???????????????????????????????????????????;?|hWnd?=>?NULL
    ??0040A48D???.??FF15?3CB24000?CALL?DWORD?PTR?DS:[<&USER32.SendMessageA>]?????????;?\SendMessageA
    ??0040A493???.??61????????????POPAD
    ??0040A494???.??8945?F0???????MOV?DWORD?PTR?SS:[EBP-10],EAX
    ??0040A497???.??8B45?F8???????MOV?EAX,DWORD?PTR?SS:[EBP-8]
    ??0040A49A???.^?E9?FEEAFFFF???JMP?myuninst.00408F9D

    補丁代碼2因為與補丁代碼1類似,我就不做詳細解釋了。現在我們的代碼都寫完了,現在我們開始保存我們的工作,選中我們修改的代碼,點擊鼠標右鍵,會出來一個菜單:

    我們左鍵選所有修改(當然選它了,要不然只會保存我們選定的這一部分。關于這個地方還要說一下,有的時候我們修改完程序選”復制到可執(zhí)行文件”時只有”選擇”菜單,沒有”所有修改”菜單項。按?OllyDBG?幫助里關于備份功能的說法,好像是受內存塊限制的,補丁功能也同樣是這樣。對于備份及補丁功能我用的比較少,并不是很了解,這方面的內容還是大家自己去研究吧,有什么好的心得也希望能共享一下。我遇到不能保存所有修改的情況就是先把補丁代碼全部復制下來,同時利用二進制功能復制代碼,先選一段補丁代碼保存為文件,再用?OllyDBG?打開保存后的文件,轉到相應位置分別把我們復制下來的補丁二進制代碼粘貼上去后保存。純屬笨辦法,當然你也可以用?HexView?這樣的工具來修改代碼),隨后會出來一個”把選中的內容復制到可執(zhí)行文件”的對話框,我們選”全部復制”,又出來一個對話框,我們在上面點右鍵,在彈出的菜單上選”保存文件”:

    這時會出來一個另存文件的對話框,我們另選一個名字如?myuninst1.exe?來保存,不要直接覆蓋原文件?myuninst.exe,以便于出錯后好修改。現在關閉?OllyDBG,先不要急著運行剛剛修改過的文件,因為我們還有個地方要改一下。大家還記得我們在?.rdata?中用了個地方作為我們保存臨時變量的地方吧?原先的?.rdata?段屬性設置是不可寫的,現在我們寫入了數據,運行時是會出錯的。現在我們要修改一下?.rdata?段的屬性。用?LordPE?的?PE?編輯器打開我們修改后的程序,點”區(qū)段”按鈕,在彈出的對話框中點擊?.rdata?段,右鍵選擇彈出菜單中的”編輯區(qū)段”:

    在彈出的對話框中選標志后面那個“…”按鈕:

    現在我們把區(qū)段標志添加一個可寫入的屬性:

    完成后按確定保存我們所做的工作,運行一下修改后的程序,呵呵,終于把字體改過來了:

    如果你運行出錯也沒關系,用?OllyDBG?調試一下你修改后的程序,看看錯在什么地方。這一般都是輸入補丁代碼時造成的,你只要看一下你補丁代碼運行的情況就可以了。到這里我們的任務似乎也完成了,但細心的朋友可能會發(fā)現補丁代碼1和補丁代碼2前面的代碼基本上是相同的。一個兩個這樣的補丁還好,如果要是多的話,這樣重復就要浪費不少空間了,況且工作量也相應加大了。既然前面有很多代碼都是重復的,為什么我們不把這些重復的代碼做成一個子程序呢?這樣調用起來要方便的多。下面我們把前面的補丁代碼修改一下,我們先把補丁代碼1的代碼改成這樣:

    ??0040A43E??????60??????????????PUSHAD????????????????????????????????????????????;??保護現場
    ??0040A43F??????A3?6EC54000?????MOV?DWORD?PTR?DS:[40C56E],EAX?????????????????????;??保存窗口句柄
    ??0040A444??????68?15A44000?????PUSH?myuninst.0040A415????????????????????????????;??我們建的LOGFONT對應指針
    ??0040A449??????FF15?44B04000???CALL?DWORD?PTR?DS:[<&GDI32.CreateFontIndirectA>]??;??GDI32.CreateFontIndirectA
    ??0040A44F??????6A?00???????????PUSH?0????????????????????????????????????????????;??lParam?參數留空
    ??0040A451??????50??????????????PUSH?EAX??????????????????????????????????????????;??字體句柄
    ??0040A452??????6A?30???????????PUSH?30???????????????????????????????????????????;??WM_SETFONT
    ??0040A454??????8B0D?6EC54000???MOV?ECX,DWORD?PTR?DS:[40C56E]?????????????????????;??窗口句柄
    ??0040A45A??????51??????????????PUSH?ECX??????????????????????????????????????????;??窗口句柄壓棧
    ??0040A45B??????FF15?3CB24000???CALL?DWORD?PTR?DS:[<&USER32.SendMessageA>]????????;??USER32.SendMessageA
    ??0040A461??????61??????????????POPAD?????????????????????????????????????????????;??恢復現場
    ??0040A462??????C3??????????????RETN??????????????????????????????????????????????;??返回

    這樣我們的子程序代碼就寫好了。現在我們再在子程序代碼后面寫上兩個補丁代碼,當然不要忘了改前面原程序中的跳轉:

    修改后的補丁代碼1:

    ??0040A467??????E8?D2FFFFFF?????CALL?myuninst.0040A43E????????????????????????????;??調用子程序
    ??0040A46C??????6A?00???????????PUSH?0????????????????????????????????????????????;??恢復前面修改過的代碼
    ??0040A46E??????8945?F4?????????MOV?DWORD?PTR?SS:[EBP-C],EAX
    ??0040A471????^?E9?F3EAFFFF?????JMP?myuninst.00408F69?????????????????????????????;??返回繼續(xù)執(zhí)行

    修改后的補丁代碼2:
    ??0040A47A??????E8?BFFFFFFF?????CALL?myuninst.0040A43E
    ??0040A47F??????8945?F0?????????MOV?DWORD?PTR?SS:[EBP-10],EAX
    ??0040A482??????8B45?F8?????????MOV?EAX,DWORD?PTR?SS:[EBP-8]
    ??0040A485????^?E9?13EBFFFF?????JMP?myuninst.00408F9D

    我在每個補丁代碼片斷間留了4個字節(jié)來分隔。同樣,我們還要修改一下我們前面的跳轉:
    第一個要修改跳轉的地方:
    ??00408F5E??|.??FF15?98B24000???|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]????;?\斷在這里
    ??00408F64??????E9?FE140000?????JMP?myuninst.0040A467?????????????????????????????;??跳到我們的第一部分補丁代碼處
    ??00408F69??|.??E8?A098FFFF?????|CALL?<myuninst.sub_40280E>

    第二個要修改跳轉的地方:
    ??00408F91??|.??FF15?98B24000???|CALL?DWORD?PTR?DS:[<&USER32.CreateWindowExA>]????;?\CreateWindowExA
    ??00408F97??????E9?DE140000?????JMP?myuninst.0040A47A?????????????????????????????;??跳到我們的第二部分補丁代碼處
    ??00408F9C??????90??????????????NOP
    ??00408F9D??|.??FF30????????????|PUSH?DWORD?PTR?DS:[EAX]??????????????????????????;?/<%s>
    修改好后保存,同樣不要忘了再修改一下?.rdata?區(qū)段的屬性。運行一下,一切OK!

    ?

    原文作者:CCDebuger(再次感謝CCDebuger)

    上傳者后記:再次感謝作者 CCDebuger?

    !!!希望對您能起到幫助,如果你需要文中所涉及的軟件(包括OllyDBG以及相關的crackme等,可與我聯系,我將盡快發(fā)給你,聯系QQ:20003138,謝謝!)

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的OllyDBG完美教程(超强入门级)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    亚洲色大成网站www国产 | 成 人 网 站国产免费观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 乌克兰少妇xxxx做受 | 久久久久免费精品国产 | 97精品人妻一区二区三区香蕉 | 欧美 日韩 人妻 高清 中文 | 色婷婷久久一区二区三区麻豆 | 国产精品无码一区二区桃花视频 | 99久久久国产精品无码免费 | 欧美猛少妇色xxxxx | 久久人人爽人人爽人人片ⅴ | 天天av天天av天天透 | 欧美人妻一区二区三区 | 天天摸天天透天天添 | 婷婷综合久久中文字幕蜜桃三电影 | 无码av最新清无码专区吞精 | 国产精品久久久久无码av色戒 | 草草网站影院白丝内射 | aⅴ亚洲 日韩 色 图网站 播放 | 久久亚洲日韩精品一区二区三区 | 无码一区二区三区在线观看 | 久久国语露脸国产精品电影 | 青青青手机频在线观看 | 亚洲日韩av片在线观看 | 东京热无码av男人的天堂 | 国产精品手机免费 | 中国大陆精品视频xxxx | 国产9 9在线 | 中文 | 亚洲色成人中文字幕网站 | 18无码粉嫩小泬无套在线观看 | 国产成人精品无码播放 | 亚洲色大成网站www国产 | 性生交大片免费看l | 又湿又紧又大又爽a视频国产 | 亚洲一区二区三区无码久久 | 国产一区二区三区四区五区加勒比 | 国内精品人妻无码久久久影院 | 国产无遮挡又黄又爽免费视频 | 妺妺窝人体色www婷婷 | 欧美性生交xxxxx久久久 | 国产亚洲精品精品国产亚洲综合 | 图片小说视频一区二区 | 亚洲成av人综合在线观看 | 在线а√天堂中文官网 | 天天综合网天天综合色 | 麻豆国产人妻欲求不满 | 一本一道久久综合久久 | 免费无码av一区二区 | 国产亚洲欧美在线专区 | 99久久婷婷国产综合精品青草免费 | 色欲综合久久中文字幕网 | 国产在热线精品视频 | aⅴ在线视频男人的天堂 | 日日碰狠狠躁久久躁蜜桃 | 亚洲精品欧美二区三区中文字幕 | 国产亲子乱弄免费视频 | 任你躁国产自任一区二区三区 | 日产国产精品亚洲系列 | 精品成在人线av无码免费看 | 久久午夜无码鲁丝片秋霞 | 欧美黑人乱大交 | 无码国产乱人伦偷精品视频 | 久久97精品久久久久久久不卡 | 夜精品a片一区二区三区无码白浆 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 激情五月综合色婷婷一区二区 | 夜夜夜高潮夜夜爽夜夜爰爰 | 香港三级日本三级妇三级 | 最近免费中文字幕中文高清百度 | 少妇性俱乐部纵欲狂欢电影 | 麻豆国产丝袜白领秘书在线观看 | 欧美熟妇另类久久久久久不卡 | 玩弄少妇高潮ⅹxxxyw | 夫妻免费无码v看片 | 欧美刺激性大交 | 老头边吃奶边弄进去呻吟 | 无码帝国www无码专区色综合 | 免费观看黄网站 | 国产精品美女久久久网av | 天堂а√在线中文在线 | 精品偷自拍另类在线观看 | 无遮挡国产高潮视频免费观看 | 国产精品亚洲а∨无码播放麻豆 | 久热国产vs视频在线观看 | 偷窥日本少妇撒尿chinese | 少妇久久久久久人妻无码 | 一二三四社区在线中文视频 | 亚洲七七久久桃花影院 | 国产九九九九九九九a片 | 亚洲国产一区二区三区在线观看 | 久久综合九色综合欧美狠狠 | 欧美野外疯狂做受xxxx高潮 | 亚洲中文字幕成人无码 | 少女韩国电视剧在线观看完整 | 在线 国产 欧美 亚洲 天堂 | 婷婷五月综合缴情在线视频 | 精品国偷自产在线视频 | av无码久久久久不卡免费网站 | 精品久久综合1区2区3区激情 | 亚洲熟妇自偷自拍另类 | 亚洲中文字幕无码中文字在线 | 国产免费无码一区二区视频 | 无码一区二区三区在线 | 国产精品免费大片 | 日韩人妻少妇一区二区三区 | 成熟妇人a片免费看网站 | 天天爽夜夜爽夜夜爽 | 精品国产成人一区二区三区 | 对白脏话肉麻粗话av | 欧美激情一区二区三区成人 | 成人亚洲精品久久久久软件 | 色情久久久av熟女人妻网站 | 欧美35页视频在线观看 | 对白脏话肉麻粗话av | 人妻无码αv中文字幕久久琪琪布 | 国产亚洲人成在线播放 | 夜先锋av资源网站 | 无码帝国www无码专区色综合 | 亚洲爆乳精品无码一区二区三区 | 亚洲欧美精品aaaaaa片 | 亚洲区小说区激情区图片区 | 成人欧美一区二区三区黑人免费 | 欧洲美熟女乱又伦 | 激情亚洲一区国产精品 | 人妻无码αv中文字幕久久琪琪布 | 日本免费一区二区三区最新 | 熟妇人妻无码xxx视频 | 国产无套粉嫩白浆在线 | 日本乱人伦片中文三区 | 久久精品国产一区二区三区肥胖 | 香蕉久久久久久av成人 | a片在线免费观看 | 久久精品国产大片免费观看 | 又大又黄又粗又爽的免费视频 | 久久亚洲a片com人成 | 人妻少妇精品无码专区动漫 | 熟女体下毛毛黑森林 | 欧美猛少妇色xxxxx | 日产精品高潮呻吟av久久 | 国产午夜福利亚洲第一 | 成年美女黄网站色大免费全看 | 精品无码av一区二区三区 | 欧美大屁股xxxxhd黑色 | 亚洲熟女一区二区三区 | 久久zyz资源站无码中文动漫 | 国产精华av午夜在线观看 | 女人高潮内射99精品 | 欧美猛少妇色xxxxx | 日本一本二本三区免费 | 夜夜影院未满十八勿进 | 婷婷丁香六月激情综合啪 | 野外少妇愉情中文字幕 | 国产香蕉尹人视频在线 | 日本一区二区更新不卡 | 俺去俺来也在线www色官网 | 精品久久久久久人妻无码中文字幕 | av香港经典三级级 在线 | 色婷婷久久一区二区三区麻豆 | 国产精品人人爽人人做我的可爱 | 国产麻豆精品一区二区三区v视界 | 2020久久超碰国产精品最新 | 久久人人爽人人爽人人片av高清 | 成人三级无码视频在线观看 | 国产综合在线观看 | 亚洲欧洲日本无在线码 | 一本色道婷婷久久欧美 | 亚洲理论电影在线观看 | 日本免费一区二区三区最新 | 久久综合网欧美色妞网 | 日韩精品无码一本二本三本色 | 丰满少妇女裸体bbw | 亚洲最大成人网站 | 精品国产一区av天美传媒 | 牲欲强的熟妇农村老妇女 | 国产成人无码专区 | 国产精品沙发午睡系列 | 午夜福利电影 | 国产精品免费大片 | 久久精品人妻少妇一区二区三区 | 国产午夜精品一区二区三区嫩草 | 性色av无码免费一区二区三区 | 亚洲欧美综合区丁香五月小说 | 成熟妇人a片免费看网站 | 高清无码午夜福利视频 | 久久精品丝袜高跟鞋 | 午夜免费福利小电影 | 久久精品国产一区二区三区 | 久久久久久九九精品久 | 国产色xx群视频射精 | 国产无套内射久久久国产 | 波多野42部无码喷潮在线 | 女人被男人爽到呻吟的视频 | 国产超碰人人爽人人做人人添 | 一本色道久久综合亚洲精品不卡 | 亚洲午夜无码久久 | 性欧美疯狂xxxxbbbb | 一本大道伊人av久久综合 | 欧美成人高清在线播放 | 国产成人无码av在线影院 | 成人欧美一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 少妇的肉体aa片免费 | 中文精品无码中文字幕无码专区 | 性生交大片免费看女人按摩摩 | 国内揄拍国内精品人妻 | 国产精品无码一区二区桃花视频 | 天堂а√在线中文在线 | 青春草在线视频免费观看 | 夜夜影院未满十八勿进 | 久久婷婷五月综合色国产香蕉 | 人人妻人人澡人人爽人人精品浪潮 | 无码帝国www无码专区色综合 | 丰满妇女强制高潮18xxxx | 欧美丰满熟妇xxxx性ppx人交 | 熟妇女人妻丰满少妇中文字幕 | 国精产品一品二品国精品69xx | 国产综合久久久久鬼色 | 中文字幕av伊人av无码av | 无码任你躁久久久久久久 | 97人妻精品一区二区三区 | 久久久久亚洲精品男人的天堂 | 色婷婷香蕉在线一区二区 | 精品无码成人片一区二区98 | 亚洲成av人片天堂网无码】 | 亚洲午夜久久久影院 | 无码av岛国片在线播放 | 午夜精品久久久久久久久 | 亚洲熟妇色xxxxx欧美老妇y | 免费视频欧美无人区码 | av在线亚洲欧洲日产一区二区 | 亚洲一区二区观看播放 | 内射欧美老妇wbb | 少妇被黑人到高潮喷出白浆 | 老司机亚洲精品影院 | 成人无码视频在线观看网站 | 国产内射老熟女aaaa | 亚洲精品综合五月久久小说 | 日韩在线不卡免费视频一区 | 日本精品高清一区二区 | 无遮无挡爽爽免费视频 | 亚洲国产成人a精品不卡在线 | 国产精品va在线播放 | 亚洲の无码国产の无码影院 | 成 人 网 站国产免费观看 | 婷婷色婷婷开心五月四房播播 | 精品国产aⅴ无码一区二区 | 亚洲人亚洲人成电影网站色 | 性生交大片免费看女人按摩摩 | 国产av一区二区三区最新精品 | 欧美性生交活xxxxxdddd | 兔费看少妇性l交大片免费 | 亚洲中文无码av永久不收费 | 久久97精品久久久久久久不卡 | 国产超碰人人爽人人做人人添 | 天堂а√在线中文在线 | 老熟妇仑乱视频一区二区 | 性生交片免费无码看人 | 中国大陆精品视频xxxx | 亚洲无人区一区二区三区 | 亚洲中文字幕乱码av波多ji | 麻豆蜜桃av蜜臀av色欲av | 精品水蜜桃久久久久久久 | 狠狠噜狠狠狠狠丁香五月 | 在线观看免费人成视频 | 亚洲欧洲日本综合aⅴ在线 | 国产午夜无码视频在线观看 | 极品尤物被啪到呻吟喷水 | 精品无码一区二区三区爱欲 | 久久久精品人妻久久影视 | 日本护士毛茸茸高潮 | 亚洲国产精华液网站w | 亚洲一区二区观看播放 | 国产成人人人97超碰超爽8 | 熟女少妇人妻中文字幕 | 无码精品国产va在线观看dvd | 国产另类ts人妖一区二区 | 久久久久久国产精品无码下载 | 日韩精品无码一区二区中文字幕 | 成人免费视频视频在线观看 免费 | 国产高清av在线播放 | 双乳奶水饱满少妇呻吟 | 久久亚洲日韩精品一区二区三区 | 国产综合在线观看 | 亚洲高清偷拍一区二区三区 | 丰满肥臀大屁股熟妇激情视频 | 亚洲理论电影在线观看 | 亚洲男女内射在线播放 | 美女黄网站人色视频免费国产 | а√天堂www在线天堂小说 | 牲欲强的熟妇农村老妇女 | 国产精品资源一区二区 | 极品嫩模高潮叫床 | 免费国产成人高清在线观看网站 | 99麻豆久久久国产精品免费 | 国内精品人妻无码久久久影院 | √天堂资源地址中文在线 | 日韩精品无码一本二本三本色 | 人人妻人人澡人人爽精品欧美 | 天堂亚洲2017在线观看 | 少妇无码吹潮 | 在线播放亚洲第一字幕 | 日本大乳高潮视频在线观看 | 无码乱肉视频免费大全合集 | 夜先锋av资源网站 | 中文字幕无码av波多野吉衣 | 国产精品多人p群无码 | 国产成人无码专区 | 国产精品嫩草久久久久 | 国产精品99爱免费视频 | 国产高清不卡无码视频 | 色婷婷香蕉在线一区二区 | 国产69精品久久久久app下载 | 一区二区传媒有限公司 | 国产卡一卡二卡三 | 人妻无码αv中文字幕久久琪琪布 | 暴力强奷在线播放无码 | 国产午夜精品一区二区三区嫩草 | 国产凸凹视频一区二区 | 色婷婷综合中文久久一本 | 成年美女黄网站色大免费视频 | 亚洲日韩av一区二区三区中文 | 国产艳妇av在线观看果冻传媒 | 性欧美大战久久久久久久 | 大地资源网第二页免费观看 | 日日碰狠狠丁香久燥 | 天天燥日日燥 | 永久免费精品精品永久-夜色 | 国内少妇偷人精品视频免费 | 中文字幕乱妇无码av在线 | 欧美成人高清在线播放 | 高潮毛片无遮挡高清免费 | 少妇人妻偷人精品无码视频 | 精品欧美一区二区三区久久久 | 正在播放东北夫妻内射 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲色欲久久久综合网东京热 | 天天燥日日燥 | 亚洲爆乳精品无码一区二区三区 | 亚洲一区二区三区偷拍女厕 | 久久精品中文字幕一区 | 美女张开腿让人桶 | 亚洲成av人在线观看网址 | 一二三四在线观看免费视频 | 丁香啪啪综合成人亚洲 | 成人无码精品1区2区3区免费看 | 无码人妻精品一区二区三区不卡 | 国产精品第一区揄拍无码 | 亚洲色欲色欲欲www在线 | 久久zyz资源站无码中文动漫 | 中国大陆精品视频xxxx | 色婷婷综合激情综在线播放 | 中文字幕av伊人av无码av | 性啪啪chinese东北女人 | 无码精品国产va在线观看dvd | 老头边吃奶边弄进去呻吟 | 亚洲日韩av一区二区三区中文 | 国产人妻人伦精品1国产丝袜 | 久久综合九色综合97网 | 夜先锋av资源网站 | 亚洲精品一区三区三区在线观看 | 无码人妻久久一区二区三区不卡 | 成人无码视频免费播放 | 97人妻精品一区二区三区 | av在线亚洲欧洲日产一区二区 | 在线观看国产午夜福利片 | 色五月五月丁香亚洲综合网 | 亚洲一区av无码专区在线观看 | 久久人人97超碰a片精品 | 宝宝好涨水快流出来免费视频 | 亚洲成av人综合在线观看 | 国产口爆吞精在线视频 | 国产一区二区三区四区五区加勒比 | 又黄又爽又色的视频 | 欧美黑人巨大xxxxx | 国产9 9在线 | 中文 | 性史性农村dvd毛片 | 国产精品无码永久免费888 | 久久人人爽人人爽人人片av高清 | av人摸人人人澡人人超碰下载 | 国产性生交xxxxx无码 | 成人无码视频在线观看网站 | 一本色道婷婷久久欧美 | 大地资源网第二页免费观看 | 国产色视频一区二区三区 | 免费无码av一区二区 | 成人三级无码视频在线观看 | 久久国产36精品色熟妇 | 99久久精品日本一区二区免费 | 国产免费观看黄av片 | 亚洲日韩精品欧美一区二区 | 性欧美大战久久久久久久 | 亚洲综合无码久久精品综合 | 亚洲国产成人av在线观看 | 偷窥村妇洗澡毛毛多 | 精品亚洲韩国一区二区三区 | 日日干夜夜干 | 午夜不卡av免费 一本久久a久久精品vr综合 | 67194成是人免费无码 | 日日摸天天摸爽爽狠狠97 | 在线亚洲高清揄拍自拍一品区 | 亚洲人成网站免费播放 | 欧美亚洲日韩国产人成在线播放 | 色综合久久久无码网中文 | 男女作爱免费网站 | 在线观看国产一区二区三区 | 国产成人精品无码播放 | 欧美丰满熟妇xxxx性ppx人交 | 久久综合久久自在自线精品自 | 亚洲区欧美区综合区自拍区 | av无码不卡在线观看免费 | 亚洲国产欧美国产综合一区 | 性欧美牲交xxxxx视频 | 好爽又高潮了毛片免费下载 | 精品夜夜澡人妻无码av蜜桃 | 久久久久se色偷偷亚洲精品av | 成人免费视频一区二区 | 在线播放无码字幕亚洲 | 欧美 丝袜 自拍 制服 另类 | 国产精品福利视频导航 | 99久久精品无码一区二区毛片 | www成人国产高清内射 | 18禁黄网站男男禁片免费观看 | 亚洲精品一区国产 | 亚洲精品久久久久久久久久久 | 亚洲精品久久久久久久久久久 | 亚洲精品综合一区二区三区在线 | 欧美 日韩 亚洲 在线 | 日韩视频 中文字幕 视频一区 | 亚洲成av人片在线观看无码不卡 | 强辱丰满人妻hd中文字幕 | 亲嘴扒胸摸屁股激烈网站 | 亚洲国产一区二区三区在线观看 | 啦啦啦www在线观看免费视频 | 亚洲欧美国产精品久久 | 人人妻人人澡人人爽精品欧美 | 国产av无码专区亚洲awww | 福利一区二区三区视频在线观看 | 久久精品国产亚洲精品 | 精品偷拍一区二区三区在线看 | av在线亚洲欧洲日产一区二区 | 欧美老妇交乱视频在线观看 | 性做久久久久久久免费看 | 国产黄在线观看免费观看不卡 | 麻豆果冻传媒2021精品传媒一区下载 | 国产亚洲精品精品国产亚洲综合 | 欧美亚洲日韩国产人成在线播放 | 国精产品一区二区三区 | www一区二区www免费 | 精品久久久无码人妻字幂 | 熟妇人妻中文av无码 | 97夜夜澡人人爽人人喊中国片 | 激情综合激情五月俺也去 | 久久久精品456亚洲影院 | 久久人人爽人人爽人人片av高清 | 性欧美疯狂xxxxbbbb | 色老头在线一区二区三区 | 一个人看的www免费视频在线观看 | 台湾无码一区二区 | 漂亮人妻洗澡被公强 日日躁 | 亚洲熟妇色xxxxx欧美老妇y | 毛片内射-百度 | 精品欧洲av无码一区二区三区 | 亚洲精品久久久久久久久久久 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 欧美乱妇无乱码大黄a片 | 人人超人人超碰超国产 | 丰满人妻精品国产99aⅴ | 欧美老熟妇乱xxxxx | 伊人久久婷婷五月综合97色 | 漂亮人妻洗澡被公强 日日躁 | 天干天干啦夜天干天2017 | 国产热a欧美热a在线视频 | 国产午夜精品一区二区三区嫩草 | www国产亚洲精品久久久日本 | 精品欧洲av无码一区二区三区 | 欧美真人作爱免费视频 | 精品国产精品久久一区免费式 | 欧美丰满少妇xxxx性 | 国产真实伦对白全集 | 日本护士xxxxhd少妇 | 国产人妻大战黑人第1集 | 性生交片免费无码看人 | 久久精品国产99精品亚洲 | 成人毛片一区二区 | 无码帝国www无码专区色综合 | 国内精品人妻无码久久久影院蜜桃 | 一本久久伊人热热精品中文字幕 | 久久精品视频在线看15 | 国产精品久久久久久无码 | 中文字幕无码乱人伦 | 日日噜噜噜噜夜夜爽亚洲精品 | 天天爽夜夜爽夜夜爽 | 亚洲成av人片天堂网无码】 | 国产成人无码av一区二区 | 黄网在线观看免费网站 | 内射白嫩少妇超碰 | 99久久无码一区人妻 | 牛和人交xxxx欧美 | 九月婷婷人人澡人人添人人爽 | 欧美性猛交内射兽交老熟妇 | 日韩人妻无码一区二区三区久久99 | 久久午夜夜伦鲁鲁片无码免费 | а√资源新版在线天堂 | 成人av无码一区二区三区 | 少妇邻居内射在线 | 亚洲精品久久久久中文第一幕 | 麻豆人妻少妇精品无码专区 | 美女极度色诱视频国产 | 激情人妻另类人妻伦 | 无码午夜成人1000部免费视频 | 国产亚洲欧美在线专区 | 亚洲人成无码网www | 久久aⅴ免费观看 | 国产乱人伦偷精品视频 | 天天躁夜夜躁狠狠是什么心态 | 丰满人妻一区二区三区免费视频 | 奇米影视7777久久精品 | 欧美刺激性大交 | 99国产欧美久久久精品 | 乱人伦人妻中文字幕无码 | 乱中年女人伦av三区 | 欧洲精品码一区二区三区免费看 | 骚片av蜜桃精品一区 | 亚洲人成网站免费播放 | 久久久久亚洲精品中文字幕 | 岛国片人妻三上悠亚 | 精品国产一区二区三区四区 | 亚洲呦女专区 | 日韩人妻无码中文字幕视频 | 一二三四社区在线中文视频 | www成人国产高清内射 | 久久伊人色av天堂九九小黄鸭 | 亚洲综合色区中文字幕 | 无码人妻出轨黑人中文字幕 | 欧美丰满熟妇xxxx | 午夜不卡av免费 一本久久a久久精品vr综合 | 荫蒂添的好舒服视频囗交 | 国产午夜无码视频在线观看 | 国产绳艺sm调教室论坛 | 在线欧美精品一区二区三区 | 中文字幕人成乱码熟女app | 两性色午夜免费视频 | 中文字幕乱码中文乱码51精品 | 日本又色又爽又黄的a片18禁 | 亚洲啪av永久无码精品放毛片 | 丰满护士巨好爽好大乳 | 大胆欧美熟妇xx | 久久久久久九九精品久 | 亚洲熟妇色xxxxx欧美老妇y | 久久精品人人做人人综合试看 | www国产亚洲精品久久久日本 | 伊人久久大香线蕉av一区二区 | 中文字幕+乱码+中文字幕一区 | 亚洲日本va中文字幕 | 偷窥村妇洗澡毛毛多 | 亚洲乱亚洲乱妇50p | 男人和女人高潮免费网站 | 国产麻豆精品精东影业av网站 | 亚洲男女内射在线播放 | 伊人久久大香线焦av综合影院 | 在线观看国产一区二区三区 | 久久久久亚洲精品中文字幕 | 国产亚洲精品久久久久久久 | 国产午夜手机精彩视频 | 亚洲精品久久久久久久久久久 | 欧美激情一区二区三区成人 | 久久综合给合久久狠狠狠97色 | 国产高清av在线播放 | 亚洲人亚洲人成电影网站色 | 日韩人妻少妇一区二区三区 | 国产又爽又黄又刺激的视频 | 在线 国产 欧美 亚洲 天堂 | 在线观看欧美一区二区三区 | 国产日产欧产精品精品app | 5858s亚洲色大成网站www | 大胆欧美熟妇xx | 欧美熟妇另类久久久久久不卡 | 男女超爽视频免费播放 | 蜜臀aⅴ国产精品久久久国产老师 | 无码国产色欲xxxxx视频 | 福利一区二区三区视频在线观看 | 精品无码国产一区二区三区av | 在线播放免费人成毛片乱码 | 女高中生第一次破苞av | 国产凸凹视频一区二区 | 中文字幕无码av波多野吉衣 | 亚洲一区二区三区在线观看网站 | 日本熟妇乱子伦xxxx | 久久精品人人做人人综合 | 精品熟女少妇av免费观看 | 日韩少妇白浆无码系列 | 国产精华av午夜在线观看 | 1000部啪啪未满十八勿入下载 | 蜜臀av在线播放 久久综合激激的五月天 | 日韩av激情在线观看 | 97夜夜澡人人双人人人喊 | 青青青爽视频在线观看 | 国产免费无码一区二区视频 | 少妇高潮一区二区三区99 | 人妻尝试又大又粗久久 | 日本www一道久久久免费榴莲 | 精品一区二区三区波多野结衣 | 麻豆人妻少妇精品无码专区 | 国产精品国产三级国产专播 | 永久免费精品精品永久-夜色 | 国产区女主播在线观看 | 欧美成人午夜精品久久久 | 久久无码中文字幕免费影院蜜桃 | 少妇人妻大乳在线视频 | 亚洲国产成人a精品不卡在线 | 久久成人a毛片免费观看网站 | 熟女少妇在线视频播放 | 亚洲国产欧美在线成人 | 狠狠色噜噜狠狠狠狠7777米奇 | 一本色道婷婷久久欧美 | 亚洲男人av香蕉爽爽爽爽 | 香港三级日本三级妇三级 | 国产又爽又猛又粗的视频a片 | 欧美xxxxx精品 | 午夜精品一区二区三区的区别 | 亚洲欧美中文字幕5发布 | 一本色道婷婷久久欧美 | www成人国产高清内射 | 亚洲精品国产a久久久久久 | 国产精品亚洲а∨无码播放麻豆 | 天天躁夜夜躁狠狠是什么心态 | 熟女俱乐部五十路六十路av | 鲁一鲁av2019在线 | 国产内射爽爽大片视频社区在线 | 99久久精品国产一区二区蜜芽 | 国产精品福利视频导航 | 内射老妇bbwx0c0ck | 真人与拘做受免费视频一 | 成熟妇人a片免费看网站 | 欧美 日韩 亚洲 在线 | 在线 国产 欧美 亚洲 天堂 | 国产综合在线观看 | 日本爽爽爽爽爽爽在线观看免 | 人人妻人人澡人人爽欧美一区 | 国产欧美熟妇另类久久久 | 精品国偷自产在线视频 | 人妻尝试又大又粗久久 | 亚洲国产日韩a在线播放 | 久久久久久av无码免费看大片 | 一本久久伊人热热精品中文字幕 | 亚洲一区二区三区国产精华液 | 无码国产乱人伦偷精品视频 | 亚洲爆乳大丰满无码专区 | 日本精品人妻无码77777 天堂一区人妻无码 | 乌克兰少妇性做爰 | www一区二区www免费 | 亚洲精品一区二区三区婷婷月 | 毛片内射-百度 | 国产精品高潮呻吟av久久4虎 | 人人爽人人爽人人片av亚洲 | 99久久精品日本一区二区免费 | 国产亚洲精品久久久久久久 | 国产高清av在线播放 | 岛国片人妻三上悠亚 | 高中生自慰www网站 | 国产成人人人97超碰超爽8 | 97无码免费人妻超级碰碰夜夜 | 黑人玩弄人妻中文在线 | 色欲久久久天天天综合网精品 | аⅴ资源天堂资源库在线 | 色综合久久88色综合天天 | 清纯唯美经典一区二区 | 中文字幕无码热在线视频 | 狠狠cao日日穞夜夜穞av | 一个人看的www免费视频在线观看 | 国产在线精品一区二区三区直播 | 天堂а√在线中文在线 | 国产特级毛片aaaaaa高潮流水 | 日本免费一区二区三区最新 | 最近免费中文字幕中文高清百度 | 婷婷五月综合缴情在线视频 | 人人妻人人澡人人爽人人精品浪潮 | 中文字幕久久久久人妻 | 97无码免费人妻超级碰碰夜夜 | 日韩精品成人一区二区三区 | 强开小婷嫩苞又嫩又紧视频 | 国产手机在线αⅴ片无码观看 | 精品 日韩 国产 欧美 视频 | 粉嫩少妇内射浓精videos | 噜噜噜亚洲色成人网站 | 免费无码肉片在线观看 | 亚洲国产日韩a在线播放 | 国产97人人超碰caoprom | 中文字幕日产无线码一区 | 精品人妻人人做人人爽夜夜爽 | 欧美猛少妇色xxxxx | 国产精华av午夜在线观看 | 亚洲s码欧洲m码国产av | 18禁黄网站男男禁片免费观看 | 人妻少妇精品视频专区 | 精品乱码久久久久久久 | 日本一区二区三区免费高清 | 国产精品久久精品三级 | a在线观看免费网站大全 | 亚洲精品午夜无码电影网 | 国产sm调教视频在线观看 | 99精品视频在线观看免费 | 美女黄网站人色视频免费国产 | 亚洲一区二区三区 | 荫蒂添的好舒服视频囗交 | 亚洲国产一区二区三区在线观看 | 一本久道久久综合婷婷五月 | 麻豆md0077饥渴少妇 | 东北女人啪啪对白 | 国产精品久久国产三级国 | 樱花草在线播放免费中文 | 亚洲精品国产精品乱码视色 | 久久五月精品中文字幕 | 福利一区二区三区视频在线观看 | 亚洲精品欧美二区三区中文字幕 | 欧美野外疯狂做受xxxx高潮 | 免费无码的av片在线观看 | 久久亚洲国产成人精品性色 | 国产精品久免费的黄网站 | 国产偷抇久久精品a片69 | 无码人妻出轨黑人中文字幕 | 亚洲va中文字幕无码久久不卡 | 我要看www免费看插插视频 | 亚洲综合无码久久精品综合 | 亚洲男人av天堂午夜在 | 无码国产乱人伦偷精品视频 | 久久99久久99精品中文字幕 | 精品国产一区二区三区四区 | 欧美性生交xxxxx久久久 | 永久免费观看国产裸体美女 | 日本www一道久久久免费榴莲 | 亚拍精品一区二区三区探花 | 午夜福利一区二区三区在线观看 | 日韩av激情在线观看 | 日欧一片内射va在线影院 | 女人高潮内射99精品 | 女人和拘做爰正片视频 | 丰满妇女强制高潮18xxxx | 欧美性色19p | 玩弄中年熟妇正在播放 | 国产三级精品三级男人的天堂 | 欧美亚洲日韩国产人成在线播放 | 精品国产青草久久久久福利 | 成人av无码一区二区三区 | 国产综合久久久久鬼色 | 亚洲成a人片在线观看无码3d | 天堂无码人妻精品一区二区三区 | 精品国精品国产自在久国产87 | 国产精品久久久一区二区三区 | 欧洲vodafone精品性 | 国产色在线 | 国产 | 亚洲国精产品一二二线 | 亚洲七七久久桃花影院 | 欧美freesex黑人又粗又大 | 内射巨臀欧美在线视频 | 国产精品久久久久影院嫩草 | 夜先锋av资源网站 | 亚洲国精产品一二二线 | 久久国产精品偷任你爽任你 | 人妻无码久久精品人妻 | 99在线 | 亚洲 | 亚洲精品国产第一综合99久久 | 人人妻人人澡人人爽欧美一区 | 色噜噜亚洲男人的天堂 | 国产成人亚洲综合无码 | 俺去俺来也在线www色官网 | 激情爆乳一区二区三区 | 色综合久久久久综合一本到桃花网 | 欧美一区二区三区视频在线观看 | 国产猛烈高潮尖叫视频免费 | 亚洲欧美日韩综合久久久 | 日韩精品一区二区av在线 | 精品人人妻人人澡人人爽人人 | 18无码粉嫩小泬无套在线观看 | 久久精品国产一区二区三区 | 日日摸夜夜摸狠狠摸婷婷 | 久久久亚洲欧洲日产国码αv | 国产免费久久久久久无码 | 三级4级全黄60分钟 | 国产午夜精品一区二区三区嫩草 | av人摸人人人澡人人超碰下载 | 97精品人妻一区二区三区香蕉 | 亚洲色偷偷男人的天堂 | 亚洲熟妇自偷自拍另类 | 欧美人与禽zoz0性伦交 | 日韩精品乱码av一区二区 | 精品人人妻人人澡人人爽人人 | 精品无码国产一区二区三区av | 国产精品办公室沙发 | 欧美成人午夜精品久久久 | 国产精品99久久精品爆乳 | 欧美日韩综合一区二区三区 | 亚洲成a人片在线观看日本 | 国产无遮挡又黄又爽免费视频 | 中国女人内谢69xxxx | 亚洲一区二区三区含羞草 | 国产欧美熟妇另类久久久 | 无码av中文字幕免费放 | 免费看男女做好爽好硬视频 | 99久久精品国产一区二区蜜芽 | 无码一区二区三区在线 | 丰满人妻一区二区三区免费视频 | 少妇性俱乐部纵欲狂欢电影 | 国产av无码专区亚洲awww | 国精产品一区二区三区 | 伊人久久大香线蕉午夜 | 天天摸天天碰天天添 | 国产精品-区区久久久狼 | 荫蒂被男人添的好舒服爽免费视频 | 98国产精品综合一区二区三区 | 7777奇米四色成人眼影 | 国产成人无码区免费内射一片色欲 | 国产肉丝袜在线观看 | 内射白嫩少妇超碰 | 欧美亚洲日韩国产人成在线播放 | 久久精品女人天堂av免费观看 | 亚洲中文字幕无码一久久区 | 午夜无码区在线观看 | 少妇性荡欲午夜性开放视频剧场 | 国产亚洲视频中文字幕97精品 | 少妇人妻偷人精品无码视频 | 日本大香伊一区二区三区 | 中文字幕无码日韩专区 | 免费观看又污又黄的网站 | 九月婷婷人人澡人人添人人爽 | 国产97在线 | 亚洲 | 图片小说视频一区二区 | 亚洲天堂2017无码中文 | 日本精品久久久久中文字幕 | 成人av无码一区二区三区 | 男女猛烈xx00免费视频试看 | 亚洲成色在线综合网站 | 天堂一区人妻无码 | 未满成年国产在线观看 | 免费无码一区二区三区蜜桃大 | 亚洲阿v天堂在线 | 国产艳妇av在线观看果冻传媒 | 国产内射爽爽大片视频社区在线 | 无码人妻少妇伦在线电影 | 67194成是人免费无码 | 国产成人无码一二三区视频 | 清纯唯美经典一区二区 | 色欲av亚洲一区无码少妇 | 国产热a欧美热a在线视频 | 久久久久免费精品国产 | 国产精品.xx视频.xxtv | 少妇无码一区二区二三区 | 亚洲 a v无 码免 费 成 人 a v | 午夜精品久久久久久久久 | av无码电影一区二区三区 | 亚洲一区二区三区国产精华液 | 99久久精品日本一区二区免费 | 粉嫩少妇内射浓精videos | 一本大道久久东京热无码av | 日韩无套无码精品 | 伊人久久大香线蕉午夜 | 国产在线aaa片一区二区99 | 亚洲一区av无码专区在线观看 | 国产熟女一区二区三区四区五区 | 暴力强奷在线播放无码 | 国产乡下妇女做爰 | 国产精品久久福利网站 | av无码不卡在线观看免费 | 四虎国产精品免费久久 | 日韩亚洲欧美中文高清在线 | 波多野结衣av一区二区全免费观看 | 日本va欧美va欧美va精品 | 精品国产精品久久一区免费式 | 国产疯狂伦交大片 | 永久免费精品精品永久-夜色 | 日韩精品乱码av一区二区 | 少女韩国电视剧在线观看完整 | 国产精品对白交换视频 | 国产日产欧产精品精品app | 亚洲成a人片在线观看无码 | 欧美自拍另类欧美综合图片区 | 国产色精品久久人妻 | 荫蒂被男人添的好舒服爽免费视频 | 麻豆精品国产精华精华液好用吗 | 欧洲vodafone精品性 | av人摸人人人澡人人超碰下载 | 久久99精品久久久久久动态图 | 76少妇精品导航 | 欧美老妇交乱视频在线观看 | 国语自产偷拍精品视频偷 | 奇米影视888欧美在线观看 | 亚洲va欧美va天堂v国产综合 | 欧洲熟妇精品视频 | 性做久久久久久久久 | 青青久在线视频免费观看 | 日本xxxx色视频在线观看免费 | 亚洲国产成人a精品不卡在线 | 亚洲综合久久一区二区 | 日日夜夜撸啊撸 | 亚洲无人区一区二区三区 | 日本欧美一区二区三区乱码 | 一本久道高清无码视频 | 波多野结衣av在线观看 | 欧美阿v高清资源不卡在线播放 | 国产亚洲精品久久久久久久久动漫 | 久久无码人妻影院 | 欧美 丝袜 自拍 制服 另类 | 亚洲一区二区三区 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲国产精品一区二区美利坚 | 欧美精品免费观看二区 | 亚洲一区二区三区在线观看网站 | 精品一二三区久久aaa片 | 最近免费中文字幕中文高清百度 | 久久久久久a亚洲欧洲av冫 | 青青草原综合久久大伊人精品 | 四虎影视成人永久免费观看视频 | 精品 日韩 国产 欧美 视频 | 宝宝好涨水快流出来免费视频 | 扒开双腿吃奶呻吟做受视频 | 欧美肥老太牲交大战 | 青草青草久热国产精品 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲精品综合一区二区三区在线 | 天堂无码人妻精品一区二区三区 | 亚洲成av人影院在线观看 | 日本一本二本三区免费 | 一本大道伊人av久久综合 | 国产精品欧美成人 | 久久国产精品_国产精品 | 成人无码精品一区二区三区 | 久久人人爽人人爽人人片ⅴ | 97久久超碰中文字幕 | 久在线观看福利视频 | 日本欧美一区二区三区乱码 | 麻豆国产人妻欲求不满谁演的 | 九九在线中文字幕无码 | 青春草在线视频免费观看 | 国产内射老熟女aaaa | www国产精品内射老师 | 亚洲精品午夜国产va久久成人 | 大色综合色综合网站 | 国产亚洲精品久久久久久久久动漫 | 成熟女人特级毛片www免费 | 亚洲日本va中文字幕 | 国产成人无码av一区二区 | 国产高清不卡无码视频 | 3d动漫精品啪啪一区二区中 | 色婷婷综合中文久久一本 | 99re在线播放 | 伊在人天堂亚洲香蕉精品区 | 全黄性性激高免费视频 | 国产精品.xx视频.xxtv | 国产成人综合色在线观看网站 | 久久精品人人做人人综合 | 国产精品18久久久久久麻辣 | 夜夜影院未满十八勿进 | 97精品国产97久久久久久免费 | 国精产品一品二品国精品69xx | 国产av一区二区三区最新精品 | 玩弄人妻少妇500系列视频 | 精品无码一区二区三区的天堂 | 蜜臀aⅴ国产精品久久久国产老师 | 少女韩国电视剧在线观看完整 | 国精产品一区二区三区 | 美女黄网站人色视频免费国产 | 国产 精品 自在自线 | 亚洲精品国偷拍自产在线观看蜜桃 | 麻豆成人精品国产免费 | 狠狠噜狠狠狠狠丁香五月 | 成人无码影片精品久久久 | 精品国产国产综合精品 | 国产精品多人p群无码 | 亚洲欧美日韩国产精品一区二区 | 色综合久久久久综合一本到桃花网 | 精品无码一区二区三区的天堂 | 国产国语老龄妇女a片 | 欧美成人午夜精品久久久 | 人妻无码αv中文字幕久久琪琪布 | 2020久久香蕉国产线看观看 | 国产人妻精品一区二区三区 | 国产精品怡红院永久免费 | 亚洲一区二区三区香蕉 | 在线精品国产一区二区三区 | 欧美日韩一区二区免费视频 | 久久久中文字幕日本无吗 | 少妇无套内谢久久久久 | 亚洲一区二区三区在线观看网站 | 欧美熟妇另类久久久久久多毛 | 日本饥渴人妻欲求不满 | 久久人人爽人人人人片 | 亚洲欧洲无卡二区视頻 | 夜夜高潮次次欢爽av女 | 国产97色在线 | 免 | 成年美女黄网站色大免费全看 | 欧美日韩一区二区综合 | 欧美日韩色另类综合 | 日本一卡2卡3卡四卡精品网站 | 中文字幕亚洲情99在线 | 亚洲精品无码人妻无码 | 一二三四在线观看免费视频 | 内射后入在线观看一区 | 欧美人与善在线com | 亚洲精品一区二区三区在线 | 亚洲精品美女久久久久久久 | 国产亚av手机在线观看 | 亚洲人亚洲人成电影网站色 | 中文字幕av伊人av无码av | 国产性生大片免费观看性 | 欧美人与物videos另类 | 任你躁国产自任一区二区三区 | 97久久国产亚洲精品超碰热 | 国产特级毛片aaaaaa高潮流水 | 国产片av国语在线观看 | 又大又黄又粗又爽的免费视频 | 午夜福利不卡在线视频 | 日韩欧美中文字幕公布 | 亚洲综合久久一区二区 | 久久亚洲日韩精品一区二区三区 | 内射爽无广熟女亚洲 | 青草视频在线播放 | 久久综合给合久久狠狠狠97色 | 久久精品国产精品国产精品污 | 中文字幕人妻丝袜二区 | 亚洲成在人网站无码天堂 | 精品久久8x国产免费观看 | 欧美日韩亚洲国产精品 | a在线亚洲男人的天堂 | 女高中生第一次破苞av | 欧洲美熟女乱又伦 | 国产亚洲美女精品久久久2020 | 国产精品办公室沙发 | 国产香蕉尹人综合在线观看 | 日韩人妻系列无码专区 | 奇米影视888欧美在线观看 | 人妻有码中文字幕在线 | 国产乱人伦av在线无码 | 久久精品国产一区二区三区 | 无码人妻久久一区二区三区不卡 | 精品国产av色一区二区深夜久久 | 亚洲成a人片在线观看无码3d | 欧美精品无码一区二区三区 | 无码av免费一区二区三区试看 | 中文无码精品a∨在线观看不卡 | 久久综合久久自在自线精品自 | 欧美freesex黑人又粗又大 | 无码国模国产在线观看 | 红桃av一区二区三区在线无码av | 精品国偷自产在线 | 一本精品99久久精品77 | 天天摸天天碰天天添 | 牛和人交xxxx欧美 | 搡女人真爽免费视频大全 | 高清不卡一区二区三区 | a在线观看免费网站大全 | 国产又粗又硬又大爽黄老大爷视 | 国产精品内射视频免费 | 在线欧美精品一区二区三区 | 国产真人无遮挡作爱免费视频 | 蜜桃av抽搐高潮一区二区 | 国精产品一品二品国精品69xx | 日日干夜夜干 | www国产亚洲精品久久网站 | 天天燥日日燥 | 2019nv天堂香蕉在线观看 | 亚洲中文字幕在线观看 | 国产内射爽爽大片视频社区在线 | 国产精品丝袜黑色高跟鞋 | 国产av人人夜夜澡人人爽麻豆 | 色偷偷人人澡人人爽人人模 | 国产成人一区二区三区在线观看 | 亚洲无人区午夜福利码高清完整版 | 少妇无码一区二区二三区 | 国产精品美女久久久网av | 欧美日本免费一区二区三区 | 最新国产麻豆aⅴ精品无码 | 精品无码国产自产拍在线观看蜜 | 色综合久久久久综合一本到桃花网 | 中文字幕乱码人妻二区三区 | 人妻无码久久精品人妻 | 成人无码视频免费播放 | 精品久久8x国产免费观看 | 在线a亚洲视频播放在线观看 | 一区二区三区高清视频一 | 精品乱子伦一区二区三区 | 秋霞成人午夜鲁丝一区二区三区 | 精品一区二区三区无码免费视频 | 国产亚洲tv在线观看 | 精品成人av一区二区三区 | 国内少妇偷人精品视频免费 | 午夜理论片yy44880影院 | 日欧一片内射va在线影院 | 国产成人精品无码播放 | 亚洲第一无码av无码专区 | 国产成人无码午夜视频在线观看 | 欧美国产日产一区二区 | 亚洲精品久久久久久久久久久 | 中文字幕无线码 | 久久精品视频在线看15 | 色情久久久av熟女人妻网站 | 亚洲国产高清在线观看视频 | 国产精品.xx视频.xxtv | 久久久久99精品国产片 | 水蜜桃色314在线观看 | 欧美第一黄网免费网站 | 国产激情精品一区二区三区 | 成人精品一区二区三区中文字幕 | 特黄特色大片免费播放器图片 | 久久精品国产大片免费观看 | 成人片黄网站色大片免费观看 | 亚洲欧美综合区丁香五月小说 | 99久久人妻精品免费二区 | 亚洲国产精品一区二区美利坚 | 国产一区二区三区影院 | 亚洲精品国产品国语在线观看 | 国模大胆一区二区三区 | av人摸人人人澡人人超碰下载 | 午夜精品一区二区三区的区别 | 一本大道伊人av久久综合 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 欧美性生交xxxxx久久久 | 无码人妻精品一区二区三区不卡 | 久久午夜无码鲁丝片 | 97久久国产亚洲精品超碰热 | 熟女俱乐部五十路六十路av | 色欲久久久天天天综合网精品 | 国产成人精品优优av | 久久久久久国产精品无码下载 | 少妇一晚三次一区二区三区 | 午夜精品久久久久久久久 | 日韩人妻少妇一区二区三区 | 伊人色综合久久天天小片 | 久久久成人毛片无码 | 国产精品久久久午夜夜伦鲁鲁 | 老司机亚洲精品影院无码 | 日本www一道久久久免费榴莲 | 亚洲欧洲日本综合aⅴ在线 | 国产无遮挡吃胸膜奶免费看 | 狠狠综合久久久久综合网 | 又色又爽又黄的美女裸体网站 | 亚洲成熟女人毛毛耸耸多 | 国产亚洲精品精品国产亚洲综合 | 婷婷丁香五月天综合东京热 | 鲁一鲁av2019在线 | 图片小说视频一区二区 | 亚洲欧洲中文日韩av乱码 | 国内精品人妻无码久久久影院蜜桃 | 亚洲国产午夜精品理论片 | 亚洲va欧美va天堂v国产综合 | 久久久久成人片免费观看蜜芽 | 十八禁视频网站在线观看 | 亚洲欧洲日本综合aⅴ在线 | 激情亚洲一区国产精品 | 三上悠亚人妻中文字幕在线 | 扒开双腿吃奶呻吟做受视频 | 性生交大片免费看女人按摩摩 | 久久久久久久久蜜桃 | 西西人体www44rt大胆高清 | 青草视频在线播放 | 精品亚洲韩国一区二区三区 | 久久99精品国产麻豆蜜芽 | 久久亚洲日韩精品一区二区三区 | 水蜜桃亚洲一二三四在线 | 99精品国产综合久久久久五月天 | 国产卡一卡二卡三 | 麻花豆传媒剧国产免费mv在线 | 女高中生第一次破苞av | 国产成人久久精品流白浆 | 国产成人人人97超碰超爽8 | 图片区 小说区 区 亚洲五月 | 夜先锋av资源网站 | 亚洲精品中文字幕 | 午夜不卡av免费 一本久久a久久精品vr综合 | 午夜丰满少妇性开放视频 | 妺妺窝人体色www婷婷 | 亚洲成av人综合在线观看 | 国精品人妻无码一区二区三区蜜柚 | 狠狠cao日日穞夜夜穞av | 欧美xxxx黑人又粗又长 | 亚洲国产av美女网站 | 网友自拍区视频精品 | 999久久久国产精品消防器材 | 国产精品国产三级国产专播 | 男人的天堂2018无码 | 久久无码专区国产精品s | 一本大道伊人av久久综合 | 国产精品人妻一区二区三区四 | 国产亚洲欧美在线专区 | 在线观看免费人成视频 | 99久久精品午夜一区二区 | 久久国语露脸国产精品电影 | 国产精品国产自线拍免费软件 | 人人妻人人澡人人爽人人精品 | 国产午夜手机精彩视频 | 色情久久久av熟女人妻网站 | 无遮挡国产高潮视频免费观看 | 国内揄拍国内精品少妇国语 | 久久综合狠狠综合久久综合88 | 国产suv精品一区二区五 | 亚洲欧洲中文日韩av乱码 | a片在线免费观看 | 高清不卡一区二区三区 | 亚洲国产综合无码一区 | 小sao货水好多真紧h无码视频 | 亚洲爆乳大丰满无码专区 | 在线观看欧美一区二区三区 | 在教室伦流澡到高潮hnp视频 | 亚洲精品成人福利网站 | 日本www一道久久久免费榴莲 | 国产成人无码午夜视频在线观看 | 亚洲精品国产品国语在线观看 | 国产在线精品一区二区高清不卡 | 亚洲色在线无码国产精品不卡 | 全球成人中文在线 | 国产亚洲欧美日韩亚洲中文色 | 人人妻在人人 | 欧美日韩综合一区二区三区 | 久久国语露脸国产精品电影 | 大肉大捧一进一出视频出来呀 | 欧美 亚洲 国产 另类 | 亚洲s色大片在线观看 | 中文字幕无码日韩欧毛 | 欧美兽交xxxx×视频 | 国产办公室秘书无码精品99 | 四十如虎的丰满熟妇啪啪 | 国产精华av午夜在线观看 | 娇妻被黑人粗大高潮白浆 | 77777熟女视频在线观看 а天堂中文在线官网 | 99久久人妻精品免费一区 | 青草青草久热国产精品 | 国产sm调教视频在线观看 | 国产suv精品一区二区五 | 无码精品国产va在线观看dvd | 麻豆md0077饥渴少妇 | 天天做天天爱天天爽综合网 | 日日碰狠狠躁久久躁蜜桃 | 亚洲午夜久久久影院 | 男女猛烈xx00免费视频试看 | 亚洲经典千人经典日产 | 九九在线中文字幕无码 | 激情综合激情五月俺也去 | 欧洲vodafone精品性 | 日韩人妻无码中文字幕视频 | 欧美亚洲国产一区二区三区 | 亚洲综合色区中文字幕 | 久久97精品久久久久久久不卡 | 亚洲乱码国产乱码精品精 | 亚洲另类伦春色综合小说 | 婷婷丁香六月激情综合啪 | 国产乱人伦av在线无码 | 欧美xxxxx精品 | 国产无套粉嫩白浆在线 | a片免费视频在线观看 | 国产成人无码av片在线观看不卡 | 波多野结衣 黑人 | 日本大乳高潮视频在线观看 | 成年美女黄网站色大免费视频 | 亚洲国产精品久久久天堂 | 国产成人综合美国十次 | 免费人成在线观看网站 | 欧美激情综合亚洲一二区 | 99精品无人区乱码1区2区3区 | 色婷婷欧美在线播放内射 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 少妇久久久久久人妻无码 | 久久精品国产日本波多野结衣 | 色妞www精品免费视频 | 永久免费精品精品永久-夜色 | 国产精品国产三级国产专播 | 色五月五月丁香亚洲综合网 | 亚洲综合色区中文字幕 | 日韩欧美中文字幕公布 | 中文字幕+乱码+中文字幕一区 | 国产成人精品无码播放 | 欧美性黑人极品hd | 久久国产精品_国产精品 | 国产亚洲精品久久久久久久久动漫 | 色综合天天综合狠狠爱 | 夜夜高潮次次欢爽av女 | 日本精品高清一区二区 | 久久精品国产精品国产精品污 | 狂野欧美性猛交免费视频 | 国产综合久久久久鬼色 | 中文字幕 人妻熟女 | 波多野结衣高清一区二区三区 | 亚洲s码欧洲m码国产av | 性色欲情网站iwww九文堂 | 内射白嫩少妇超碰 | 丰满少妇女裸体bbw | 日韩无套无码精品 | 夜夜躁日日躁狠狠久久av | 精品无码国产一区二区三区av | 成人精品一区二区三区中文字幕 | 国产精品手机免费 | 成年女人永久免费看片 | 高潮毛片无遮挡高清免费 | 我要看www免费看插插视频 | 日日天干夜夜狠狠爱 | 成人试看120秒体验区 | 无码人妻少妇伦在线电影 | 久久99精品国产麻豆 | 久久99精品国产麻豆蜜芽 | 99国产精品白浆在线观看免费 | 亚洲 日韩 欧美 成人 在线观看 | 少妇一晚三次一区二区三区 | 无码人中文字幕 | 国精产品一品二品国精品69xx | 免费无码一区二区三区蜜桃大 | 波多野结衣aⅴ在线 | 女人和拘做爰正片视频 | 无码人妻黑人中文字幕 | 亚洲 欧美 激情 小说 另类 | 久久精品国产99精品亚洲 | 亚洲成熟女人毛毛耸耸多 | 人人妻人人藻人人爽欧美一区 | 国产 浪潮av性色四虎 | 67194成是人免费无码 | 久久午夜无码鲁丝片午夜精品 | 日日摸夜夜摸狠狠摸婷婷 | 黑人粗大猛烈进出高潮视频 | 久久亚洲精品成人无码 | 岛国片人妻三上悠亚 | 性色欲情网站iwww九文堂 | 一本大道伊人av久久综合 | 最近中文2019字幕第二页 | 无码av最新清无码专区吞精 | 国产成人精品一区二区在线小狼 | 欧美性色19p | 5858s亚洲色大成网站www | 日本欧美一区二区三区乱码 | 国产午夜无码视频在线观看 | 夜夜躁日日躁狠狠久久av | 色综合久久久无码网中文 | 四虎永久在线精品免费网址 | 欧美精品一区二区精品久久 | 中文字幕无码日韩欧毛 | 久久精品成人欧美大片 | 国产小呦泬泬99精品 | 香蕉久久久久久av成人 | 亚洲欧洲中文日韩av乱码 | 99久久婷婷国产综合精品青草免费 | 澳门永久av免费网站 | 精品成人av一区二区三区 | 久久精品人人做人人综合试看 | 欧美午夜特黄aaaaaa片 | 亚洲日韩av一区二区三区四区 | 国产精品久久久久9999小说 | 嫩b人妻精品一区二区三区 | 国产性生交xxxxx无码 | 色婷婷综合中文久久一本 | 国产亚洲精品久久久久久久久动漫 | 亚洲中文字幕无码中字 | 久久综合九色综合97网 | 麻豆蜜桃av蜜臀av色欲av | 国产福利视频一区二区 | 欧美性色19p | 久青草影院在线观看国产 | 成人一在线视频日韩国产 | 国产色视频一区二区三区 | 亚洲国产欧美国产综合一区 | 久久国产精品二国产精品 | 国产精品无码一区二区三区不卡 | 无码精品国产va在线观看dvd | 国内精品人妻无码久久久影院 | 漂亮人妻洗澡被公强 日日躁 | 欧美国产日韩亚洲中文 | 性生交大片免费看女人按摩摩 | 丰满人妻精品国产99aⅴ | 国产成人精品一区二区在线小狼 | 性欧美疯狂xxxxbbbb | 国产艳妇av在线观看果冻传媒 | 亚洲色成人中文字幕网站 | 欧美熟妇另类久久久久久多毛 | 97色伦图片97综合影院 | 2020久久超碰国产精品最新 | 蜜桃臀无码内射一区二区三区 | 中文字幕人妻丝袜二区 | 婷婷色婷婷开心五月四房播播 | 无码人妻av免费一区二区三区 | 国产色在线 | 国产 | 日日天日日夜日日摸 | 成人动漫在线观看 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 窝窝午夜理论片影院 | 亚洲 a v无 码免 费 成 人 a v | 免费网站看v片在线18禁无码 | 大地资源网第二页免费观看 | 麻豆国产人妻欲求不满 | 色综合久久久久综合一本到桃花网 | 久激情内射婷内射蜜桃人妖 | 老司机亚洲精品影院无码 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 荫蒂添的好舒服视频囗交 | 久久人人97超碰a片精品 | 亚洲性无码av中文字幕 | 亚洲人成影院在线无码按摩店 | 亚洲成av人片在线观看无码不卡 | 亚洲综合在线一区二区三区 | 亚洲欧美精品aaaaaa片 | 国产国产精品人在线视 | 久青草影院在线观看国产 | 中文字幕乱妇无码av在线 | 无码人妻丰满熟妇区毛片18 | 2020久久香蕉国产线看观看 | 爽爽影院免费观看 | 亚洲精品一区二区三区大桥未久 | 精品无人区无码乱码毛片国产 | 国产97色在线 | 免 | 国产xxx69麻豆国语对白 | 日韩精品无码一区二区中文字幕 | 日本欧美一区二区三区乱码 | 无套内射视频囯产 | 久久午夜无码鲁丝片秋霞 | 日韩人妻无码一区二区三区久久99 | 国产精品资源一区二区 | 精品国产国产综合精品 | 老熟妇乱子伦牲交视频 | 亚洲国产欧美国产综合一区 | 亚洲精品一区二区三区婷婷月 | 精品亚洲韩国一区二区三区 | 国产精品久久久久7777 | 人妻少妇被猛烈进入中文字幕 | 亚洲va欧美va天堂v国产综合 | 欧美性猛交xxxx富婆 | 精品无人区无码乱码毛片国产 | 中文无码精品a∨在线观看不卡 | 久久久中文久久久无码 | 国产人妻精品午夜福利免费 | 美女极度色诱视频国产 | 色五月丁香五月综合五月 | 樱花草在线社区www | 少妇一晚三次一区二区三区 | 日韩精品a片一区二区三区妖精 | 国产精品无码一区二区桃花视频 | 无码人妻av免费一区二区三区 | 天天摸天天碰天天添 | 欧洲极品少妇 | 51国偷自产一区二区三区 | 日韩精品无码一区二区中文字幕 | 国产精品久久久久久亚洲影视内衣 | 亚洲人成网站免费播放 | v一区无码内射国产 | 福利一区二区三区视频在线观看 | 欧美精品无码一区二区三区 | 在线看片无码永久免费视频 | 亚洲中文字幕乱码av波多ji | 午夜成人1000部免费视频 | 中文字幕av伊人av无码av | 激情爆乳一区二区三区 | aⅴ在线视频男人的天堂 | 无码一区二区三区在线 | 久久熟妇人妻午夜寂寞影院 | 欧美自拍另类欧美综合图片区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 99久久久无码国产精品免费 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久精品国产99精品亚洲 | 国产精品资源一区二区 | 精品熟女少妇av免费观看 | 18禁止看的免费污网站 | 一本色道久久综合亚洲精品不卡 | 久久伊人色av天堂九九小黄鸭 | 少妇性l交大片 | 99久久婷婷国产综合精品青草免费 | 日本丰满护士爆乳xxxx | 久久人妻内射无码一区三区 | 亚无码乱人伦一区二区 | 波多野结衣av在线观看 | 在线成人www免费观看视频 | 亚洲 另类 在线 欧美 制服 | 高潮毛片无遮挡高清免费视频 | 永久黄网站色视频免费直播 | 熟妇人妻无乱码中文字幕 | 麻豆av传媒蜜桃天美传媒 | 麻豆国产人妻欲求不满 | 在线亚洲高清揄拍自拍一品区 | 欧美国产亚洲日韩在线二区 | 久久午夜夜伦鲁鲁片无码免费 | 丰满人妻翻云覆雨呻吟视频 | 日本熟妇乱子伦xxxx | 精品偷自拍另类在线观看 | 无码人妻精品一区二区三区不卡 | 国产亚洲精品久久久ai换 | 强伦人妻一区二区三区视频18 | 国内老熟妇对白xxxxhd | 伊人久久婷婷五月综合97色 | 国产成人久久精品流白浆 | 中文亚洲成a人片在线观看 | 任你躁在线精品免费 | 国产成人午夜福利在线播放 | 亚洲精品久久久久久久久久久 | 亚洲小说春色综合另类 | 国产精品无码成人午夜电影 | 乱人伦中文视频在线观看 | 国产疯狂伦交大片 | 久久无码专区国产精品s | 国模大胆一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 久久99国产综合精品 | 漂亮人妻洗澡被公强 日日躁 | 国产精品久久久久久久影院 | 秋霞成人午夜鲁丝一区二区三区 | 人妻互换免费中文字幕 | 97无码免费人妻超级碰碰夜夜 | 99久久精品午夜一区二区 | 天天爽夜夜爽夜夜爽 | 亚洲精品一区二区三区在线观看 | 久久综合香蕉国产蜜臀av | 天堂久久天堂av色综合 | 两性色午夜视频免费播放 | 国产人妻精品一区二区三区 | 又大又硬又爽免费视频 | 蜜臀aⅴ国产精品久久久国产老师 | 少妇性荡欲午夜性开放视频剧场 | 久久aⅴ免费观看 | 天干天干啦夜天干天2017 | 欧美日本免费一区二区三区 | www国产精品内射老师 | 人妻天天爽夜夜爽一区二区 | 久久久亚洲欧洲日产国码αv | 久久久无码中文字幕久... | 东北女人啪啪对白 | 国产成人无码午夜视频在线观看 | 性啪啪chinese东北女人 | 亚洲精品成人av在线 | 麻豆人妻少妇精品无码专区 | 国产黄在线观看免费观看不卡 | 精品国产一区二区三区四区在线看 | 狠狠色噜噜狠狠狠狠7777米奇 | 免费观看又污又黄的网站 | 夜夜躁日日躁狠狠久久av | 精品国产麻豆免费人成网站 | 色婷婷久久一区二区三区麻豆 | 成人性做爰aaa片免费看不忠 | 一本精品99久久精品77 | 久久久无码中文字幕久... | 日日碰狠狠丁香久燥 | 精品一二三区久久aaa片 | 在线播放亚洲第一字幕 | 人人妻人人澡人人爽人人精品浪潮 | 天天躁夜夜躁狠狠是什么心态 | 亚洲人成影院在线观看 | 免费网站看v片在线18禁无码 | 精品国产青草久久久久福利 | 国产卡一卡二卡三 | 亚洲中文字幕无码一久久区 | 国产亚洲精品久久久久久国模美 | 国产又粗又硬又大爽黄老大爷视 | 亚洲国产日韩a在线播放 | 欧美老人巨大xxxx做受 | 日本欧美一区二区三区乱码 | 亚洲熟悉妇女xxx妇女av | 国产女主播喷水视频在线观看 | 网友自拍区视频精品 | 国产女主播喷水视频在线观看 | 国产乱人无码伦av在线a | 免费人成网站视频在线观看 | 久久精品国产亚洲精品 | 牲欲强的熟妇农村老妇女视频 | 日韩 欧美 动漫 国产 制服 | 久久久久久av无码免费看大片 | 午夜成人1000部免费视频 | 精品国产av色一区二区深夜久久 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 久9re热视频这里只有精品 | 国产凸凹视频一区二区 | 任你躁国产自任一区二区三区 | 色婷婷香蕉在线一区二区 | 亚洲s色大片在线观看 | 久久99国产综合精品 | 亚洲国产精品无码久久久久高潮 | 真人与拘做受免费视频一 | 久青草影院在线观看国产 | 无码人妻丰满熟妇区五十路百度 | 亚洲综合无码久久精品综合 | 亚无码乱人伦一区二区 | 中文字幕无码av波多野吉衣 | 日韩成人一区二区三区在线观看 | 国产成人午夜福利在线播放 | 日本护士xxxxhd少妇 | 成人aaa片一区国产精品 | 福利一区二区三区视频在线观看 | 精品一区二区三区无码免费视频 | 欧美zoozzooz性欧美 | 丰满人妻精品国产99aⅴ | 丰满少妇熟乱xxxxx视频 | 国产亚洲人成a在线v网站 | 国产无遮挡又黄又爽又色 | 国内精品一区二区三区不卡 | 亚洲精品综合一区二区三区在线 | 午夜福利不卡在线视频 | 性欧美熟妇videofreesex | 久久精品国产一区二区三区 | 国产疯狂伦交大片 | 亚洲男女内射在线播放 | 中文无码成人免费视频在线观看 | 亚洲精品国产品国语在线观看 | 色五月丁香五月综合五月 | 国产精品第一国产精品 | 国产在线一区二区三区四区五区 | 成熟妇人a片免费看网站 | 在线精品国产一区二区三区 | 国产精品va在线观看无码 | 久久久久久久人妻无码中文字幕爆 | 夜先锋av资源网站 | 欧美日本免费一区二区三区 | 色婷婷av一区二区三区之红樱桃 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 97人妻精品一区二区三区 | 国产亚洲日韩欧美另类第八页 | 奇米影视7777久久精品 | 日韩人妻无码一区二区三区久久99 | 色欲av亚洲一区无码少妇 | 亚洲aⅴ无码成人网站国产app | 久久伊人色av天堂九九小黄鸭 | 婷婷综合久久中文字幕蜜桃三电影 | 精品一二三区久久aaa片 | 最新国产乱人伦偷精品免费网站 | 丝袜美腿亚洲一区二区 | 成人aaa片一区国产精品 | 成熟女人特级毛片www免费 | 欧美黑人巨大xxxxx | 国产精品久久国产三级国 | 中文字幕无码热在线视频 | 国产亚洲精品久久久久久大师 | 精品无码国产一区二区三区av | 日韩成人一区二区三区在线观看 | 国产av一区二区精品久久凹凸 | 国产三级精品三级男人的天堂 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲高清偷拍一区二区三区 | 亚洲熟妇自偷自拍另类 | 国产激情无码一区二区 | 久久97精品久久久久久久不卡 | 日本乱偷人妻中文字幕 | 成人精品天堂一区二区三区 | 久久久精品人妻久久影视 | 日本在线高清不卡免费播放 | 免费人成在线观看网站 | 成人综合网亚洲伊人 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲综合色区中文字幕 | 久久久久av无码免费网 | 中文字幕乱妇无码av在线 | 秋霞成人午夜鲁丝一区二区三区 | 国产成人精品优优av | 激情内射日本一区二区三区 | 免费国产黄网站在线观看 | 亚洲综合精品香蕉久久网 | 亚洲成色www久久网站 | 国产精品欧美成人 | 国产亚洲精品久久久久久久久动漫 | 久久99久久99精品中文字幕 | 国产精品亚洲а∨无码播放麻豆 | 亚洲精品中文字幕久久久久 | 亚洲人亚洲人成电影网站色 | 久久精品中文闷骚内射 | 精品国偷自产在线视频 | 青青草原综合久久大伊人精品 | 精品人妻中文字幕有码在线 | 日韩人妻无码中文字幕视频 | 少妇久久久久久人妻无码 | 人人妻人人澡人人爽精品欧美 | 色一情一乱一伦一视频免费看 | 欧美黑人性暴力猛交喷水 | 少妇人妻偷人精品无码视频 | 国产特级毛片aaaaaaa高清 | 精品无码国产一区二区三区av | 欧美精品国产综合久久 | 亚洲国产精品无码久久久久高潮 | 中文亚洲成a人片在线观看 | 国产无遮挡吃胸膜奶免费看 | 最新国产麻豆aⅴ精品无码 | 日本欧美一区二区三区乱码 | 夜精品a片一区二区三区无码白浆 | 国产精品无码mv在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 天堂一区人妻无码 | 天天摸天天透天天添 | 女人和拘做爰正片视频 |