[發明專利]一種Windows下通過HOOK技術實現函數熱補丁的方法在審
| 申請號: | 201910059783.3 | 申請日: | 2019-01-22 |
| 公開(公告)號: | CN109766145A | 公開(公告)日: | 2019-05-17 |
| 發明(設計)人: | 李宗宇;趙飛;鄭曉峰 | 申請(專利權)人: | 杭州云締盟科技有限公司 |
| 主分類號: | G06F9/445 | 分類號: | G06F9/445 |
| 代理公司: | 杭州信義達專利代理事務所(普通合伙) 33305 | 代理人: | 施建勇 |
| 地址: | 310000 浙江省杭州市西*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 補丁 系統函數 跳轉 技術實現 熱補丁 替換 通信技術領域 目標進程 性能損耗 | ||
本發明公開了一種Windows下通過HOOK技術實現函數熱補丁的方法,涉及通信技術領域,包括以下步驟:準備兩個補丁DLL,其中一個為含有替換函數的真補丁DLL,另一個為含有跳轉函數的假補丁DLL;將兩個補丁DLL注入到目標進程當中;修改系統函數,使其跳轉到替換函數;執行跳轉函數,跳轉回系統函數,繼續系統函數API的執行。本發明在減少不必要的性能損耗的同時,還提高了HOOK的準確性。
技術領域
本發明涉及通信技術領域,尤其涉及一種Windows下通過HOOK技術實現函數熱補丁的方法。
背景技術
HOOK機制又稱鉤子機制,掛鉤機制,是Windows消息處理機制的一個平臺,應用程序可以在上面設置子程(回調函數)以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達后,在目標窗口處理函數之前處理它。鉤子機制允許應用程序截獲處理window消息或特定事件。
現有技術之后,在HOOK Windows的系統API函數的情況下,接管系統API函數并完成相應的處理后,需要再調用原有的系統API函數,這時需要執行反HOOK流程,還原系統API函數。每調用一次系統函數,都需要的執行函數替換/函數還原;當系統函數API被多次執行時,函數替換/函數還原會被反復執行,影響整個目標進程的性能;另外,當系統函數API在多線程中調用,會存在系統函數API被還原的一瞬間,目標進程的函數調用直接調用到了原有系統函數,導致HOOK漏掉,HOOK的準確性降低。
發明內容
本發明的目的在于提供一種Windows下通過HOOK技術實現函數熱補丁的方法,在減少不必要的性能損耗的同時,還提高了HOOK的準確性。
為實現上述目的,本發明提供如下技術方案:
一種Windows下通過HOOK技術實現函數熱補丁的方法,其特征在于,包括以下步驟:
S1,準備兩個補丁DLL,其中一個為含有替換函數的真補丁DLL,另一個為含有跳轉函數的假補丁DLL;
S2,將兩個補丁DLL注入到目標進程當中;
S3,修改系統函數,使其跳轉到替換函數;
S4,執行跳轉函數,跳轉回系統函數,繼續系統函數API的執行。
進一步的,所述S3的具體內容為:修改系統函數sendto的前五個字節為第一jmp指令,跳轉到替換函數MySendTo。
進一步的,所述跳轉函數的前5個字節為系統函數sendto修改前的前5個字節,跳轉函數的第6至第10個字節為第二jmp指令,跳轉到系統函數sendto的第6個字節。
進一步的,所述S4后還包括S5,當HOOK功能不再需要時,執行DLL反注入,將兩個補丁DLL從目標進程中去除。
進一步的,所述DLL反注入的執行通過調用UnhookWindowsHookEx函數實現。
進一步的,所述S2中補丁DLL注入通過調用SetWindowsHookEx函數實現。
與現有技術相比,本發明的有益效果是:本發明解決了在函數替換過程中反復替換和還原函數現場的問題,可以做到DLL加載后,只做一次函數替換,就能HOOK原有函數,減少不必要的性能損耗;另外本申請可以調用原有系統函數,在多線程環境下,HOOK準確性100%,因為沒有函數還原情況發生。
附圖說明
圖1為現有技術的HOOK流程圖;
圖2為本發明的HOOK流程圖;
圖3為現有技術HOOK前目標進程加載w2_32.dll的sendto函數的內存圖;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于杭州云締盟科技有限公司,未經杭州云締盟科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910059783.3/2.html,轉載請聲明來源鉆瓜專利網。





