欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
豪杰V8添加快捷鍵
標 題: 豪杰V8添加快捷鍵
作 者: nbw
時(shí) 間: 2004-06-05,21:22:21
鏈 接: http://bbs.pediy.com/showthread.php?t=1695

上次哪位讓我做給豪杰添加快捷鍵的來(lái)著(zhù),今天發(fā)上來(lái),請指正。                           
                          豪杰V8添加快捷鍵

作者:nbw[NE365]

www.vxer.com

nboy.cnwlt.com

Email:  
                                  |

:0041067C 6A01                    push 00000001

:0041067E 51                      push ecx

:0041067F E83CF5FFFF              call 0040FBC0

:00410684 83C410                  add esp, 00000010             ;到了這里,窗口句柄被存放到:43C9F4 。所以從這里便可以獲得句柄。

:00410687 6870D24300              push 0043D270

:0041068C E8839C0100              call 0042A314

:00410691 8B0D70D24300            mov ecx, dword ptr [0043D270]



尋找剩余空間:



用我寫(xiě)的剩余空間查看器分析,部分結果如下:

名稱(chēng)     RVA     OA        尺寸D   可寫(xiě)否

   .text  00030000  00030000      0      可



但是文件地址:30000上面有全零空間。從2FE10 ------ 2FFFF 全為可用空間。且有可讀屬性。



轉華容道(跳轉到剩余空間):



:0041067F E83CF5FFFF              call 0040FBC0

:00410684 83C410                  add esp, 00000010

:00410687 6870D24300              push 0043D270



修改為:

:0041067F E83CF5FFFF              call 0040FBC0

:00410684                            jmp  42FE20

                            nop  nop  nop

:0041068C E8839C0100              call 0042A314

少了:00410684   add esp, 00000010  和  :00410687    push 0043D270  記下來(lái),以后補上。



添加自己的代碼:



從42FE20開(kāi)始:

初始化鉤子函數

:42FE20         add  esp,10                          ;修補上面占用的代碼

              push       43D270



              pushad

              push       000

              push       [43C9F4]

              call  dword     [4AD228]              ;設置鉤子函數

              popad

@@:              jmp  10689                   ;返回



       到了這里,鉤子便被安裝上了,以后在使用豪杰時(shí)點(diǎn)任何一個(gè)按鍵,就會(huì )被我們的鉤子函數攔截。下面我們就要在鉤子函數中實(shí)現快進(jìn)功能。首先看看我最開(kāi)始寫(xiě)的鉤子函數:

HookProc       proc _dwCode,_wParam,_lParam

              local @szKeyState[256]:byte



              invoke     CallNextHookEx,hHook,_dwCode,_wParam,_lParam

              invoke     GetKeyboardState,addr @szKeyState

              invoke     GetKeyState,VK_SHIFT

              mov @szKeyState + VK_SHIFT,al

              mov ecx,_lParam           ;_lParam的高16位可以標志每個(gè)按鍵。該參數定義可以參考MSDN

              shr   ecx,16     



              and  ecx,0fffh

              cmp ecx,014dh             ;如果是   014D則說(shuō)明是右方向鍵

              jnz   @F

              

              call  _forward        ;這里就可以填寫(xiě)用來(lái)快進(jìn)的函數或者代碼



       @@:       xor  eax,eax

              ret



