青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 298  文章 - 377  trackbacks - 0
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(34)

隨筆分類

隨筆檔案

文章檔案

相冊(cè)

收藏夾

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

       網(wǎng)上看了N多的文章,對(duì)內(nèi)存中找怪極少有詳細(xì)介紹,大多數(shù)人搞定人物內(nèi)存中的有關(guān)參數(shù)后,止步于內(nèi)存中的找怪。人物只有一個(gè),而怪有各種各樣的,數(shù)量又同時(shí)出現(xiàn)多個(gè),比在內(nèi)存中找人物坐標(biāo)難度要大得多。
      下面我將盡可能詳細(xì)的講講內(nèi)存中找怪之代碼注入篇,拋磚引玉,望高人指點(diǎn)。這里的代碼注入是直接把代碼注入到游戲文件中,學(xué)個(gè)破解的人都知道,哪怕游戲原文件加了殼,在游戲原文件中加入自己的代碼也是完全可以的。
      由于本人水平有限,有的地方可能表達(dá)不清,請(qǐng)耐心慢慢看。有的地方采取的方法也許對(duì)高手來(lái)說(shuō)好低劣,見(jiàn)笑了。
一、把周圍的怪物名稱起始地址集中寫(xiě)到內(nèi)存中一固定區(qū)域。游戲中,玩家周圍有許多怪物,所有怪物的名稱、坐標(biāo)、血量等參數(shù)不可能會(huì)固定在某一內(nèi)存位置,但對(duì)于每一個(gè)怪物而言,它的名稱、坐標(biāo)、血量等在內(nèi)存中的地址之間有著相對(duì)固定的差值,只要知道怪物的名稱地址就能知道這個(gè)怪物的坐標(biāo)、血量等地址。因此,只要把周圍每個(gè)怪物的名稱地址固定在內(nèi)存中一定區(qū)域,就可知道這些怪物的其他參數(shù)。
      1、先把游戲中我們需要打的怪物名稱(不是所有怪物,因?yàn)橛械墓治锊槐瑬|西等不值得打)固定放到內(nèi)存地址為004d2a60起的一塊區(qū)域,制做一張需要打的怪物名稱列表。每個(gè)怪名稱占12字節(jié),不夠12字節(jié)的后面用00填充。
    內(nèi)存地址:004d2a60是怎樣來(lái)的呢?
    我們用PEditor打開(kāi)游戲原文件,可以看到PE文件分了好多塊,有的塊是可以改寫(xiě)的(屬性為E0000020或C0000040的可以改寫(xiě)),塊里并不全
部寫(xiě)滿了數(shù)據(jù),還有大塊連續(xù)為00的空閑區(qū)域。用UltraEdit等軟件打開(kāi)游戲文件,看到文件物理地址為000d2a60起有一大塊為00的空閑區(qū)域。映射到內(nèi)存中就是地址為004d2a60起一塊為00的空閑區(qū)域,我們先把怪物名稱寫(xiě)到這塊地方。
    具體操做是用UltraEdit打開(kāi)游戲文件,修改文件物理地址為000d2a60起的數(shù)據(jù)。原文件中這里全部為00,我們把下面數(shù)據(jù)填進(jìn)去(部分怪物名稱列表)。
000D2A60  B0 EB CA DE D5 BD CA BF 00 00 00 00 B0 EB CA DE  半獸戰(zhàn)士....半獸
000D2A70  D3 C2 CA BF 00 00 00 00 BB A2 C9 DF 00 00 00 00  勇士....虎蛇....
000D2A80  00 00 00 00 B6 BE D6 A9 D6 EB 00 00 00 00 00 00  ....毒蜘蛛......
000D2A90  C9 AD C1 D6 D1 A9 C8 CB 00 00 00 00 CD FE CB BC  森林雪人....威思
000D2AA0  B6 F8 D0 A1 B3 E6 00 00 B6 E0 BD C7 B3 E6 00 00  而小蟲(chóng)..多角蟲(chóng)..
000D2AB0  00 00 00 00 BF F8 BC D7 B3 E6 00 00 00 00 00 00  ....盔甲蟲(chóng)......
000D2AC0  B8 AF CA B4 C8 CB B9 ED 00 00 00 00 C0 CB D7 D3  腐蝕人鬼....浪子
000D2AD0  C8 CB B9 ED 00 00 00 00 C0 D7 B5 E7 BD A9 CA AC  人鬼....雷電僵尸
000D2AE0  00 00 00 00 BD A9 CA AC 00 00 00 00 00 00 00 00  ....僵尸........
000D2AF0  C9 AE C2 C2 BD A9 CA AC 00 00 00 00 B6 B4 C7 F9  僧侶僵尸....洞蛆
000D2B00  00 00 00 00 00 00 00 00 F7 BC F7 C3 BE AB C1 E9  ........骷髏精靈
000D2B10  00 00 00 00 CA AC CD F5 00 00 00 00 00 00 00 00  ....尸王........

這樣,當(dāng)游戲運(yùn)行時(shí),從內(nèi)存地址004d2a60起的一段區(qū)域有了我們需要打的怪物列表。

     2、再把玩家周圍實(shí)際刷的怪物名稱的起始地址(注意是名稱的起始地址)固定在內(nèi)存為004D3000起的長(zhǎng)為100(16進(jìn)制)的地方。
內(nèi)存地址:004D3000是游戲運(yùn)行時(shí)我們查到的空閑內(nèi)存地址,我們利用它們來(lái)放周圍怪物名稱的起始地址,每個(gè)怪物名稱的起始地址占4個(gè)字
節(jié),長(zhǎng)為100(16進(jìn)制)可以放64個(gè)怪物,玩家周圍不會(huì)超過(guò)64個(gè)怪物吧,長(zhǎng)為100應(yīng)足夠了。
   
     3、怎么寫(xiě)入這些怪物名稱的起始地址呢?
     首先應(yīng)知道,游戲從哪里把怪物名稱寫(xiě)入內(nèi)存中。
      Cheat Engine會(huì)用吧?具體怎么找,簡(jiǎn)單的說(shuō)一下:
     先運(yùn)行游戲再運(yùn)行Cheat Engine,CE中選擇游戲程序,查看內(nèi)存,搜索內(nèi)存玩家周圍的一個(gè)怪物名稱。找到后記下怪物名稱的起始內(nèi)存地址,
