亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種調(diào)用函數(shù)的分析方法及裝置與流程

文檔序號:11432183閱讀:176來源:國知局
一種調(diào)用函數(shù)的分析方法及裝置與流程

本發(fā)明涉及計算機安全領域,尤其是一種調(diào)用函數(shù)的分析方法及裝置。



背景技術(shù):

在函數(shù)保護中,如果對函數(shù)的調(diào)用情況沒有清楚的認識,盲目地對函數(shù)進行加殼保護,如代碼碎片化、代碼虛擬化、代碼移植或者代碼混淆,很容易無意中對系統(tǒng)函數(shù)或者操作中不曾被調(diào)用的函數(shù)進行了保護,這樣不僅影響了加殼后程序的體積,同時還會降低加殼后程序的運行效率。

如果開發(fā)人員在程序運行過程中保護了過多的僵尸函數(shù)和調(diào)用次數(shù)特別多的函數(shù),會使得保護后的可執(zhí)行程序的體積加大,同時會降低保護后的可執(zhí)行程序的運行效率。



技術(shù)實現(xiàn)要素:

鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種調(diào)用函數(shù)的分析方法及裝置,能夠?qū)崿F(xiàn)調(diào)用函數(shù)的分析,從而方便查找關(guān)鍵函數(shù)。

本發(fā)明實施例的一方面,本發(fā)明提供了一種調(diào)用函數(shù)的分析方法,包括:

獲取調(diào)用函數(shù)對應的函數(shù)信息;

當程序執(zhí)行至所述調(diào)用函數(shù)時,根據(jù)預設分析代碼對所述函數(shù)信息所對應調(diào)用函數(shù)的調(diào)用情況進行分析;

生成調(diào)用函數(shù)的分析結(jié)果。

進一步地,在所述獲取調(diào)用函數(shù)對應的函數(shù)信息之前,所述方法還包括:

通過掛起的方式創(chuàng)建分析進程,所述分析進程中包含有預設容量的動態(tài)內(nèi)存;

將預設分析代碼載入所述動態(tài)內(nèi)存中;

創(chuàng)建內(nèi)存映射文件以及統(tǒng)計結(jié)果事件,所述內(nèi)存映射文件中存儲有調(diào)用函數(shù)的函數(shù)信息。

進一步地,所述根據(jù)預設分析代碼對所述函數(shù)信息所對應調(diào)用函數(shù)的調(diào)用情況進行分析包括:

傳遞所述分析進程的標識信息,根據(jù)所述標識信息加載所述內(nèi)存映射文件以及統(tǒng)計結(jié)果事件;

根據(jù)所述內(nèi)存映射文件將程序執(zhí)行的起始地址添加至所述預設分析代碼中,當所述分析進程執(zhí)行時跳轉(zhuǎn)至所述程序執(zhí)行的起始地址;

加載需要注入至所述分析進程的動態(tài)鏈接庫,根據(jù)所述動態(tài)鏈接庫中的監(jiān)控函數(shù)塊對所述調(diào)用函數(shù)進行分析,得到調(diào)用函數(shù)的調(diào)用信息;

將所述調(diào)用函數(shù)的調(diào)用信息實時的保存到內(nèi)存映射文件當中。

進一步地,所述根據(jù)所述動態(tài)鏈接庫中的監(jiān)控函數(shù)塊對所述調(diào)用函數(shù)進行分析,得到調(diào)用函數(shù)的調(diào)用信息包括:

啟動所述動態(tài)鏈接庫中的函數(shù)hook被保護程序的函數(shù)塊作為監(jiān)控函數(shù)塊;

根據(jù)所述函數(shù)hook被保護程序的函數(shù)塊監(jiān)控所述調(diào)用函數(shù)的調(diào)用情況,得到所述調(diào)用函數(shù)的調(diào)用信息。

進一步地,在所述啟動所述動態(tài)鏈接庫中的函數(shù)hook被保護程序的函數(shù)塊作為監(jiān)控函數(shù)塊之前,所述方法還包括:

根據(jù)所述調(diào)用函數(shù)的函數(shù)信息獲取所述調(diào)用函數(shù)的函數(shù)類型;

當所述調(diào)用函數(shù)的函數(shù)類型為可直接執(zhí)行函數(shù)時,通過模塊句柄載入動態(tài)鏈接庫;

當所述調(diào)用函數(shù)的函數(shù)類型為不可直接執(zhí)行函數(shù)時,通過加載模塊載入動態(tài)鏈接庫。

進一步地,所述根據(jù)所述函數(shù)hook被保護程序的函數(shù)塊監(jiān)控所述調(diào)用函數(shù)的調(diào)用情況,得到所述調(diào)用函數(shù)的調(diào)用信息包括:

當調(diào)用函數(shù)被調(diào)用時,通過所述函數(shù)hook被保護的函數(shù)塊獲取所述調(diào)用函數(shù)的地址;

根據(jù)所述調(diào)用函數(shù)的地址遍歷所述內(nèi)存映射文件中存儲的調(diào)用函數(shù)的相對虛擬地址;

更新匹配結(jié)果相一致的調(diào)用函數(shù)對應的調(diào)用信息,將所述調(diào)用信息保存至所述內(nèi)存映射文件中。

進一步地,所述獲取調(diào)用函數(shù)的函數(shù)信息包括:

