一種未導出的函數(shù)地址和數(shù)據結構偏移的獲取方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及網絡安全技術,特別涉及一種未導出的函數(shù)地址和數(shù)據結構偏移的獲取方法及裝置。
【背景技術】
[0002]基于虛擬機的軟件監(jiān)控技術是利用虛擬機技術,以實現(xiàn)在最底層對操作系統(tǒng)中的進程、線程、模塊、文件、網絡等行為進行監(jiān)控。利用該技術,我們就可以針對各種對操作系統(tǒng)產生的危害可以進行分析處理了。但基于虛擬機的軟件監(jiān)控技術基本上要依賴于特定的操作系統(tǒng),如特定的操作種類(Windows,Linux),特定的版本(Windows XP/7,Debian 7/8),特定的內核編譯選項等等約束。
[0003]目前,基于虛擬機的軟件監(jiān)控技術一般有如下幾種方式:純用戶態(tài)的軟件監(jiān)控技術、基于驅動程序的軟件監(jiān)控技術、基于代理程序和虛擬機結合的軟件監(jiān)控技術和純虛擬機的軟件監(jiān)控技術。其中,純虛擬機的軟件監(jiān)控技術對監(jiān)控的目標程序完全透明,目標程序無法知道監(jiān)控機制的存在,而且還可以做全系統(tǒng)監(jiān)控,從用戶態(tài)到內核態(tài),所有進程、線程、指令等都能實現(xiàn)監(jiān)控;而且,此技術完全在虛擬機層面來實現(xiàn)對內部的操作系統(tǒng)進行監(jiān)控,不需要借助操作系統(tǒng)的任何代理程序即可完成監(jiān)控而成為主要的監(jiān)控方式,基于上述各種優(yōu)點,使得純虛擬機的軟件監(jiān)控技術成為目前監(jiān)控的主要方式。但是,該利用純虛擬機的軟件監(jiān)控技術進行監(jiān)控時,必須要知道被監(jiān)控操作系統(tǒng)的內部關鍵函數(shù)的位置和關鍵數(shù)據結構的定義,否則無法從操作系統(tǒng)外層來區(qū)分哪些數(shù)據是描述進程對象的,哪些數(shù)據是描述文件對象的。因此要實現(xiàn)這種監(jiān)控技術,首先要明確被監(jiān)控的操作系統(tǒng)的種類,版本等各種信息,通過操作系統(tǒng)的關鍵文件(例如內核文件),自動或者人工的分析出關鍵的函數(shù)位置和關鍵的數(shù)據結構定義。比如Windows系統(tǒng),可以通過內核文件的I3DB文件,來獲取關鍵函數(shù)和關鍵數(shù)據結構。這個可以使用程序自動化完成。如果是Linux系統(tǒng),一般情況下,Linux系統(tǒng)的內核文件內部有一段符號信息。雖然這些符號信息可以定位某些關鍵函數(shù)(但并非所有),但符號信息中不包含數(shù)據結構的信息。Linux數(shù)據結構信息雖然在源代碼里都有,但不同的版本很多都是有差異的,即便是同一個版本,不同的編譯選項,也會造成數(shù)據結構的差異,對于這些差異,現(xiàn)有技術基本上只能是支持已知版本,已知編譯選項的Linux系統(tǒng)的監(jiān)控。對于未知版本,未知編譯選項,只能靠人工逆向的方式來確定,這樣很浪費人力和時間。
【發(fā)明內容】
[0004]本發(fā)明實施例提供了一種未導出的函數(shù)地址的獲取方法及裝置,用以實現(xiàn)未導出的函數(shù)地址的自動獲取,以解決現(xiàn)有技術中靠人工獲取未導出的函數(shù)地址所造成的人力浪費問題,同時提高系統(tǒng)支持效率。
[0005]本發(fā)明實施例提供了一種未導出的函數(shù)地址和數(shù)據結構偏移的獲取方法,所述方法包括:
[0006]在從待監(jiān)控系統(tǒng)的內核文件直接獲取到的地址中選擇合適的地址作為固定點;
[0007]從待監(jiān)控系統(tǒng)的內核文件中找出與所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù)存在訪問關系的指定函數(shù),并在所述固定點處將所述指定函數(shù)的地址設置為斷點;
[0008]當待監(jiān)控系統(tǒng)的內核執(zhí)行到所述斷點時,調用控制函數(shù),通過所述控制函數(shù)找出與所述指定函數(shù)存在訪問關系的所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù),獲取所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù)的數(shù)據屬性;其中所述數(shù)據屬性是所述未導出的函數(shù)地址和/或數(shù)據結構偏移的屬性信息;
[0009]所述內核根據所述數(shù)據屬性,確定所述未導出的函數(shù)地址和/或數(shù)據結構偏移。
[0010]本發(fā)明實施例提供的方法中,通過選擇固定點,并在所述固定點上設置斷點,當所述待監(jiān)控系統(tǒng)的內核執(zhí)行到所述斷點時,調用控制函數(shù),通過所述控制函數(shù)找出與所述指定函數(shù)存在訪問關系的所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù),獲取所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù)的數(shù)據屬性;其中所述數(shù)據屬性是所述未導出的函數(shù)地址和/或數(shù)據結構偏移的屬性信息;所述內核根據所述數(shù)據屬性,確定所述未導出的函數(shù)地址和/或數(shù)據結構偏移。這樣,不需要知道系統(tǒng)的版本和編譯選項,也能夠實現(xiàn)未導出的函數(shù)地址的自動獲取,解決了現(xiàn)有技術中靠人工獲取未導出的函數(shù)地址所造成的人力浪費問題。并且,通過該方法還可以大大提高實際運行的操作系統(tǒng)的支持效率,節(jié)省人力成本和時間。
[0011 ]較佳的,所述并在所述固定點處將所述指定函數(shù)的地址設置為斷點,包括:
[0012]在所述固定點處將所述指定函數(shù)地址設置為代碼執(zhí)行斷點和/或數(shù)據讀寫斷點。
[0013]較佳的,所述數(shù)據讀寫斷點為從所述斷點位置開始到預設長度結束的內存區(qū)域中的區(qū)域性斷點。
[0014]較佳的,所述方法具體包括:
[0015]在從待監(jiān)控系統(tǒng)的內核文件直接獲取到的地址中選擇合適的地址作為固定點;
[0016]從待監(jiān)控系統(tǒng)的內核文件中找出與所述未導出的函數(shù)地址的函數(shù)存在訪問關系的指定函數(shù),并在所述固定點處將所述指定函數(shù)的地址設置為碼執(zhí)行斷點和/或數(shù)據讀寫斷點;
[0017]當待監(jiān)控系統(tǒng)的內核執(zhí)行到所述碼執(zhí)行斷點和/或數(shù)據讀寫斷點時,調用所述控制函數(shù),通過所述控制函數(shù)找出與所述指定函數(shù)存在訪問關系的所述未導出的函數(shù)地址的函數(shù),獲取所述未導出的函數(shù)地址的函數(shù)的數(shù)據屬性;
[0018]所述內核根據所述未導出的函數(shù)地址的函數(shù)的數(shù)據屬性,確定所述未導出的函數(shù)地址;
[0019]從待監(jiān)控系統(tǒng)的內核文件中找出與所述未導出的數(shù)據偏移結構的函數(shù)存在訪問關系的指定函數(shù),并在新的固定點上將該指定函數(shù)的地址設置為代碼執(zhí)行斷點和/或數(shù)據讀寫斷點;
[0020]當待監(jiān)控系統(tǒng)的內核執(zhí)行到所述代碼執(zhí)行斷點和/或數(shù)據讀寫斷點時,調用所述控制函數(shù),通過所述控制函數(shù)找出與所述指定函數(shù)存在訪問關系的所述未導出的數(shù)據結構偏移的函數(shù),獲取所述未導出的數(shù)據結構偏移的函數(shù)的數(shù)據屬性;
[0021]所述內核根據所述未導出的數(shù)據結構偏移的函數(shù)的數(shù)據屬性,確定所述未導出的數(shù)據結構偏移。
[0022]較佳的,在所述在新的固定點上設置代碼執(zhí)行斷點和/或數(shù)據讀寫斷點之前,所述方法還包括:將所述找出的未導出的函數(shù)地址作為新的固定點。
[0023]較佳的,所述方法還包括:采用傳統(tǒng)斷點調試技術或虛擬機技術實現(xiàn)代碼執(zhí)行斷點和數(shù)據讀寫斷點。
[0024]基于同一發(fā)明構思,本發(fā)明實施例還提供了一種未導出的函數(shù)地址和數(shù)據結構偏移的獲取裝置,所述裝置包括:
[0025]設置模塊,用于在從待監(jiān)控系統(tǒng)的內核文件直接獲取到的地址中選擇合適的地址作為固定點;以及,從待監(jiān)控系統(tǒng)的內核文件中找出與所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù)存在訪問關系的指定函數(shù),并在所述固定點處將所述指定函數(shù)的地址設置為斷點;
[0026]觸發(fā)模塊,用于當待監(jiān)控系統(tǒng)的內核執(zhí)行到所述斷點時,調用控制函數(shù),通過所述控制函數(shù)找出與所述指定函數(shù)存在訪問關系的所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù),獲取所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù)的數(shù)據屬性;其中所述數(shù)據屬性是所述未導出的函數(shù)地址和/或數(shù)據結構偏移的屬性信息;
[0027]獲取模塊,用于根據所述數(shù)據屬性,確定所述未導出的函數(shù)地址和/或數(shù)據結構偏移。
[0028]本發(fā)明實施例中,通過置模塊在系統(tǒng)中選擇固定點,并在所述固定點上設置斷點,當所述系統(tǒng)內核執(zhí)行到所述斷點時,調用控制函數(shù),通過所述控制函數(shù)找出與所述指定函數(shù)存在訪問關系的所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù),獲取所述未導出的函數(shù)地址和/或數(shù)據結構偏移的函數(shù)的數(shù)據屬性;其中所述數(shù)據屬性是所述未導出的函數(shù)地址和/或數(shù)據結構偏移的屬性信息;所述內核根據所述數(shù)據屬性,確定所述未導出的函數(shù)地址和/或數(shù)據結構偏移。這樣,不需要知道系統(tǒng)的版本和編譯選項,也能夠實現(xiàn)未導出的函數(shù)地址的自動獲取,解決了現(xiàn)有技術中靠人工獲取未導出的函數(shù)地址所造成的人力浪費問題。并且,通過該方法還可以大大提高實際運行的操作系統(tǒng)的支持效率,節(jié)省人力成本和時間。
[0029]較佳的,所述斷點包括代碼執(zhí)行斷點和/或數(shù)據讀寫斷點;
[0030]其中所述數(shù)據讀寫斷點是從設置數(shù)據讀寫斷點初始位置起始到預設長度結束的內存區(qū)域中的區(qū)域性斷點。
[0031]較佳的,所述觸發(fā)模塊,具體用于當待監(jiān)控系統(tǒng)的內核執(zhí)行到所述代碼執(zhí)行斷點和/或數(shù)據讀寫斷點時,調用所述控制函數(shù),通過所述控制函數(shù)找出與所述指定函數(shù)存在訪問關系的所述未導出的函數(shù)地址的函數(shù),獲取所述未導出的函數(shù)地址的函數(shù)的數(shù)據屬性;以及,當待監(jiān)控系統(tǒng)的內核執(zhí)行到所述碼執(zhí)行斷點和/或數(shù)據讀寫斷點時,調用所述控制函數(shù),通過所述控制函數(shù)找出與所述指定函數(shù)存在訪問關系的所述未導出的數(shù)據結構偏移的函數(shù),獲取所述未導出的數(shù)據結構偏移的函數(shù)的數(shù)據屬性;
[0032]所述獲取模塊,具體用于根據所述未導出的函數(shù)地址的函數(shù)的數(shù)據屬性,確定所述未導出的函數(shù)地址;以及,根據所述未導出的數(shù)據結構偏移的函數(shù)的數(shù)據屬性,確定所述未導出的數(shù)據結構偏移。
[0033]較佳的,所述設置模塊還用于:將所述找出的未導出的函數(shù)地址作為新的固定點?!靖綀D說明】
[0034]圖1為本申請實施例提供的一種未導出的函數(shù)地址和/或數(shù)據結構偏移的獲取方法流程示意圖;
[0035]圖2為本申請實施例提供的另一種未導出的函數(shù)地址和/或數(shù)據結構偏移的獲取方法流程示意圖;
[0036]圖3為本申請實施例提供的利用靜態(tài)匹配特征找出未導出的函數(shù)地址和/或數(shù)據結構偏移的方法流程示意圖;
[0037]圖4為本申請實施例提供的一種未導出的函數(shù)地址的獲取裝置的功能結構示意圖。
【具體