手動(dòng)添加地址,把找到的地址添加到列表,類型為文本。從列表中選剛才添加的地址,右鍵選“尋找什么寫(xiě)入這個(gè)地址”。回到游戲中移動(dòng)玩家,觀察剛添加的內(nèi)存地址的數(shù)值變化。變?yōu)?0時(shí)為該怪物從玩家視眼中消失。再移動(dòng)玩家到看見(jiàn)這怪物,如果運(yùn)氣好,怪物名會(huì)再次寫(xiě)入這個(gè)內(nèi)存地址。這樣在“以下處理將改變運(yùn)算碼”的窗口中會(huì)有匯編代碼出現(xiàn)。
     如我的游戲:
      能看到00409872   mov   byte ptr [edi+ecx], dl     這句。
      游戲是從這句把怪物名寫(xiě)入內(nèi)存中的。

用OllyICE打開(kāi)游戲。跳到以下這段代碼可以看到:
00409870   > /8A11          mov     dl, byte ptr [ecx]        //從這里開(kāi)始寫(xiě)怪物名稱
00409872   . |88140F        mov     byte ptr [edi+ecx], dl  //名稱從[edi+ecx]開(kāi)始
00409875   . |41            inc     ecx
00409876   . |84D2          test    dl, dl
00409878   .^\75 F6         jnz     short 00409870      
0040987A   .  50            push    eax                             //寫(xiě)完了運(yùn)行到這里。
0040987B   ?  68 4C774C00   push    004C774C
00409880   .  56            push    esi
00409881   .  E8 02F10A00   call    004B8988

     游戲每出現(xiàn)一個(gè)怪都會(huì)把怪物名稱寫(xiě)入[edi+ecx]開(kāi)始的內(nèi)存中,顯然內(nèi)存地址[edi+ecx]不是一個(gè)固定的值。我們要把這個(gè)值復(fù)制一份固定到內(nèi)存中地址為004D3000開(kāi)始的一塊區(qū)域。
      這樣,周圍的怪物名稱的起始地址就固定在004D3000、004d3004、004D3008等等內(nèi)存中.知道怪物名稱的起始地址就能算出怪物的坐標(biāo)、血量等
地址。
      具體怎么做呢?
     我們看到游戲運(yùn)行到0040987A . 50  push   eax 這行時(shí),怪物名稱已經(jīng)寫(xiě)到內(nèi)存中,我們從這行開(kāi)始寫(xiě)入我們的代碼,原文件中緊接這行的
下面肯定沒(méi)有多余的空間來(lái)寫(xiě)我們的代碼,這就要求改寫(xiě)這行代碼,跳到空閑的地方把我們的代碼加進(jìn)去,運(yùn)行完我們的代碼后再跳回來(lái)。
     因此把原文件改為如下(對(duì)照上面):
00409870   > /8A11          mov     dl, byte ptr [ecx]
00409872   . |88140F        mov     byte ptr [edi+ecx], dl
00409875   . |41            inc     ecx
00409876   . |84D2          test    dl, dl
00409878   .^\75 F6         jnz     short 00409870
0040987A   .- E9 FB690C00   jmp     004D027A    //這里改為跳到004d027a
0040987F      90            nop
00409880   .  56            push    esi
00409881   .  E8 02F10A00   call    004B8988

就是把這行0040987A . 50  push   eax改為:
0040987A   .- E9 FB690C00   jmp  004D027A

從004d027A開(kāi)始寫(xiě)我們的代碼,原文件中004D027A也是一塊為00的空閑區(qū)域。
下面是我們添加進(jìn)去的代碼,原文件中是為00的空閑區(qū)域。

004D027A    50              push    eax     //先把一些用到的寄存器數(shù)據(jù)入棧,保護(hù)現(xiàn)場(chǎng)。
004D027B    53              push    ebx
004D027C    51              push    ecx
004D027D    52              push    edx
004D027E    31D2            xor     edx, edx
004D0280    81C7 A4F61200   add     edi, 12F6A4   //此處就是edi+ecx,ecx為常數(shù)12F6A4
004D0286    833F 00         cmp     dword ptr [edi], 0  //怪名是否為空
004D0289    74 63           je      short 004D02EE       //為空不是怪名,直接跳回去不寫(xiě)入
004D028B    33C9            xor     ecx, ecx
004D028D    8B0439          mov     eax, dword ptr [ecx+edi]     //怪名前4個(gè)字節(jié)放入eax中
004D0290    8B9C11 602A4D00 mov     ebx, dword ptr [ecx+edx+4D2A60] //需要打的怪名前4個(gè)字節(jié)

004D0297    83C1 04         add     ecx, 4
004D029A    3BC3            cmp     eax, ebx         //比較刷的怪名與需要打的怪名前4個(gè)字節(jié)
004D029C    75 07           jnz     short 004D02A5   //不相等,跳到與下一個(gè)需要打的怪名
004D029E    83F9 0C         cmp     ecx, 0C          //因?yàn)楣置L(zhǎng)占12個(gè)字節(jié),所以要比較三次
004D02A1  ^ 7C EA         jl      short 004D028D   //沒(méi)比較完返回繼續(xù)比較
004D02A3    EB 0D          jmp   short 004D02B2  //刷的怪名從需要打的怪名列表中找到了,跳到開(kāi)始寫(xiě)入.  004D02A5    83C2 0C         add     edx, 0C          //下一個(gè)需要打的怪名
004D02A8    81FA 08010000   cmp     edx, 108     //是否到了需要打的怪名列表盡頭
004D02AE  ^ 7C DB           jl      short 004D028B   //沒(méi)到繼續(xù)比較
004D02B0    EB 3C           jmp     short 004D02EE   //到了盡頭刷的這個(gè)怪不是需要打的,跳回不寫(xiě)入
004D02B2    33C9            xor     ecx, ecx               //從這開(kāi)始寫(xiě)入
004D02B4    8B81 00304D00   mov     eax, dword ptr [ecx+4D3000]   //把想寫(xiě)入的內(nèi)存地址放入eax
004D02BA    83C1 04         add     ecx, 4
004D02BD    81F9 00010000   cmp     ecx, 100       //是否寫(xiě)滿,能寫(xiě)64個(gè)怪,周圍一般同時(shí)沒(méi)有這么多
004D02C3    7F 12           jg      short 004D02D7    //寫(xiě)滿了清空這塊區(qū)域.
004D02C5    83F8 00         cmp     eax, 0               //比較內(nèi)存地址[ecx+4D3000],是否寫(xiě)了其他怪
004D02C8  ^ 75 EA           jnz     short 004D02B4  //寫(xiě)了,找下一個(gè)內(nèi)存地址
004D02CA    89B9 FC2F4D00   mov     dword ptr [ecx+4D2FFC], edi  //把怪名的起始內(nèi)存地址寫(xiě)入
004D02D0    E8 BB000000     call    004D0390        //寫(xiě)入一怪后,重新找最近怪,后面詳細(xì)講這個(gè)call
004D02D5    EB 17           jmp     short 004D02EE  //整理后返回
004D02D7    33C9            xor     ecx, ecx
004D02D9    33C0            xor     eax, eax
004D02DB    8981 00304D00   mov     dword ptr [ecx+4D3000], eax
004D02E1    83C1 04         add     ecx, 4
004D02E4    81F9 00010000   cmp     ecx, 100
004D02EA  ^ 7C EF           jl      short 004D02DB
004D02EC  ^ EB C4           jmp     short 004D02B2
004D02EE    5A              pop     edx           //各寄存器出棧,恢復(fù)現(xiàn)場(chǎng)
004D02EF    59              pop     ecx
004D02F0    5B              pop     ebx
004D02F1    58              pop     eax
004D02F2    50              push    eax                    //把原文件的代碼補(bǔ)上
004D02F3    68 4C774C00     push    004C774C    //這也是原文件的代碼補(bǔ)上
004D02F8  - E9 8395F3FF     jmp     00409880      //跳回到原文件插入跳轉(zhuǎn)指令的下一行