啟動所述分析進程,通過所述內(nèi)存映射文件獲取所述調(diào)用函數(shù)的函數(shù)信息。

依據(jù)本發(fā)明實施例的另一方面,本發(fā)明實施例提供了一種調(diào)用函數(shù)的分析裝置,包括:

獲取單元,用于獲取調(diào)用函數(shù)對應的函數(shù)信息;

分析單元,用于當程序執(zhí)行至所述調(diào)用函數(shù)時,根據(jù)預設分析代碼對所述函數(shù)信息所對應調(diào)用函數(shù)的調(diào)用情況進行分析;

生成單元,用于生成調(diào)用函數(shù)的分析結(jié)果。

進一步地,所述裝置還包括:

第一創(chuàng)建單元,用于通過掛起的方式創(chuàng)建分析進程,所述分析進程中包含有預設容量的動態(tài)內(nèi)存;

載入單元,用于將所述預設分析代碼載入所述動態(tài)內(nèi)存中;

第二創(chuàng)建單元,用于創(chuàng)建內(nèi)存映射文件以及統(tǒng)計結(jié)果事件,所述內(nèi)存映射文件中存儲有調(diào)用函數(shù)的函數(shù)信息。

進一步地,所述分析單元包括:

加載模塊,用于傳遞所述分析進程的標識信息,根據(jù)所述標識信息加載所述分析進程中的內(nèi)存映射文件以及統(tǒng)計結(jié)果事件;

添加模塊,用于根據(jù)所述內(nèi)存映射文件將程序執(zhí)行的起始地址添加至所述預設分析代碼中,當所述分析進程執(zhí)行時跳轉(zhuǎn)至所述程序執(zhí)行的起始地址;

分析模塊,用于加載需要注入至所述分析進程的動態(tài)鏈接庫,根據(jù)所述動態(tài)鏈接庫中的監(jiān)控函數(shù)塊對所述調(diào)用函數(shù)進行分析,得到調(diào)用函數(shù)的調(diào)用信息;

保存模塊,用于將所述調(diào)用函數(shù)的調(diào)用信息實時的保存到內(nèi)存映射文件當中。

進一步地,所述分析模塊,具體用于啟動所述動態(tài)鏈接庫中的函數(shù)hook被保護程序的函數(shù)塊作為監(jiān)控函數(shù)塊;

所述分析模塊,具體還用于根據(jù)所述函數(shù)hook被保護程序的函數(shù)塊監(jiān)控所述調(diào)用函數(shù)的調(diào)用情況,得到所述調(diào)用函數(shù)的調(diào)用信息。

進一步地,所述分析模塊,具體還用根據(jù)所述調(diào)用函數(shù)的函數(shù)信息獲取所述調(diào)用函數(shù)的函數(shù)類型;

所述分析模塊,具體還用當所述調(diào)用函數(shù)的函數(shù)類型為可直接執(zhí)行函數(shù)時,通過模塊句柄載入動態(tài)鏈接庫;

所述分析模塊,具體還用當所述調(diào)用函數(shù)的函數(shù)類型為不可直接執(zhí)行函數(shù)時,通過加載模塊載入動態(tài)鏈接庫。

進一步地,所述分析模塊,具體還用于當調(diào)用函數(shù)被調(diào)用時,通過所述函數(shù)hook被保護的函數(shù)塊獲取所述調(diào)用函數(shù)的地址;

所述分析模塊,具體還用于根據(jù)所述調(diào)用函數(shù)的地址遍歷所述內(nèi)存映射文件中存儲的調(diào)用函數(shù)的相對虛擬地址,得到匹配結(jié)果相一致的調(diào)用函數(shù)對應的調(diào)用信息;

所述分析模塊,具體還用于更新匹配結(jié)果相一致的調(diào)用函數(shù)對應的調(diào)用信息,將所述調(diào)用信息保存至所述內(nèi)存映射文件中。

進一步地,所述獲取單元,具體用于啟動所述分析進程,通過所述內(nèi)存映射文件獲取所述調(diào)用函數(shù)的函數(shù)信息。

借由上述技術(shù)方案,本發(fā)明提供的一種調(diào)用函數(shù)的分析方法及裝置,通過在程序執(zhí)行到該調(diào)用函數(shù)時,根據(jù)預設分析代碼對函數(shù)信息所對應調(diào)用函數(shù)進行分析,能夠?qū)崟r監(jiān)控調(diào)用函數(shù)的調(diào)用情況,生成調(diào)用函數(shù)的分析結(jié)果。與現(xiàn)有技術(shù)的調(diào)用函數(shù)的分析方法相比,本發(fā)明實施例通過在程序運行過程中對調(diào)用函數(shù)進行分析,能夠得到程序執(zhí)行過程中函數(shù)的調(diào)用情況,進而根據(jù)函數(shù)的調(diào)用情況實時對程序的函數(shù)模塊進行優(yōu)化,提高可執(zhí)行程序的運行效率,另外,根據(jù)調(diào)用函數(shù)的調(diào)用情況可以找到程序運行的核心函數(shù),進而對核心函數(shù)進行保護,同時極大地節(jié)省了技術(shù)人員的時間。

上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。

附圖說明

通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:

圖1示出了本發(fā)明實施例提供的一種調(diào)用函數(shù)的分析方法流程示意圖;

