[發明專利]一種構造合法堆棧返回值繞過函數調用檢測的方法與系統有效
| 申請號: | 201610128818.0 | 申請日: | 2016-03-08 |
| 公開(公告)號: | CN105808256B | 公開(公告)日: | 2017-06-23 |
| 發明(設計)人: | 周志剛 | 申請(專利權)人: | 武漢斗魚網絡科技有限公司 |
| 主分類號: | G06F9/44 | 分類號: | G06F9/44 |
| 代理公司: | 武漢東喻專利代理事務所(普通合伙)42224 | 代理人: | 向彬 |
| 地址: | 430074 湖北省武漢市武漢東湖*** | 國省代碼: | 湖北;42 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 構造 合法 堆棧 返回 繞過 函數 調用 檢測 方法 系統 | ||
技術領域
本發明屬于計算機開發技術領域,更具體地,涉及一種構造合法堆棧返回值繞過函數調用檢測的方法與系統。
背景技術
目前,直播軟件在直播時都可以預覽到直播的內容,獲取直播的顯示內容都是通過注入一個動態鏈接庫到游戲進程中,注入的動態鏈接庫會hook進程中的d3d9.dll的Present函數來獲取顯卡的顯示內容,為了獲取到Present函數的地址,則需要先獲取到IDirect3DDevice9Ex的指針,從該指針中獲取函數地址,而該指針則可以通過調用CreateDeviceEx函數來獲取。但是由于目前很多“外掛”會調用該函數來實現某些“外掛”功能,所以導致游戲開發商會對調用該函數的調用者進行檢查,如果不是游戲自身的調用則會判斷是“外掛”在調用,從而進行處罰。對于如何檢測是誰調用了某函數,則可以利用intel x86的函數調用機制,在函數調用時會使用擴展基址指針寄存器(extended base pointer,EBP)和堆棧棧頂寄存器(Extended Stack Pointer,ESP)來保存當前堆棧的棧底地址和棧頂地址。而棧底地址存放著調用此函數的返回地址。由此,通過不斷的回朔EBP寄存器來獲取函數調用的返回地址,就可以獲取到調用這個函數的整個調用鏈,從而可以區分出是否是合法的調用地址。
發明內容
針對現有技術的以上缺陷或改進需求,本發明提供了一種繞過堆棧檢測的方法,此發明通過一段精心構造的匯編代碼,通過不斷的往堆棧中壓入合法的地址來掩蓋真實的調用。
為實現上述目的,按照本發明的一個方面,提供了一種構造合法堆棧返回值繞過函數調用檢測的方法,包括:構造遞歸調用往堆棧中多次壓入進程的d3d9.dll模塊的代碼段中的任一連續兩條匯編指令序列pop ebp,retn的地址,其中壓入地址的次數大于或等于堆棧檢測調用的層數;在往堆棧中多次壓入上述地址后,構造系統函數CreateDeviceEx需要的參數并壓入堆棧,并往堆棧中再次壓入上述地址后,跳轉到系統函數CreateDeviceEx。
在本發明的一個實施例中,往堆棧中壓入的地址的獲取方式為:在進程的d3d9.dll模塊的代碼段中查找連續的值為0x5D,0xC3的指令的地址,其中0x5D,0xC3是匯編指令序列pop ebp,retn所對應的16進制。
在本發明的一個實施例中,所述構造合法堆棧返回值繞過函數調用檢測的方法,具體為:
初始化i=n;
Void func(void)
{
將進程的d3d9.dll模塊的代碼段中的任一連續兩條匯編指令序列pop ebp,retn的地址壓入堆棧;
將i的值減一;
如果:i>=0
跳轉到func();
否則
構造系統函數CreateDeviceEx需要的參數壓入堆棧,并往堆棧中再次壓入上述地址后,跳轉到系統函數CreateDeviceEx;
}
其中,n為堆棧檢測調用的層數。
在本發明的一個實施例中,所述構造合法堆棧返回值繞過函數調用檢測的方法具體為:
初始化i=0;
Void func(void)
{
將進程的d3d9.dll模塊的代碼段中的任一連續兩條匯編指令序列pop ebp,retn的地址壓入堆棧;
將i的值減一;
如果:i<=n
跳轉到func();
否則
構造系統函數CreateDeviceEx需要的參數壓入堆棧,并往堆棧中再次壓入上述地址后,跳轉到系統函數CreateDeviceEx;
}
其中,n為堆棧檢測調用的層數。
在本發明的一個實施例中,所述遞歸調用往堆棧中壓入地址的次數大于等于5。
按照本發明的另一方面,還提供了一種構造合法堆棧返回值繞過函數調用檢測的系統,包括遞歸模塊、遞歸跳出模塊,其中:
所述遞歸模塊,用于構造遞歸調用往堆棧中多次壓入進程的d3d9.dll模塊的代碼段中的任一連續兩條匯編指令序列pop ebp,retn的地址,其中壓入地址的次數大于或等于堆棧檢測調用的層數;
所述遞歸跳出模塊,用于在所述遞歸模塊往堆棧中多次壓入上述地址后,構造系統函數CreateDeviceEx需要的參數并壓入堆棧,并往堆棧中再次壓入上述地址后,跳轉到系統函數CreateDeviceEx。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于武漢斗魚網絡科技有限公司,未經武漢斗魚網絡科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201610128818.0/2.html,轉載請聲明來源鉆瓜專利網。