通過(guò)以上代碼,我們把玩家周圍出現(xiàn)的怪,而且是我們需要打的怪名的起始內(nèi)存地址放到了以內(nèi)存地址004D3000開(kāi)始的一段區(qū)域內(nèi)。


4、修改游戲原始文件,下次啟動(dòng)游戲時(shí)能運(yùn)行我們的代碼:
    用UltraEdit打開(kāi)原文件,把原文件地址為0000987A起數(shù)據(jù):
    50684C774C00 改為:E9FB690C0090
把下面數(shù)據(jù)復(fù)制到000d027A起的文件里.
50 53 51 52 31 D2 81 C7 A4 F6 12 00 83 3F 00 74  
63 33 C9 8B 04 39 8B 9C 11 60 2A 4D 00 83 C1 04  
3B C3 75 07 83 F9 0C 7C EA EB 0D 83 C2 0C 81 FA  
08 01 00 00 7C DB EB 3C 33 C9 8B 81 00 30 4D 00  
83 C1 04 81 F9 00 01 00 00 7F 12 83 F8 00 75 EA  
89 B9 FC 2F 4D 00 E8 BB 00 00 00 EB 17 33 C9 33  
C0 89 81 00 30 4D 00 83 C1 04 81 F9 00 01 00 00  
7C EF EB C4 5A 59 5B 58 50 68 4C 77 4C 00 E9 83  
95 F3 FF                      
上面的這些16進(jìn)制數(shù)據(jù)就是我們上面加入的代碼,修改好后存盤(pán)。
至此,游戲運(yùn)行時(shí),不需要其他工具,游戲本身就會(huì)把怪名的起始內(nèi)存地址固定到了以內(nèi)存地址004D3000開(kāi)始的一段區(qū)域內(nèi)。


二、怪物消失時(shí),怪名的起始內(nèi)存地址從004D3000開(kāi)始的一段區(qū)域內(nèi)清除
      上面只是把怪名的起始地址寫(xiě)到以內(nèi)存地址004D3000開(kāi)始的一段區(qū)域內(nèi)。當(dāng)怪物從玩家視眼中消失時(shí),我們必需把怪名的起始內(nèi)存地址從004D3000開(kāi)始的一段區(qū)域內(nèi)清除掉。
      1、怎么把我們先前寫(xiě)入的怪名起始地址清除掉呢?
       先看看游戲本身當(dāng)怪物消失時(shí)從哪里把怪物名稱從內(nèi)存中清除掉。
       同樣使用Cheat Engine,當(dāng)怪物消失時(shí)會(huì)有這么一句:
       0040F5A8  mov   ecx, 30
      游戲運(yùn)行到這句時(shí),怪名的內(nèi)存地址清空為00,寄存器edi正好是怪名的起始內(nèi)存地址。
       用OllyICE打開(kāi)游戲。跳到以下這段代碼可以看到:
0040F5A2   .  8DBD 48270600 lea     edi, dword ptr [ebp+62748]  //這里開(kāi)始清空
0040F5A8      B9 30000000   mov     ecx, 30   
0040F5AD   .  F3:AB         rep     stos dword ptr es:[edi]
因此把原文件改為如下(對(duì)照上面):
0040F5A2   .  8DBD 48270600 lea     edi, dword ptr [ebp+62748]
0040F5A8    - E9 540D0C00   jmp     004D0301  //修改這里,跳到004d0301
0040F5AD   .  F3:AB         rep     stos dword ptr es:[edi]

從004d0301開(kāi)始寫(xiě)我們的代碼,原文件中004d0301也是一塊為00的空閑區(qū)域。

004D0301    50              push    eax  //先把一些用到的寄存器數(shù)據(jù)入棧,保護(hù)現(xiàn)場(chǎng)。
004D0302    53              push    ebx
004D0303    51              push    ecx
004D0304    52              push    edx
004D0305    33C9            xor     ecx, ecx
004D0307    8B07            mov     eax, dword ptr [edi] //把[edi]內(nèi)數(shù)據(jù)放入eax中
004D0309    83F8 00         cmp     eax, 0                  //比較是否為怪名
004D030C    74 22           je      short 004D0330       //為零,不是怪名,不清除跳到返回
004D030E    8B99 00304D00  mov  ebx, dword ptr [ecx+4D3000] //把已寫(xiě)入的怪名起始地址放入ebx004D0314    83C1 04         add     ecx, 4
004D0317    81F9 00010000   cmp     ecx, 100       //比較是否全部比較完
004D031D    7F 11           jg      short 004D0330 //沒(méi)找到,說(shuō)明以前沒(méi)把這怪寫(xiě)入,也就不用清除
004D031F    3BDF            cmp     ebx, edi      //比較游戲剛消失的怪名地址,是否以前寫(xiě)入過(guò)這個(gè)地址
004D0321  ^ 75 EB           jnz     short 004D030E //不是這個(gè)再比較下一個(gè)
004D0323    33D2            xor     edx, edx   //剛消失的怪名地址在以前寫(xiě)入的區(qū)域內(nèi)找到了,開(kāi)始清除
004D0325    8991 FC2F4D00   mov     dword ptr [ecx+4D2FFC], edx  //以前寫(xiě)入的起始怪名地址清零
004D032B    E8 60000000     call    004D0390     //清除掉一怪后,重新找最近怪,后面詳細(xì)講這個(gè)call
004D0330    5A              pop     edx            //各寄存器出棧,恢復(fù)現(xiàn)場(chǎng)
004D0331    59              pop     ecx
004D0332    5B              pop     ebx
004D0333    58              pop     eax
004D0334    B9 30000000     mov     ecx, 30       //把原文件的代碼補(bǔ)上
004D0339  - E9 6FF2F3FF     jmp     0040F5AD    //跳回到原文件插入跳轉(zhuǎn)指令的下一行