圖2示出了本發(fā)明實施例提供的另一種調(diào)用函數(shù)的分析方法流程示意圖;

圖3示出了本發(fā)明實施例提供的一種調(diào)用函數(shù)的分析裝置結(jié)構(gòu)示意圖;

圖4示出了本發(fā)明實施例提供的另一種調(diào)用函數(shù)的分析裝置結(jié)構(gòu)示意圖。

具體實施方式

下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領域的技術(shù)人員。

本發(fā)明實施例提供了一種調(diào)用函數(shù)的分析方法,如圖1所示,該方法主要通過啟動分析進程對調(diào)用函數(shù)進行監(jiān)控,具體步驟包括:

101、獲取調(diào)用函數(shù)對應的函數(shù)信息。

其中,調(diào)用函數(shù)對應的函數(shù)信息可以包括但不局限于調(diào)用函數(shù)的名稱,調(diào)用函數(shù)的相對虛擬地址rva,調(diào)用函數(shù)的相對虛擬地址rva的個數(shù)以及程序執(zhí)行的起始地址等信息。

需要說明的是,調(diào)用函數(shù)的函數(shù)信息通??梢源鎯υ趦?nèi)存映射文件中,以實現(xiàn)不同分析模塊之間函數(shù)信息的共享,另外,通過內(nèi)存映射文件可以方便同時啟動多個性能分析模塊,并且實現(xiàn)模塊之間的數(shù)據(jù)通信,如傳遞不同調(diào)用函數(shù)的函數(shù)信息。

102、當程序執(zhí)行至所述調(diào)用函數(shù)時,根據(jù)預設分析代碼對所述函數(shù)信息所對應調(diào)用函數(shù)的調(diào)用情況進行分析。

這里的預設分析代碼主要用于對調(diào)用函數(shù)的調(diào)用情況進行分析,具體可以包括進程標識傳遞模塊、程序起始地址添加模塊、動態(tài)鏈接庫的注入模塊、信息保存模塊等多個模塊,其中,進程標識傳遞模塊用于傳遞分析進程的標識信息,從而程序根據(jù)該標識信息加載內(nèi)存映射文件以及統(tǒng)計結(jié)果事件,這里的內(nèi)存映射文件中存儲有調(diào)用函數(shù)的函數(shù)信息,如函數(shù)的名稱,函數(shù)的相對虛擬地址rva,函數(shù)的相對虛擬地址rva的個數(shù)以及程序執(zhí)行的起始地址等信息,程序起始地址添加模塊用于將內(nèi)存映射文件中程序執(zhí)行的起始地址添加至預設分析代碼中,以便當調(diào)用函數(shù)被調(diào)用時跳轉(zhuǎn)至預設分析代碼執(zhí)行的起始地址,動態(tài)鏈接庫的注入模塊用于加載分析進程的動態(tài)鏈接庫,根據(jù)動態(tài)鏈接庫中的存儲的分析函數(shù)塊對調(diào)用函數(shù)進行監(jiān)控,得到調(diào)用函數(shù)的調(diào)用信息,這里使用動態(tài)鏈接庫可以更為容易地將程序應用與各個模塊,并且不影響該程序的其他部分,這樣也方便對分析進程進行修改,如需要對調(diào)用信息中的內(nèi)容進行更新,可以通過對動態(tài)鏈接庫進行修改即可,從而方便程序的更新,信息保存模塊用于根據(jù)統(tǒng)計結(jié)果事件將調(diào)用信息保存至內(nèi)存映射文件中,以便后續(xù)對調(diào)用信息的分析,還可以顯示在顯示界面,從而更直觀的展示給用戶。

具體地,當程序執(zhí)行至調(diào)用函數(shù)時,通過預設分析代碼中的各個模塊對調(diào)用函數(shù)進行分析,首先通過進程標識傳遞模塊傳遞分析進程的標識信息,根據(jù)該標識信息加載內(nèi)存映射文件以及統(tǒng)計結(jié)果時間,然后通過程序起始地址添加模塊將內(nèi)存映射文件中程序執(zhí)行的起始地址添加至預設分析代碼中,進一步通過動態(tài)鏈接庫加載動態(tài)鏈接庫中的監(jiān)控函數(shù)塊對調(diào)用函數(shù)進行分析,得到調(diào)用信息,最后通過信息保存模塊將調(diào)用函數(shù)的調(diào)用信息實時保存至內(nèi)存映射文件中。

103、生成調(diào)用函數(shù)的分析結(jié)果。

這里的分析結(jié)果為調(diào)用函數(shù)的調(diào)用情況,如調(diào)用函數(shù)的調(diào)用次數(shù)以及調(diào)用時間等調(diào)用信息,需要說明的是,具體分析結(jié)果的顯示可以根據(jù)用戶實際需求進行設置,如用戶可以設置界面顯示某函數(shù)最近一次被調(diào)用的詳細信息,還可以設置界面顯示所有調(diào)用函數(shù)的調(diào)用次數(shù)等,本發(fā)明實施例對分析結(jié)果的在界面上顯示的內(nèi)容不進行限定。