HookProc       endp



       上面的函數很簡(jiǎn)單,首先獲得鍵盤(pán)狀態(tài),保存在ecx中,處理ecx,如果為014dh,則說(shuō)明是右方向鍵。說(shuō)實(shí)話(huà)這個(gè)014d是我自己實(shí)驗得來(lái)的,或許不準確。代碼中的call _forward 是用來(lái)快進(jìn)的函數。毫無(wú)疑問(wèn)這個(gè)函數不好編寫(xiě),事實(shí)上我也不會(huì )自己寫(xiě)。

       這個(gè)用來(lái)快進(jìn)的函數很好尋找。因為程序的控制菜單中有快進(jìn)項,所以考慮處理這個(gè)菜單的地方。利用我以前的文章講過(guò)的方法,很容易可以找到處理菜單消息的函數是::00410E48 E8E30A0000    call 00411930 。打開(kāi)一部電影,在菜單中選快進(jìn)項,會(huì )被中斷在這里。進(jìn)入這個(gè)函數,單步運行,注意播放屏幕的變化,當走過(guò):004127BA FF5218     call [edx+18] 時(shí)屏幕發(fā)生很大變動(dòng),就是向前快進(jìn)了很多。這個(gè)函數就是傳說(shuō)中的快進(jìn)函數。

       你或許會(huì )說(shuō)直接把上面的call  _forward 改成call [edx+18] 就可以,當然首先需要確定edx值,如果有需要的話(huà)再事先傳幾個(gè)參數就可以。但事實(shí)往往和人的想法不一樣。因為我沒(méi)有找到那幾個(gè)函數的正確的參數,因此也不會(huì )正確調用call [edx+18] 。不過(guò)不用怕,可以把call  _forward 改成跳轉,跳到那個(gè)函數的地方,也就是jmp  004127BA  (call  [edx+18]所處的位置)。按照正常理解,這樣的跳轉肯定會(huì )出問(wèn)題的,但下面我講講所謂的“模擬跳轉”。

       沒(méi)有人提出來(lái)所謂的“模擬跳轉”概念,但肯定有人用過(guò)。處理菜單的函數是call 00411930,這個(gè)函數的入口如下:



:00411930 81EC24090000            sub esp, 00000924                    ;這里是入口

:00411936 A1EC3C4300              mov eax, dword ptr [00433CEC]

:0041193B 53                      push ebx

:0041193C 55                      push ebp

:0041193D 56                      push esi

                            。。。。。。。

                            。。。。。。。

                            。。。。。。。

:004127BA FF5218                  call [edx+18]                           ;這是快進(jìn)函數

                            。。。。。。。



在這個(gè)函數中便有快進(jìn)函數。我所謂的“跳轉”是說(shuō)跳轉到入口:00411930處 ,所謂的“模擬”是指跳轉以前把所有需要設置的參數設置好。這些參數包括寄存器,堆棧和其他一些必要數據。下面是我找的一些參數。

              mov eax,01c385H

              mov [esp+4],eax

              mov eax,543a63h

              push       eax

              mov eax,433cech

              pop  eax

              mov ebx,1c385h

              mov ebp,0111h

              xor  esi,esi

              mov edi,0234h

              mov eax,411930h

              push       410e4dh



              jmp  eax         ;模仿按下快進(jìn)按鈕,跳轉到處理函數

把上面這些替代call  _forward ,就可以執行快進(jìn)函數了。我找的這個(gè)模擬環(huán)境或許有多余的,我懶得測試,一并寫(xiě)上了。由于這個(gè)模擬環(huán)境并沒(méi)有實(shí)現完全的模擬,就是說(shuō)環(huán)境設置的不夠完全,所以雖然可以執行完快進(jìn)函數,但繼續向下運行就會(huì )出錯。既然如此,就不用繼續運行,而是在運行完快進(jìn)函數后返回到鉤子函數,如下:

:004127B3 6810270000              push 00002710

:004127B8 8B11                    mov edx, dword ptr [ecx]

:004127BA FF5218                  call [edx+18]             ;快進(jìn)函數

:004127BD E9451B0000              jmp 00414307            ;把這里修改,返回到鉤子函數



修改這個(gè)jmp,跳轉到@@: xor  eax,eax  就是 call  _forward 下面的地方。但返回后又要恢復原來(lái)鉤子函數的堆棧,所以可以在模擬跳轉以前把堆棧入口保存,返回后再恢復。我把堆棧入口保存在了[42fe10h] 。返回后從這里取就可以了。同時(shí),修改:004127BD jmp 00414307 也必須遵照SMC的標準,不要改變原來(lái)程序的可讀性。具體的代碼請看下文。



標志位:[42FE14]==01  -----> 按右方向鍵   [42FE14]==00   ------>沒(méi)有按右方向鍵



鉤子函數:



HookProc       proc _dwCode,_wParam,_lParam

              local @szKeyState[256]:byte



              invoke     CallNextHookEx,hHook,_dwCode,_wParam,_lParam

              invoke     GetKeyboardState,addr @szKeyState

              invoke     GetKeyState,VK_SHIFT

              mov @szKeyState + VK_SHIFT,al

              mov ecx,_lParam                                       ;_lParam的高16位可以標志每個(gè)按鍵。該參數定義可以參考MSDN

              shr   ecx,16                                               ;414D

                                                                      

              and  ecx,0fffh

              cmp ecx,014dh

              jnz   @F                                            ;判斷是不是有方向鍵

              

              pushad



              mov eax,42fe10h

              mov dword ptr [eax],esp                                   ;保存堆棧入口

              mov eax,42fe14h

              mov dword ptr [eax],001h                                 ;設定標志位為1



              mov eax,01c385H                                      ;設定模擬環(huán)境

              mov [esp+4],eax

              mov eax,543a63h

              push       eax

              mov eax,433cech

              pop  eax

              mov ebx,1c385h

              mov ebp,0111h

              xor  esi,esi

              mov edi,0234h

              mov eax,41192CH

              push       410e4dh



              jmp  eax                                            ;模仿按下快進(jìn)按鈕,跳轉到處理函數

              nop                                                   ;快進(jìn)函數執行完畢后便跳轉到這個(gè)地方

              nop                                                   



              mov eax,42fe14h                                       ;va=0e810a7h

              mov dword ptr [eax],000h                                 ;恢復標志位



              mov eax,42fe10h

              mov esp,dword ptr [eax]              ;恢復原來(lái)的堆棧地址.一般來(lái)說(shuō)上面有了pushad,下面直接用popad

                                                 ;便可以了.但是我們這里沒(méi)有很好地恢復堆棧,所以只好手動(dòng)調整

              popad                                  ;恢復原來(lái)保存的環(huán)境



       @@:       xor  eax,eax

              ret

HookProc       endp





處理快進(jìn)的函數調用:



:004127B8 8B11                    mov edx, dword ptr [ecx]

                              mov edx,010AF8F8

:004127BA FF5218                  call [edx+18]                    ;快進(jìn)函數

:004127BD E9451B0000              jmp 00414307                          



改成: 

:004127BA FF5218                  call [edx+18]



:004127BD E9451B0000              jmp 0042FE5A                  ;跳轉到剩余空間



剩余空間添加代碼:

0042FE5A:

              push       eax

              mov eax,42fe14h

              mov eax,dword ptr [eax]

              dec  eax                              

              test  eax,eax    

              pop  eax

              jnz   00414307                            ;標志位不為1,直接跳轉到程序原來(lái)設定的地方。

              pop  eax

              jmp  0e810a7                              ;標志位為1,回到鉤子函數后面。



   這樣整個(gè)修改過(guò)程就完工了。當按右方向鍵就會(huì )實(shí)現快進(jìn)的功能。當然原來(lái)的ctrl+pagedown也可以用。我想我這篇文章肯定給人很凌亂的感覺(jué),但我也沒(méi)辦法了。在技術(shù)上,代碼寫(xiě)的很有“冗余”度,也沒(méi)有卸載鉤子(UninstallHook),這個(gè)可以在程序結束的時(shí)候處理,大家有興趣可以自己加上。同時(shí)我只做了一個(gè)快進(jìn),也沒(méi)有處理后退功能。處理方法一樣,但是我還是想先把畢業(yè)論文做完,嘿嘿。

點(diǎn)擊下載:附件!*轉載請注明來(lái)自看雪論壇@PEdiy.com
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
qq反匯編日志
【學(xué)習制作QQ外掛方法及原理】超詳細 - QQ技術(shù)交流 - 綠色兵團 - 創(chuàng )造一個(gè)綠色,寧...
C/C++ 中的函數參數傳遞機制
360安全衛士hookport.sys簡(jiǎn)單逆向——KiFastCallEntry掛鉤
C++函數調用原理理解C++函數調用原理理解
潘凱:C 對象布局及多態(tài)實(shí)現的探索(十)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久