通過(guò)以上代碼,我們把玩家周圍消失的怪,從內(nèi)存地址004D3000開(kāi)始的一段區(qū)域內(nèi)清除掉。

    2、修改游戲原始文件,下次啟動(dòng)游戲時(shí)能運(yùn)行我們的代碼:
    用UltraEdit打開(kāi)原文件,把原文件地址為0000F5A8起數(shù)據(jù):
     B930000000 改為:E9540D0C00
     把下面數(shù)據(jù)復(fù)制到000d0301起的文件里.
50 53 51 52 33 C9 8B 07 83 F8 00 74 22 8B 99 00  
30 4D 00 83 C1 04 81 F9 00 01 00 00 7F 11 3B DF  
75 EB 33 D2 89 91 FC 2F 4D 00 E8 60 00 00 00 5A  
59 5B 58 B9 30 00 00 00 E9 6F F2 F3 FF 90        


數(shù)據(jù)怎么來(lái)的,上面已經(jīng)說(shuō)了。改后存盤(pán)。
至此,把玩家周圍消失的怪,從內(nèi)存地址004D3000開(kāi)始的一段區(qū)域內(nèi)清除掉了。

三、當(dāng)怪物死亡時(shí),怪名的起始內(nèi)存地址從004D3000開(kāi)始的一段區(qū)域內(nèi)清除
      當(dāng)怪物死亡時(shí),游戲并不會(huì)立即把怪名內(nèi)存地址清零,要等怪物尸體消失時(shí)才清零。我們必需立即把怪名的起始內(nèi)存地址從004D3000開(kāi)始的一段區(qū)域內(nèi)清除掉。
     1、同樣,我們用Cheat Engine找到怪物血量減少時(shí)的匯編代碼:
      00419BBA  word ptr [esi+626F4], ax
      ax中存的就是怪物的血量。
用OllyICE打開(kāi)游戲。跳到以下這段代碼可以看到:
00419BBA   .  66:8986 F4260>mov     word ptr [esi+626F4], ax //esi+626f4為血量地址
00419BC1   .  66:8B4F 08    mov     cx, word ptr [edi+8]
00419BC5   .  66:898E C2010>mov     word ptr [esi+1C2], cx
00419BCC   .  E8 CFF10900   call    004B8DA0
因此把原文件改為如下(對(duì)照上面):
00419BBA   .  66:8986 F4260>mov     word ptr [esi+626F4], ax
00419BC1    - E9 CB680B00   jmp     004D0491   //修改這里,跳到004d0491
00419BC6      90            nop
00419BC7      90            nop
00419BC8      90            nop
00419BC9      90            nop
00419BCA      90            nop
00419BCB      90            nop
00419BCC   .  E8 CFF10900   call    004B8DA0

從004d0491開(kāi)始寫(xiě)我們的代碼,原文件中004d0491也是一塊為00的空閑區(qū)域。
下面是我們添加進(jìn)去的代碼,原文件中是為00的空閑區(qū)域。


004D0491    50              push    eax  //先把一些用到的寄存器數(shù)據(jù)入棧,保護(hù)現(xiàn)場(chǎng)。
004D0492    53              push    ebx
004D0493    51              push    ecx
004D0494    52              push    edx
004D0495    56              push    esi
004D0496    33C9            xor     ecx, ecx
004D0498    90              nop
004D0499    90              nop
004D049A    66:83F8 00      cmp     ax, 0    //比較血量是否為0
004D049E    7F 28           jg      short 004D04C8   //大于0,不用清除,直接到返回
004D04A0    81C6 48270600   add     esi, 62748   //esi+62748為怪名的起始內(nèi)存地址
004D04A6    8B99 00304D00  mov   ebx, dword ptr [ecx+4D3000] //把以前寫(xiě)入的怪名起始地址放入ebx
004D04AC    83C1 04         add     ecx, 4
004D04AF    81F9 00010000   cmp     ecx, 100
004D04B5    7F 11           jg      short 004D04C8
004D04B7    3BDE            cmp     ebx, esi   //比較游戲剛死亡的怪名地址,是否以前寫(xiě)入過(guò)這個(gè)地址
004D04B9  ^ 75 EB           jnz     short 004D04A6  //不是這個(gè)再比較下一個(gè)
004D04BB    33D2            xor     edx, edx  //剛死亡的怪名地址在以前寫(xiě)入的區(qū)域內(nèi)找到了,開(kāi)始清除
004D04BD    8991 FC2F4D00   mov     dword ptr [ecx+4D2FFC], edx //清零
004D04C3    E8 C8FEFFFF     call    004D0390 //清除掉一怪后,重新找最近怪,后面詳細(xì)講這個(gè)call
004D04C8    5E              pop     esi      //各寄存器出棧,恢復(fù)現(xiàn)場(chǎng)
004D04C9    5A              pop     edx
004D04CA    59              pop     ecx
004D04CB    5B              pop     ebx
004D04CC    58              pop     eax
004D04CD    66:8B4F 08      mov     cx, word ptr [edi+8]    //把原文件的代碼補(bǔ)上
004D04D1    66:898E C201000>mov     word ptr [esi+1C2], cx  //這也是原文件的代碼補(bǔ)上
004D04D8  - E9 EF96F4FF     jmp     00419BCC    //跳回到原文件插入跳轉(zhuǎn)指令的下一行


通過(guò)以上代碼,把玩家周圍死亡的怪,立即從內(nèi)存地址004D3000開(kāi)始的一段區(qū)域內(nèi)清除掉。


 2、修改游戲原始文件,下次啟動(dòng)游戲時(shí)能運(yùn)行我們的代碼:
       用UltraEdit打開(kāi)原文件,把原文件地址為00019BC1起數(shù)據(jù):
       668B4F0866898EC2010改為:E9CB680B00909090909090
       把下面數(shù)據(jù)復(fù)制到000d0491起的文件里.
50 53 51 52 56 33 C9 90 90 66 83 F8 00 7F 28 81  
C6 48 27 06 00 8B 99 00 30 4D 00 83 C1 04 81 F9  
00 01 00 00 7F 11 3B DE 75 EB 33 D2 89 91 FC 2F  
4D 00 E8 C8 FE FF FF 5E 5A 59 5B 58 66 8B 4F 08  
66 89 8E C2 01 00 00 E9 EF 96 F4 FF              
同樣,數(shù)據(jù)由上面代碼段而來(lái),改好后存盤(pán)。
至些,把玩家周圍死亡的怪,立即從內(nèi)存地址004D3000開(kāi)始的一段區(qū)域內(nèi)清除掉。