結(jié)合上述的實現(xiàn)方式可以看出,本發(fā)明實施例提供的一種調(diào)用函數(shù)的分析方法,通過在程序執(zhí)行到該調(diào)用函數(shù)時,根據(jù)預設分析代碼對函數(shù)信息所對應調(diào)用函數(shù)進行分析,能夠?qū)崟r監(jiān)控調(diào)用函數(shù)的調(diào)用情況,生成調(diào)用函數(shù)的分析結(jié)果。與現(xiàn)有技術(shù)的調(diào)用函數(shù)的分析方法相比,本發(fā)明實施例通過在程序運行過程中對調(diào)用函數(shù)進行分析,能夠得到程序執(zhí)行過程中函數(shù)的調(diào)用情況,進而根據(jù)函數(shù)的調(diào)用情況實時對程序的函數(shù)模塊進行優(yōu)化,提高可執(zhí)行程序的運行效率,另外,根據(jù)調(diào)用函數(shù)的調(diào)用情況可以找到程序運行的核心函數(shù),進而對核心函數(shù)進行保護,同時極大地節(jié)省了技術(shù)人員的時間。

以下為了更加詳細地說明本發(fā)明提出的一種調(diào)用函數(shù)的分析方法,特別是在根據(jù)預設監(jiān)控代碼對調(diào)用函數(shù)進行監(jiān)控的步驟,本發(fā)明實施例還提供了另一種調(diào)用函數(shù)的分析方法,如圖2所示,該方法的具體步驟包括:

201、通過掛起的方式創(chuàng)建分析進程。

其中,分析進程用于分析程序執(zhí)行中調(diào)用函數(shù)的調(diào)用情況,例如,程序在執(zhí)行過程中函數(shù)被調(diào)用的次數(shù)、被調(diào)用的時間等調(diào)用情況,另外,由于執(zhí)行程序都需要一定的內(nèi)存,為了方便進程的使用,在分析進程中申請預設容量的動態(tài)內(nèi)存,可以用來存放預設分析代碼或者其他程序運行數(shù)據(jù),如代碼段或數(shù)據(jù)段,本發(fā)明實施例對申請動態(tài)內(nèi)存的容量大小不進行限定,可根據(jù)應用運行實際需要的內(nèi)存大小進行申請。

需要說明的是,這里為了用戶觀察和分析進程,通過掛起的方式創(chuàng)建分析進程,此時該分析進程處于靜止狀態(tài),從而方便用戶對程序進行修改或者其他操作。

對于本發(fā)明實施例,通過創(chuàng)建的分析進程對程序執(zhí)行中調(diào)用函數(shù)的調(diào)用情況進行分析,以便找出程序執(zhí)行中的核心函數(shù),通常情況下,核心函數(shù)在程序運行過程中的肯定會被調(diào)用,并且調(diào)用次數(shù)不會特別多,本發(fā)明實施例可以通過分析調(diào)用函數(shù)的調(diào)用次數(shù)來獲取核心函數(shù),進而對核心函數(shù)進行重點保護。

需要說明的是,在創(chuàng)建分析進程之前可以通過分析器對進程中的各個子線程進行性能分析,這里的性能分析主要是通過統(tǒng)計內(nèi)存使用狀況檢測可能存在的內(nèi)存泄露問題以及確定優(yōu)化內(nèi)存使用的方向,以防止界面卡死。

202、將預設分析代碼載入所述動態(tài)內(nèi)存中。

這里預設分析代碼用于監(jiān)控調(diào)用函數(shù)的調(diào)用信息,具體可以包括進程標識傳遞模塊、程序起始地址添加模塊、動態(tài)鏈接庫的注入模塊、信息保存模塊等多個模塊,各個模塊之間可以互通消息,并且相互之間不會影響。

需要說明的是,這里的預設分析代碼可以通過組裝shellcode的方式來存儲各個模塊,然后將shellcode寫入到申請的動態(tài)內(nèi)存中,本發(fā)明實施例對預設分析代碼的編譯模式不進行限定。

203、創(chuàng)建內(nèi)存映射文件以及統(tǒng)計結(jié)果事件。

其中,內(nèi)存映射文件中存儲有調(diào)用函數(shù)的函數(shù)信息,例如,調(diào)用函數(shù)的名稱、調(diào)用函數(shù)的相對虛擬地址rva、調(diào)用函數(shù)的相對虛擬地址rva的個數(shù)以及程序執(zhí)行的起始地址等信息,該統(tǒng)計結(jié)果事件用于統(tǒng)計調(diào)用函數(shù)的調(diào)用信息。

對于本發(fā)明實施例,通過創(chuàng)建內(nèi)存映射文件,可以方便同時啟動多個性能分析模塊,并且實現(xiàn)模塊之間的數(shù)據(jù)通信,通過創(chuàng)建統(tǒng)計結(jié)果事件,進一步方便模塊之間進行消息傳遞。

204、啟動所述分析進程,通過所述內(nèi)存映射文件獲取所述調(diào)用函數(shù)的函數(shù)信息。

其中,調(diào)用函數(shù)對應的函數(shù)信息可以包括但不局限于調(diào)用函數(shù)的名稱,調(diào)用函數(shù)的相對虛擬地址rva,調(diào)用函數(shù)的相對虛擬地址rva的個數(shù)以及程序執(zhí)行的起始地址等信息。

205、當程序執(zhí)行至所述調(diào)用函數(shù)時,傳遞所述分析進程的標識信息,根據(jù)所述標識信息加載所述內(nèi)存映射文件以及統(tǒng)計結(jié)果事件。