四、把離玩家最近的怪物參數(shù)固定在內(nèi)存中的某處
       通過(guò)以上三大步驟,我們已經(jīng)實(shí)現(xiàn)了把玩家周圍的,而且是需要打的活的怪物名稱起始內(nèi)存地址集中寫(xiě)入到了從004D3000到004D3100這小段區(qū)域內(nèi),在這小段區(qū)域內(nèi)每組不為零的四個(gè)字節(jié)就代表了一個(gè)怪物名的起始內(nèi)存地址,沒(méi)有其他不相關(guān)的數(shù)據(jù)在這一小段。如果用按鍵精靈,已經(jīng)可以通過(guò)讀這一小段內(nèi)存數(shù)據(jù)可以實(shí)現(xiàn)讀內(nèi)存打怪了。為了減少按鍵精靈讀內(nèi)存次數(shù),和過(guò)多的轉(zhuǎn)換運(yùn)算,我們直接把最近怪的有關(guān)參數(shù)固定下來(lái)。

      這就到了前面多次提到的call  004D0390 這句。
      1、先分析游戲,用Cheat Engine容易找到:
內(nèi)存中怪名起始內(nèi)存地址與其他地址之間的關(guān)系:
以下為16進(jìn)制數(shù):
怪名起始內(nèi)存地址-54=怪血量地址(占兩個(gè)字節(jié))
怪名起始內(nèi)存地址-62570=怪X坐標(biāo)地址(占四個(gè)字節(jié))
怪名起始內(nèi)存地址-625C0=怪y坐標(biāo)地址(占四個(gè)字節(jié))
人物參數(shù)內(nèi)存地址(此游戲竟然是固定的):
人名稱內(nèi)存地址=008AFAF8
人血量?jī)?nèi)存地址=008AFAA4
人氣量?jī)?nèi)存地址=008AFBD8
人X坐標(biāo)內(nèi)存地址=008AFEAC
人y坐標(biāo)內(nèi)存地址=008AFEB0
      2、人物坐標(biāo),怪物坐標(biāo)與屏幕坐標(biāo)的關(guān)系
游戲中人物在屏幕正中心,離上下左右各8步,超過(guò)8步在屏幕外,鼠標(biāo)不能點(diǎn)擊。游戲坐標(biāo)差不能超過(guò)8。
窗口模式下鼠標(biāo)能點(diǎn)到這個(gè)怪的極限區(qū)域(坐標(biāo)為窗口坐標(biāo))。
正上頂點(diǎn):(393,0)與(408,21)組成的區(qū)域。
正下頂點(diǎn):(393,512)與(408,533)組成的區(qū)域。
正左頂點(diǎn):(10,256)與(24,276)組成的區(qū)域。
正右頂點(diǎn):(778,256)與(792,276)組成的區(qū)域。
假設(shè)人物坐標(biāo)(Rx,Ry),怪坐標(biāo)(Gx,Gy),鼠標(biāo)點(diǎn)擊坐標(biāo)(X,Y)
其中人物坐標(biāo),怪坐標(biāo)為游戲里的坐標(biāo),鼠標(biāo)點(diǎn)擊坐標(biāo)為窗口坐標(biāo)。
通過(guò)以上分析則有鼠標(biāo)點(diǎn)擊能點(diǎn)到怪的窗口坐標(biāo)X,Y為:
X=(Gx-(Rx-8))*48+17 (后面加值范圍10~24,最好取中間值+17)
y=(Gy-(Ry-8))*32+2   (后面加值范圍0~21,因可能點(diǎn)到左下角頭像選+2)


   3、有了以上理論就可以寫(xiě)call    004D0390的代碼了
       同樣從004D0390開(kāi)始寫(xiě)我們的代碼,原文件中004D0390也是一塊為00的空閑區(qū)域。
       把最近怪物名的起始內(nèi)存地址固定在[004D2FE0]中,X坐標(biāo)固定在[004D2FF0]中,Y坐標(biāo)固定在[004D2FF4]中,怪血量固定在[004D2FF8]中。

004D0390
    50              push    eax    //先把一些用到的寄存器數(shù)據(jù)入棧,保護(hù)現(xiàn)場(chǎng)。
004D0391    53              push    ebx
004D0392    51              push    ecx
004D0393    52              push    edx
004D0394    56              push    esi
004D0395    57              push    edi
004D0396    33C0            xor     eax, eax
004D0398    A3 E02F4D00     mov     dword ptr [4D2FE0], eax //初始化內(nèi)存
004D039D    A3 F02F4D00     mov     dword ptr [4D2FF0], eax
004D03A2    A3 F42F4D00     mov     dword ptr [4D2FF4], eax
004D03A7    05 FFFF0000     add     eax, 0FFFF
004D03AC    A3 E42F4D00     mov     dword ptr [4D2FE4], eax
004D03B1    33C9            xor     ecx, ecx
004D03B3    8BB9 00304D00   mov     edi, dword ptr [ecx+4D3000] //把怪物起始內(nèi)存地址放入edi
004D03B9    83C1 04         add     ecx, 4
004D03BC    81F9 00010000   cmp     ecx, 100
004D03C2    0F8F AA000000   jg      004D0472    //全部比較完后返回
004D03C8    83FF 00         cmp     edi, 0      
004D03CB  ^ 74 E6           je      short 004D03B3 //為零找下一個(gè)
004D03CD    8B87 90DAF9FF   mov     eax, dword ptr [edi+FFF9DA90] //怪Gx坐標(biāo)放入eax
004D03D3    8B1D ACFE8A00   mov     ebx, dword ptr [8AFEAC]         //人Rx坐標(biāo)放入ebx
004D03D9    3BC3            cmp     eax, ebx
004D03DB    7F 01           jg      short 004D03DE
004D03DD    93              xchg    eax, ebx
004D03DE    2BC3            sub     eax, ebx             //Gx與Rx之差放入eax
004D03E0    83F8 08         cmp     eax, 8              //兩者差是否大于8
004D03E3  ^ 7F CE           jg      short 004D03B3      //大于8在屏幕外,直接找下一個(gè)怪
004D03E5    F7E0            mul     eax                  //橫坐標(biāo)差平方運(yùn)算
004D03E7    8BF0            mov     esi, eax            //橫坐標(biāo)差的平方放入esi中
004D03E9    8B87 40DAF9FF   mov     eax, dword ptr [edi+FFF9DA40] //怪Gy坐標(biāo)放入eax
004D03EF    8B1D B0FE8A00   mov     ebx, dword ptr [8AFEB0]           //人Ry坐標(biāo)放入ebx
004D03F5    3BC3            cmp     eax, ebx
004D03F7    7F 01           jg      short 004D03FA
004D03F9    93              xchg    eax, ebx
004D03FA    2BC3            sub     eax, ebx            //Gy與Ry之差放入eax
004D03FC    83F8 08         cmp     eax, 8             //兩者差是否大于8
004D03FF  ^ 7F B2           jg      short 004D03B3     //大于8在屏幕外,直接找下一個(gè)怪
004D0401    F7E0            mul     eax                //樅坐標(biāo)差平方運(yùn)算
004D0403    03F0            add     esi, eax           //橫、樅坐標(biāo)之差的平方的和放入esi中
004D0405    3B35 E42F4D00  cmp  esi, dword ptr [4D2FE4] //這個(gè)距離的平方與前次保存的距離的平方
004D040B  ^ 7D A6         jge   short 004D03B3   //大于或等于說(shuō)明這個(gè)怪離玩家距離更遠(yuǎn),找下一個(gè)怪
004D040D    893D E02F4D00   mov  dword ptr [4D2FE0], edi //更近怪名的起始地址固定在[4D2FE0]中
004D0413    8B47 AC         mov     eax, dword ptr [edi-54]
004D0416    66:A3 F82F4D00  mov     word ptr [4D2FF8], ax   //血量固定在[4D2FF8]中
004D041C    8935 E42F4D00   mov     dword ptr [4D2FE4], esi //距離平方放在[4D2FE4]中
004D0422    8B87 90DAF9FF   mov     eax, dword ptr [edi+FFF9DA90] //更近怪Gx坐標(biāo)放入eax
004D0428    8B1D ACFE8A00   mov     ebx, dword ptr [8AFEAC]         //人Rx坐標(biāo)放入ebx
004D0431    2BC3            sub     eax, ebx
004D0433    BB 30000000     mov     ebx, 30
004D0438    F7E3            mul     ebx
004D043A    83C0 17         add     eax, 17
004D043D    A3 F02F4D00  mov  dword ptr [4D2FF0], eax //換算后,鼠標(biāo)點(diǎn)擊X坐標(biāo)放入[4D2FF0]中
004D0442    8B87 40DAF9FF   mov     eax, dword ptr [edi+FFF9DA40]
004D0448    8B1D B0FE8A00   mov     ebx, dword ptr [8AFEB0]
004D044E    83C0 08         add     eax, 8
004D0451    2BC3            sub     eax, ebx
004D0453    BB 20000000     mov     ebx, 20
004D0458    F7E3            mul     ebx
004D045A    83C0 02         add     eax, 2
004D045D    A3 F42F4D00   mov dword ptr [4D2FF4], eax  //換算后,鼠標(biāo)點(diǎn)擊Y坐標(biāo)放入[4D2FF4]中
004D0462    83FE 02         cmp     esi, 2                //距離平方是否小于或等于2
004D0465    7E 0B           jle     short 004D0472     //怪已經(jīng)緊挨著玩家了,不用再找下一個(gè)怪了
004D0467  ^ E9 47FFFFFF     jmp     004D03B3      //這個(gè)怪離玩家還有距離,可能還有更近的
004D046C    90              nop
004D046D    90              nop
004D046E    90              nop
004D046F    90              nop
004D0470    90              nop
004D0471    90              nop
004D0472    5F              pop     edi    //各寄存器出棧,恢復(fù)現(xiàn)場(chǎng)
004D0473    5E              pop     esi
004D0474    5A              pop     edx
004D0475    59              pop     ecx
004D0476    5B              pop     ebx
004D0477    58              pop     eax
004D0478    C3              retn             //返回調(diào)用call的下一行


游戲運(yùn)行過(guò)程中,只要運(yùn)行以上這段代碼,就會(huì)把最近怪的窗口X坐標(biāo)固定在[004D2FF0]中,窗口Y坐標(biāo)固定在[004D2FF4]中,血量固定在[004D2FF8]中。

     4、用UltraEdit打開(kāi)原文件,把下面數(shù)據(jù)復(fù)制到000d0390起的文件里.
50 53 51 52 56 57 33 C0 A3 E0 2F 4D 00 A3 F0 2F  
4D 00 A3 F4 2F 4D 00 05 FF FF 00 00 A3 E4 2F 4D  
00 33 C9 8B B9 00 30 4D 00 83 C1 04 81 F9 00 01  
00 00 0F 8F AA 00 00 00 83 FF 00 74 E6 8B 87 90  
DA F9 FF 8B 1D AC FE 8A 00 3B C3 7F 01 93 2B C3  
83 F8 08 7F CE F7 E0 8B F0 8B 87 40 DA F9 FF 8B  
1D B0 FE 8A 00 3B C3 7F 01 93 2B C3 83 F8 08 7F  
B2 F7 E0 03 F0 3B 35 E4 2F 4D 00 7D A6 89 3D E0  
2F 4D 00 8B 47 AC 66 A3 F8 2F 4D 00 89 35 E4 2F  
4D 00 8B 87 90 DA F9 FF 8B 1D AC FE 8A 00 83 C0  
08 2B C3 BB 30 00 00 00 F7 E3 83 C0 17 A3 F0 2F  
4D 00 8B 87 40 DA F9 FF 8B 1D B0 FE 8A 00 83 C0  
08 2B C3 BB 20 00 00 00 F7 E3 83 C0 02 A3 F4 2F  
4D 00 83 FE 02 7E 0B E9 47 FF FF FF 90 90 90 90  
90 90 5F 5E 5A 59 5B 58 C3                       


改好后存盤(pán),這樣運(yùn)行游戲時(shí),游戲本身會(huì)把最近怪的窗口X坐標(biāo)固定在[004D2FF0]中,窗口Y坐標(biāo)固定在[004D2FF4]中,血量固定在[004D2FF8]中。

五、人物移動(dòng)時(shí),及時(shí)更新最近怪物參數(shù)
      上面三個(gè)大步驟,刷出一個(gè)怪,消失一個(gè)怪,死亡一個(gè)怪時(shí),都會(huì)運(yùn)行call  004D0390,也就是都會(huì)馬上更新一下內(nèi)存地址004D2FE0、004D2FF0、04D2FF4、004D2FF8的數(shù)據(jù)。人物移動(dòng)時(shí)也必需及時(shí)更新最近怪物參數(shù)。
      1、同樣,我們用Cheat Engine找到人物移動(dòng)時(shí)的匯編代碼:
       人物每移動(dòng)一步都會(huì)經(jīng)過(guò)以下代碼:
        00432A78   pop     edi
       用OllyICE打開(kāi)游戲。跳到以下這段代碼可以看到:
00432A78  |.  5F            pop     edi
00432A79  |.  5E            pop     esi
00432A7A  |.  5B            pop     ebx
00432A7B  |.  8BE5          mov     esp, ebp
00432A7D  |.  5D            pop     ebp
00432A7E  |.  C2 0400       retn    4
因此把原文件改為如下(對(duì)照上面):
00432A78    - E9 D4D80900   jmp     004D0351 //這里改為跳到004d0351
00432A7D  |.  5D            pop     ebp
00432A7E  |.  C2 0400       retn    4

從004D0351開(kāi)始寫(xiě)我們的代碼,原文件中004D0351也是一塊為00的空閑區(qū)域。
下面是我們添加進(jìn)去的代碼,原文件中是為00的空閑區(qū)域。

004D0351    E8 3A000000     call    004D0390 //就是為了補(bǔ)進(jìn)這句
004D0356    5F              pop     edi                 //把原文件的代碼補(bǔ)上
004D0357    5E              pop     esi
004D0358    5B              pop     ebx
004D0359    8BE5            mov     esp, ebp
004D035B  - E9 1D27F6FF     jmp     00432A7D //跳回到原文件插入跳轉(zhuǎn)指令的下一行


       2、修改游戲原始文件,下次啟動(dòng)游戲時(shí)能運(yùn)行我們的代碼:
        用UltraEdit打開(kāi)原文件,把原文件地址為00032a78起數(shù)據(jù):
        5F5E5B8BE5 改為:E9D4D80900
        把下面數(shù)據(jù)復(fù)制到000d0351起的文件里.
E8 3A 00 00 00 5F 5E 5B 8B E5 E9 1D 27 F6 FF


      到此為止,我們終于把最近怪物的有用參數(shù)固定在004D2FE0、004D2FF0、04D2FF4、004D2FF8四個(gè)內(nèi)存地址中,當(dāng)然如果還想加入最近怪物的其他參數(shù),如怪物是否被其他玩家攻擊,是否為小BOSS等等只要修改CALL 004D0390這段代碼就行。
     把以上所有要改的數(shù)據(jù)改好存盤(pán)后,游戲原文件大小沒(méi)有改變,但已經(jīng)成功的把我們的代碼注入進(jìn)去了,啟動(dòng)游戲。查看游戲內(nèi)存數(shù)據(jù),可以看到內(nèi)存004D2FE0、004D2FF0、04D2FF4、004D2FF8,正是我們需要的離玩家最近怪物的名稱起址、窗口X坐標(biāo)、窗口Y坐標(biāo)、血量。隨著游戲的進(jìn)行,這幾個(gè)內(nèi)存地址都會(huì)及時(shí)正確的更新著。




六、寫(xiě)個(gè)簡(jiǎn)單的內(nèi)存找怪打怪腳本
前期工作做好后,編寫(xiě)內(nèi)存找怪打怪按鍵精靈腳本就簡(jiǎn)單多了。
下面是簡(jiǎn)單的腳本:
Dim handle,Rx,Ry,Gx,Gy,G1,G2,X,Y     //其中G1,G2為怪名的起始內(nèi)存地址
Plugin handle=Window.MousePoint()
Rem 找怪
Plugin G1=Memory.Read32Bit(handle,&h004d2fe0)
Plugin X=Memory.Read32Bit(handle,&h004d2ff0)
Plugin Y=Memory.Read32Bit(handle,&h004d2ff4)
Plugin BGKM4.MMove(handle,X,Y)
Delay 100
Plugin BGKM4.LClick(handle,X,Y)
Rem 判斷
Plugin G2=Memory.Read32Bit(handle,&h004d2fe0)
If G2=G1
Delay 100
Goto 判斷
EndIf
Delay 100
Goto 找怪

連怪血量的內(nèi)存地址都不需要用上,因?yàn)楣置钠鹗嫉刂芬彩羌皶r(shí)更新的。

七、其他
      以上腳本只是簡(jiǎn)單的砍怪,沒(méi)有加入使用技能,沒(méi)有加入補(bǔ)血補(bǔ)氣,也沒(méi)有加入撿取物品。游戲中遇到特殊情況也沒(méi)做相應(yīng)處理。
      關(guān)于使用技能,如可以通過(guò)統(tǒng)計(jì)緊挨玩家怪物的數(shù)量使用群攻技能。
      知道人物的血、氣內(nèi)存地址,補(bǔ)血補(bǔ)氣那是很容易實(shí)現(xiàn)的了。
      關(guān)于游戲地面物品內(nèi)存中的查找,原理其實(shí)同找怪一樣,也可預(yù)先做一個(gè)需要撿取的物品清單,然后,把地面出現(xiàn)的物品與清單相比較,如果是要撿的,可以臨時(shí)把坐標(biāo)放入一固定內(nèi)存區(qū)域內(nèi),跟據(jù)判定物品離玩家距離的遠(yuǎn)近和周圍怪物的多少,決定恰當(dāng)?shù)臅r(shí)候去撿起。
     游戲中還有些關(guān)鍵的元素,如打怪路線,撿到極品自動(dòng)存?zhèn)}庫(kù),自動(dòng)買(mǎi)藥買(mǎi)藍(lán)都可以通過(guò)讀內(nèi)存實(shí)現(xiàn)。
    不說(shuō)了,再說(shuō)又是長(zhǎng)篇大論。
posted on 2007-07-21 01:39 聶文龍 閱讀(8206) 評(píng)論(5)  編輯 收藏 引用 所屬分類: c++

FeedBack:
# re: 內(nèi)存中找怪物之代碼注入篇[未登錄](méi) 2008-02-01 14:47 sea
及時(shí)雨呀,頂頂頂  回復(fù)  更多評(píng)論
  
# re: 內(nèi)存中找怪物之代碼注入篇 2008-06-11 06:52 
大哥 能告訴一下怪物的內(nèi)存地址怎么找么?  回復(fù)  更多評(píng)論
  
# re: 內(nèi)存中找怪物之代碼注入篇 2008-06-11 06:59 
我想做個(gè)怪物提示的功能~~想知道怪物的內(nèi)存地址怎么找 您能告訴我么?  回復(fù)  更多評(píng)論
  
# re: 內(nèi)存中找怪物之代碼注入篇 2008-08-08 09:36 小弟
大哥,看了你的文章,知道你很了得,,我有個(gè)想法,不知道你能否和我談?wù)劊业碾娫捠?3961465149,,,有個(gè)項(xiàng)目和你合作一下,,,是合作,希望能聽(tīng)到你的回音。謝謝!  回復(fù)  更多評(píng)論
  