其中,分析進程的標識信息為操作系統(tǒng)的內(nèi)核用于唯一標識進程的一個數(shù)值,這里的標識信息可以作為許多函數(shù)調(diào)用的參數(shù),用以調(diào)整進程的優(yōu)先級、控制進程行為等。

為了進一步獲取調(diào)用函數(shù)的函數(shù)信息以及調(diào)用信息,根據(jù)傳遞的分析進程的標識信息加載內(nèi)存映射文件以及統(tǒng)計結(jié)果事件,通過打開內(nèi)存映射文件獲取調(diào)用函數(shù)的函數(shù)信息,通過統(tǒng)計結(jié)果時間統(tǒng)計調(diào)用函數(shù)的調(diào)用信息。

206、根據(jù)所述內(nèi)存映射文件將程序執(zhí)行的起始地址添加至所述預設分析代碼中,當所述分析進程執(zhí)行時跳轉(zhuǎn)至所述程序執(zhí)行的起始地址。

需要說明的是,這里在預設分析代碼中添加程序執(zhí)行的起始地址的目的是保證當開啟分析進程時跳轉(zhuǎn)至程序執(zhí)行的起始地址,從而對調(diào)用函數(shù)進行分析,進一步根據(jù)監(jiān)控得到調(diào)用函數(shù)的調(diào)用信息來獲取程序的核心函數(shù),對核心函數(shù)進行保護。

207、加載需要注入至所述分析進程的動態(tài)鏈接庫,根據(jù)所述動態(tài)鏈接庫中的監(jiān)控函數(shù)塊對所述調(diào)用函數(shù)進行分析,得到調(diào)用函數(shù)的調(diào)用信息。

其中,動態(tài)鏈接庫中存儲有用于監(jiān)控調(diào)用函數(shù)的分析函數(shù)塊,進一步可以根據(jù)內(nèi)存映射文件獲取調(diào)用函數(shù)的函數(shù)信息,然后通過啟動動態(tài)鏈接庫中函數(shù)hook被保護程序的函數(shù)塊作為分析函數(shù)塊,對調(diào)用函數(shù)進行監(jiān)控,監(jiān)控調(diào)用函數(shù)的調(diào)用情況,得到調(diào)用函數(shù)的調(diào)用信息。

對于根據(jù)動態(tài)鏈接庫中存儲的分析函數(shù)塊對調(diào)用函數(shù)進行監(jiān)控步驟的過程具體可以包括但不局限于下述實現(xiàn)方式,當調(diào)用函數(shù)被調(diào)用時,通過函數(shù)hook被保護的函數(shù)塊獲取調(diào)用函數(shù)的地址,這里調(diào)用函數(shù)的地址根據(jù)調(diào)用函數(shù)的地址遍歷內(nèi)存映射文件中存儲的調(diào)用函數(shù)的相對虛擬地址,當通過遍歷查找后找到目標函數(shù),調(diào)用統(tǒng)計函數(shù)將該目標函數(shù)的調(diào)用次數(shù)加1,更新調(diào)用函數(shù)的調(diào)用信息,這里只有當執(zhí)行調(diào)用函數(shù)時才能更新相應的調(diào)用信息,并將調(diào)用信息保存至內(nèi)存映射文件中。

需要說明的是,在通過動態(tài)鏈接庫中的函數(shù)hook被保護函數(shù)塊對調(diào)用函數(shù)進行監(jiān)控之前,可以根據(jù)調(diào)用函數(shù)的函數(shù)類型的不同采用不同的方式加載動態(tài)鏈接庫,具體可以包括但不局限于下述方式,首先根據(jù)調(diào)用函數(shù)的函數(shù)信息獲取調(diào)用函數(shù)的函數(shù)類型,如該調(diào)用函數(shù)的函數(shù)類型為dll類型或者exe類型,當調(diào)用函數(shù)的函數(shù)類型為exe可直接執(zhí)行函數(shù)時,則說明模塊肯定已經(jīng)被加載過,進一步通過getmodulehandle獲取到模塊句柄,通過模塊句柄載入動態(tài)鏈接庫;當調(diào)用函數(shù)的函數(shù)類型為dll不可直接執(zhí)行函數(shù)時,則說明模塊可能已經(jīng)被加載過可能沒被加載過,進一步通過loadlibrary加載模塊載入動態(tài)鏈接庫。

對于本發(fā)明實施例,通過在程序執(zhí)行過程中加載動態(tài)鏈接庫,通過動態(tài)鏈接庫取得調(diào)用函數(shù)的地址進行函數(shù)調(diào)用,無需在程序運行之初加載所有代碼,只有在程序需要用某個調(diào)用函數(shù)時才從動態(tài)鏈接庫中取出調(diào)用函數(shù),減少了程序的體積。

208、將所述調(diào)用函數(shù)的調(diào)用信息實時的保存到內(nèi)存映射文件當中。

需要說明的是,本發(fā)明實施例還可通過創(chuàng)建一個緩沖區(qū)來存儲調(diào)用信息,進一步根據(jù)統(tǒng)計結(jié)果事件將調(diào)用信息保存至緩沖區(qū)內(nèi),本發(fā)明實施例對調(diào)用信息的存儲位置不進行限定。

209、生成調(diào)用函數(shù)的分析結(jié)果。