# re: 內(nèi)存中找怪物之代碼注入篇 2009-07-01 12:28 風(fēng)格
# re: 內(nèi)存中找怪物之代碼注入篇 2008-08-08 09:36 小弟
大哥,看了你的文章,知道你很了得,,我有個(gè)想法,不知道你能否和我談?wù)劊业碾?


刪除好嗎,把我手機(jī)刪除好嗎  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久国产精品网站| 国产精品免费福利| 亚洲一区日韩| 欧美大学生性色视频| aa级大片欧美| 伊人婷婷久久| 国产精品日韩久久久| 欧美日韩中国免费专区在线看| 夜夜嗨av一区二区三区网站四季av| 欧美成在线观看| 久久九九久久九九| 欧美影院视频| 欧美亚洲免费| 亚洲私拍自拍| 亚洲一区在线播放| 欧美制服丝袜| 欧美激情一区二区三级高清视频| 亚洲综合第一页| 欧美一区二区三区免费看| 欧美成人精品h版在线观看| 久久综合久久88| 国产精品一区二区在线观看| 国产精品乱码久久久久久| 国产精品第十页| 国产亚洲精品7777| 国产精品视屏| 欧美成人性网| 国产欧美一区二区在线观看| 激情懂色av一区av二区av| 一本色道久久综合亚洲精品小说| 欧美在线啊v一区| 亚洲欧洲一区二区在线观看 | 免费看亚洲片| 国产亚洲精品aa| 欧美在线看片a免费观看| 欧美护士18xxxxhd| 久久国内精品自在自线400部| 欧美精品尤物在线| 亚洲最新中文字幕| 亚洲精品在线免费观看视频| 老司机午夜免费精品视频| 国产在线视频欧美| 午夜亚洲性色福利视频| 一区二区三区免费在线观看| 欧美日韩国产天堂| 午夜国产欧美理论在线播放| 亚洲经典在线| 欧美色道久久88综合亚洲精品| 日韩午夜激情电影| 99在线视频精品| 国产午夜精品全部视频在线播放| 欧美在线在线| 国产精品国产一区二区| 亚洲经典三级| 久久青草福利网站| 亚洲一区视频| 欧美一区深夜视频| 免费成人性网站| 国产精品亚洲精品| 亚洲免费激情| 亚洲人成在线观看| 久久亚洲精品视频| 牛牛影视久久网| 国产日韩av一区二区| 99国产精品私拍| 伊人久久婷婷| 久久艳片www.17c.com| 午夜精品久久久久影视| 亚洲第一中文字幕在线观看| 久久最新视频| 欧美成人69av| 日韩午夜电影av| 国产色综合久久| 美乳少妇欧美精品| 亚洲精品国产日韩| 亚洲网站在线播放| 国产精品蜜臀在线观看| 久久久之久亚州精品露出| 久久成人国产精品| 好看不卡的中文字幕| 国产一区二区视频在线观看| 国产一区二区三区高清| 樱花yy私人影院亚洲| 亚洲国产小视频在线观看| 久久精品夜色噜噜亚洲a∨| 免播放器亚洲| 欧美国产一区二区在线观看| 一本一本久久| 国产亚洲免费的视频看| 美女福利精品视频| 欧美日韩1区2区3区| 最新亚洲一区| 久久午夜羞羞影院免费观看| 亚洲综合精品自拍| 另类av导航| 亚洲欧美怡红院| 国产精品永久在线| 国产精品久久久久久久久久尿| 久久综合色影院| 麻豆av一区二区三区久久| 亚洲国产欧美一区| 一本色道婷婷久久欧美| 亚洲精品影院| 日韩视频免费大全中文字幕| 久久av一区| 欧美va亚洲va香蕉在线| 欧美精品麻豆| 国产精品劲爆视频| 国产亚洲欧美一区| 在线观看91久久久久久| 一区二区三区免费网站| 最新国产成人av网站网址麻豆| 久久中文在线| 国产偷自视频区视频一区二区| 亚洲电影毛片| 久久久免费av| 久久成人免费网| 蜜桃av一区二区三区| 欧美巨乳在线观看| 久久精品亚洲国产奇米99| 久久色在线播放| 国产一区二区三区久久 | 欧美制服丝袜第一页| 亚洲深夜福利视频| 亚洲一区久久久| 国产精品一级二级三级| 久久亚洲精选| 欧美精品日韩一区| 亚洲欧美综合v| 欧美激情视频一区二区三区在线播放 | 欧美精品在欧美一区二区少妇| 久久亚洲国产成人| 亚洲欧美电影院| 国产九色精品成人porny| 久久成人免费日本黄色| av成人天堂| 亚洲欧美综合| 国产精品99久久久久久有的能看| 蜜臀久久99精品久久久久久9 | 久久久久久尹人网香蕉| 亚洲美女啪啪| 久久综合一区| 亚洲免费一在线| 亚洲一区三区电影在线观看| 一区二区冒白浆视频| 亚洲午夜电影在线观看| 亚洲国产精品99久久久久久久久| 欧美日产在线观看| 蜜桃av一区二区三区| 欧美成人在线免费观看| 久久久国产成人精品| 久热精品视频在线观看一区| 欧美一级网站| 欧美一区二区免费| 久久精品国产久精国产爱| 亚洲精品国产系列| 国产人成精品一区二区三| 久久免费视频网| 久久天堂av综合合色| 羞羞答答国产精品www一本 | 狠狠入ady亚洲精品经典电影| 欧美一级免费视频| 免费在线成人| 久久精品国产精品亚洲综合| 性视频1819p久久| 欧美亚洲一级片| 久久九九国产精品怡红院| 亚洲精品乱码久久久久久日本蜜臀| 亚洲女与黑人做爰| 亚洲第一中文字幕| 久久精品在线观看| 日韩视频一区二区三区在线播放 | 亚洲丰满少妇videoshd| 裸体丰满少妇做受久久99精品| 亚洲欧洲日夜超级视频| 一个色综合av| 欧美日韩伦理在线| 韩日欧美一区| 极品少妇一区二区三区| 香蕉亚洲视频| 你懂的亚洲视频| 午夜精品久久久久久久久久久久久 | 一本色道综合亚洲| 在线免费一区三区| 99精品免费| 欧美日韩免费| 欧美精品在线一区二区三区| 亚洲盗摄视频| 国内成人精品视频| 久久精品在线免费观看| 日韩一二在线观看| 久久久亚洲成人| 亚洲激情一区| 性欧美video另类hd性玩具| 久久久综合视频| 亚洲综合第一| 国产热re99久久6国产精品| 99在线|亚洲一区二区| 欧美国产日韩一二三区| 久久久www成人免费毛片麻豆|