為了方便用戶對調(diào)用函數(shù)的分析結(jié)果進行保存分析,本發(fā)明實施例可以將生成調(diào)用函數(shù)的分析結(jié)果保存到內(nèi)存映射文件中,還可以將分析結(jié)果顯示在界面上,本發(fā)明實施例不進行限定。

由于在程序運行過程中,不同函數(shù)的調(diào)用情況有所不同,在函數(shù)保護的過程中,如果保護了調(diào)用次數(shù)過多的函數(shù),會導致程序運行效率低下,如果保護了調(diào)用次數(shù)過少的僵尸函數(shù),會使得保護后的可執(zhí)行程序體積過大,本發(fā)明實施例通過對調(diào)用函數(shù)的分析,能夠兼顧安全的情況下達到程序體積和效率的平衡,在檢查應用程序時候,通過對調(diào)用函數(shù)進行分析,能夠找到潛藏在可執(zhí)行程序當中的僵尸函數(shù)和調(diào)用次數(shù)特別多的函數(shù),幫助軟件開發(fā)人員優(yōu)化編寫的應用程序,同時在分析應用程序的過程中找到價值較高的關(guān)鍵函數(shù),從而對關(guān)鍵函數(shù)進行加殼保護。

本發(fā)明實施例的具體應用場景可以包括但不限制于下述實現(xiàn)方式:當程序執(zhí)行之前,首先創(chuàng)建內(nèi)存映射文件以及統(tǒng)計結(jié)果事件,內(nèi)存映射文件用于存儲調(diào)用函數(shù)的函數(shù)信息,統(tǒng)計結(jié)果事件用于統(tǒng)計調(diào)用函數(shù)的調(diào)用信息然后通過掛起的方式,然后創(chuàng)建分析進程,并且在分析進程中申請預設容量的動態(tài)內(nèi)存,并將用于分析調(diào)用函數(shù)的預設分析代碼載入動態(tài)內(nèi)存中,進一步啟動分析進程,傳遞分析進程的標識信息,根據(jù)分析進程的標識信息加載內(nèi)存映射文件以及統(tǒng)計結(jié)果事件,當程序執(zhí)行到調(diào)用函數(shù)時,跳轉(zhuǎn)至程序執(zhí)行的起始地址,對程序執(zhí)行過程中的調(diào)用函數(shù)進行分析,進一步加載需要注入分析進程的動態(tài)鏈接庫,根據(jù)動態(tài)鏈接庫中函數(shù)hook被保護的函數(shù)塊對調(diào)用函數(shù)進行監(jiān)控,若當前執(zhí)行程序需要調(diào)用v412_open函數(shù),進一步通過hook函數(shù)塊獲取v412_open函數(shù)的地址,根據(jù)v412_open函數(shù)的地址遍歷內(nèi)存映射文件中存儲的調(diào)用函數(shù)的相對虛擬地址,找到與v412_open函數(shù)地址相匹配的相對虛擬地址,更新匹配結(jié)果相一致的調(diào)用函數(shù)對應的調(diào)用信息,將v412_open函數(shù)的調(diào)用次數(shù)加1,最后v412_open函數(shù)的調(diào)用信息保存至內(nèi)存映射文件中。

為了進一步保證核心函數(shù)的安全性,本發(fā)明實施例提供的另一種調(diào)用函數(shù)的分析方法,通過對調(diào)用函數(shù)的調(diào)用情況進行監(jiān)控,從而幫助軟件開發(fā)人員找到價值較高的關(guān)鍵函數(shù),發(fā)掘程序運行中的核心函數(shù),進而對核心函數(shù)進行加殼保護。

進一步地,作為圖1所示方法的具體實現(xiàn),本發(fā)明實施例提供一種調(diào)用函數(shù)的分析裝置,該裝置實施例與前述方法實施例對應,為便于閱讀,本裝置不在對前述方法實施例中的細節(jié)內(nèi)容進行逐一贅述,但應當明確,本實施例中的裝置能夠?qū)獙崿F(xiàn)前述方法實施例中的全部內(nèi)容,如圖3所示,所述裝置包括:

獲取單元31,可以用于獲取調(diào)用函數(shù)對應的函數(shù)信息,所述獲取按壓31為本裝置中獲取調(diào)用函數(shù)對應的函數(shù)信息的主要功能模塊,其中,調(diào)用函數(shù)對應的函數(shù)信息可以包括但不局限于調(diào)用函數(shù)的名稱,調(diào)用函數(shù)的相對虛擬地址rva,調(diào)用函數(shù)的相對虛擬地址rva的個數(shù)以及程序執(zhí)行的起始地址等信息

分析單元32,可以用于當程序執(zhí)行至所述調(diào)用函數(shù)時,根據(jù)預設分析代碼對所述函數(shù)信息所對應調(diào)用函數(shù)的調(diào)用情況進行分析,所述分析單元32為本裝置中對調(diào)用函數(shù)進行分析的主要功能模塊,這里的預設分析代碼主要用于對調(diào)用函數(shù)的調(diào)用情況進行分析,具體可以包括進程標識傳遞模塊、程序起始地址添加模塊、動態(tài)鏈接庫的注入模塊、信息保存模塊等多個模塊。

生成單元33,可以用于生成調(diào)用函數(shù)的分析結(jié)果,所述生成單元33為本裝置中用于生成調(diào)用函數(shù)的分析結(jié)果的主要功能模塊。

本發(fā)明實施例提供的一種調(diào)用函數(shù)的分析裝置,通過在程序執(zhí)行到該調(diào)用函數(shù)時,根據(jù)預設分析代碼對函數(shù)信息所對應調(diào)用函數(shù)進行分析,能夠?qū)崟r監(jiān)控調(diào)用函數(shù)的調(diào)用情況,生成調(diào)用函數(shù)的分析結(jié)果。與現(xiàn)有技術(shù)的調(diào)用函數(shù)的分析方法相比,本發(fā)明實施例通過在程序運行過程中對調(diào)用函數(shù)進行分析,能夠得到程序執(zhí)行過程中函數(shù)的調(diào)用情況,進而根據(jù)函數(shù)的調(diào)用情況實時對程序的函數(shù)模塊進行優(yōu)化,提高可執(zhí)行程序的運行效率,另外,根據(jù)調(diào)用函數(shù)的調(diào)用情況可以找到程序運行的核心函數(shù),進而對核心函數(shù)進行保護,同時極大地節(jié)省了技術(shù)人員的時間。

進一步地,作為圖2所示方法的具體實現(xiàn),本發(fā)明實施例提供了另一種調(diào)用函數(shù)的分析裝置,該裝置實施例與前述方法實施例對應,為便于閱讀,本裝置不在對前述方法實施例中的細節(jié)內(nèi)容進行逐一贅述,但應當明確,本實施例中的裝置能夠?qū)獙崿F(xiàn)前述方法實施例中的全部內(nèi)容,如圖4所示,所述裝置包括:

第一創(chuàng)建單元41,可以用于通過掛起的方式創(chuàng)建分析進程,所述分析進程中包含有預設容量的動態(tài)內(nèi)存,所述第一創(chuàng)建單元41為本裝置中創(chuàng)建分析進程的主要功能模塊,這里為了用戶觀察和分析進程,通過掛起的方式創(chuàng)建分析進程;

載入單元42,可以用于將預設分析代碼載入所述動態(tài)內(nèi)存中,所述載入單元42為本裝置中用于將預設分析代碼載入動態(tài)內(nèi)存的主要功能模塊,具體可以通過組裝shellcode的方式來存儲各個模塊的預設分析代碼,然后將shellcode寫入到申請的動態(tài)內(nèi)存中;

第二創(chuàng)建單元43,可以用于創(chuàng)建內(nèi)存映射文件以及統(tǒng)計結(jié)果事件,所述內(nèi)存映射文件中存儲有調(diào)用函數(shù)的函數(shù)信息,所述第二創(chuàng)建單元43為本裝置中用于創(chuàng)建內(nèi)存映射文件以及統(tǒng)計結(jié)果事件的主要功能模塊,其中,內(nèi)存映射文件中存儲有調(diào)用函數(shù)的函數(shù)信息,該統(tǒng)計結(jié)果事件用于統(tǒng)計調(diào)用函數(shù)的調(diào)用信息;

獲取單元44,可以用于獲取調(diào)用函數(shù)對應的函數(shù)信息,所述獲取單元44為本裝置中獲取調(diào)用函數(shù)對應的函數(shù)信息的主要功能模塊,其中,調(diào)用函數(shù)對應的函數(shù)信息可以包括但不局限于調(diào)用函數(shù)的名稱,調(diào)用函數(shù)的相對虛擬地址rva,調(diào)用函數(shù)的相對虛擬地址rva的個數(shù)以及程序執(zhí)行的起始地址等信息

分析單元45,可以用于當程序執(zhí)行至所述調(diào)用函數(shù)時,根據(jù)所述預設分析代碼對所述函數(shù)信息所對應調(diào)用函數(shù)的調(diào)用情況進行分析,所述分析單元45為本裝置中對調(diào)用函數(shù)進行分析的主要功能模塊,這里的預設分析代碼主要用于對調(diào)用函數(shù)的調(diào)用情況進行分析,具體可以包括進程標識傳遞模塊、程序起始地址添加模塊、動態(tài)鏈接庫的注入模塊、信息保存模塊等多個模塊。

生成單元46,可以用于生成調(diào)用函數(shù)的分析結(jié)果,所述生成單元46為本裝置中用于生成調(diào)用函數(shù)的分析結(jié)果的主要功能模塊。

進一步地,所述分析單元45包括:

加載模塊451,可以用于傳遞所述分析進程的標識信息,根據(jù)所述標識信息加載所述分析進程中的內(nèi)存映射文件以及統(tǒng)計結(jié)果事件;

添加模塊452,可以用于根據(jù)所述內(nèi)存映射文件將程序執(zhí)行的起始地址添加至所述預設分析代碼中,當所述分析進程執(zhí)行時跳轉(zhuǎn)至所述程序執(zhí)行的起始地址;

分析模塊453,可以用于加載需要注入至所述分析進程的動態(tài)鏈接庫,根據(jù)所述動態(tài)鏈接庫中的監(jiān)控函數(shù)塊對所述調(diào)用函數(shù)進行分析,得到調(diào)用函數(shù)的調(diào)用信息;

保存模塊454,用于將所述調(diào)用函數(shù)的調(diào)用信息實時的保存到內(nèi)存映射文件當中。

進一步地,所述分析模塊453,具體可以用于根據(jù)所述內(nèi)存映射文件獲取所述調(diào)用函數(shù)的函數(shù)信息;

所述分析模塊453,具體還可以用于啟動所述動態(tài)鏈接庫中的函數(shù)hook被保護程序的函數(shù)塊作為監(jiān)控函數(shù)塊;

所述分析模塊453,具體還可以用于根據(jù)所述函數(shù)hook被保護程序的函數(shù)塊監(jiān)控所述調(diào)用函數(shù)的調(diào)用情況,得到所述調(diào)用函數(shù)的調(diào)用信息。

進一步地,在所述啟動所述動態(tài)鏈接庫中的函數(shù)hook被保護程序的函數(shù)塊作為監(jiān)控函數(shù)塊之前,所述分析模塊453,具體還可以用于根據(jù)所述調(diào)用函數(shù)的函數(shù)信息獲取所述調(diào)用函數(shù)的函數(shù)類型;

所述分析模塊453,具體還可以用當所述調(diào)用函數(shù)的函數(shù)類型為可直接執(zhí)行函數(shù)時,通過模塊句柄載入動態(tài)鏈接庫;

所述分析模塊453,具體還可以用當所述調(diào)用函數(shù)的函數(shù)類型為不可直接執(zhí)行函數(shù)時,通過加載模塊載入動態(tài)鏈接庫。

進一步地,所述分析模塊453,具體還可以用于當調(diào)用函數(shù)被調(diào)用時,通過所述函數(shù)hook被保護的函數(shù)塊獲取所述調(diào)用函數(shù)的地址;

所述分析模塊453,具體還可以用于根據(jù)所述調(diào)用函數(shù)的地址遍歷所述內(nèi)存映射文件中存儲的調(diào)用函數(shù)的相對虛擬地址,得到匹配結(jié)果相一致的調(diào)用函數(shù)對應的調(diào)用信息;

所述分析模塊453,具體還可以用于更新匹配結(jié)果相一致的調(diào)用函數(shù)對應的調(diào)用信息,將所述調(diào)用信息保存至所述內(nèi)存映射文件中。

進一步地,所述獲取單元44,具體可以用于啟動所述分析進程,通過所述內(nèi)存映射文件獲取所述調(diào)用函數(shù)的函數(shù)信息。

由于在程序運行過程中,不同函數(shù)的調(diào)用情況有所不同,在函數(shù)保護的過程中,如果保護了調(diào)用次數(shù)過多的函數(shù),會導致程序運行效率低下,如果保護了調(diào)用次數(shù)過少的僵尸函數(shù),會使得保護后的可執(zhí)行程序體積過大,本發(fā)明實施例通過對調(diào)用函數(shù)的分析,能夠兼顧安全的情況下達到程序體積和效率的平衡,在檢查應用程序時候,通過對調(diào)用函數(shù)進行分析,能夠找到潛藏在可執(zhí)行程序當中的僵尸函數(shù)和調(diào)用次數(shù)特別多的函數(shù),幫助軟件開發(fā)人員優(yōu)化編寫的應用程序,同時在分析應用程序的過程中找到價值較高的關(guān)鍵函數(shù),從而對關(guān)鍵函數(shù)進行加殼保護。

本發(fā)明實施例提供的另一種調(diào)用函數(shù)的分析裝置,通過對調(diào)用函數(shù)的調(diào)用情況進行監(jiān)控,從而幫助軟件開發(fā)人員找到價值較高的關(guān)鍵函數(shù),發(fā)掘程序運行中的核心函數(shù),進而對核心函數(shù)進行加殼保護。

所述調(diào)用函數(shù)的分析裝置包括處理器和存儲器,上述獲取單元31、分析單元32和生成單元33等均作為程序單元存儲在存儲器中,由處理器執(zhí)行存儲在存儲器中的上述程序單元來實現(xiàn)相應的功能。

處理器中包含內(nèi)核,由內(nèi)核去存儲器中調(diào)取相應的程序單元。內(nèi)核可以設置一個或以上,通過調(diào)整內(nèi)核參數(shù)來節(jié)省人力,能夠?qū)崿F(xiàn)調(diào)用函數(shù)的分析,通過性能分析能夠兼顧保護后可執(zhí)行程序的體積和運行效率的平衡。

存儲器可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram),存儲器包括至少一個存儲芯片。

本申請還提供了一種計算機程序產(chǎn)品,當在數(shù)據(jù)處理設備上執(zhí)行時,適于執(zhí)行初始化有如下方法步驟的程序代碼:獲取調(diào)用函數(shù)對應的函數(shù)信息,當程序執(zhí)行至所述調(diào)用函數(shù)時,根據(jù)預設分析代碼對所述函數(shù)信息所對應調(diào)用函數(shù)的調(diào)用情況進行分析,生成調(diào)用函數(shù)的分析結(jié)果。

本領域內(nèi)的技術(shù)人員應明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。

本申請是參照根據(jù)本申請實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

在一個典型的配置中,計算設備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡接口和內(nèi)存。

存儲器可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。存儲器是計算機可讀介質(zhì)的示例。

計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。

以上僅為本申請的實施例而已,并不用于限制本申請。對于本領域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應包含在本申請的權(quán)利要求范圍之內(nèi)。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1