一種進程調試檢測方法及裝置與流程
2023-10-08 22:18:34

本申請涉及app安全技術領域,尤其涉及一種進程調試檢測方法及裝置。
背景技術:
隨著移動網際網路產業快速發展,行動應用程式(application,簡稱app)呈井噴式爆發,尤其是應用較為廣泛的android系統應用程式。然而,因android系統本身的開源特性,android系統應用程式與個人計算機(personalcomputer,pc)一樣也成為黑客攻擊的主要對象,android系統應用程式容易遭受病毒、木馬、動態調試、流氓軟體和釣魚軟體的攻擊,嚴重影響了客戶端的安全、降低了用戶體驗和應用程式開發者的收益。
其中,通過動態調試攻擊,攻擊者可以利用調試器跟蹤目標應用程式進程(簡稱目標進程)的運行,查看、修改內存代碼和數據,分析應用程式邏輯,進行攻擊和破解等行為。例如,對於金融行業應用程式而言,通過動態調試攻擊,可能會修改應用程式業務操作時的數據,比如帳號、金額等。因此,如何檢測出目標進程是否被調試顯得尤為重要。
技術實現要素:
本申請實施例的目的在於,提供一種進程調試檢測方法及裝置,以檢測出目標進程是否被其它進程調試。
第一方面,本申請實施例提供了一種進程調試檢測方法,包括:
通過預設接口對proc文件系統中的目標文件進行監控;所述目標文件是目標進程在運行時對應於內存中的文件;
在接收到所述預設接口返回的目標消息時,確定所述目標進程被調試,所述目標消息為對所述目標文件進行讀寫操作的通知消息。
可選地,所述預設接口為inotify接口。
可選地,所述目標文件包括下述至少一種:
所述目標進程對應的/proc/目錄下的meminfo文件;
所述目標進程對應的/proc/目錄下的status文件。
可選地,在所述確定所述目標進程被調試後,所述方法還包括:
結束所述目標進程。
可選地,在所述確定所述目標進程被調試後,所述方法還包括:
輸出所述目標進程被調試的提示信息。
第二方面,本申請實施例提供了一種進程調試檢測裝置,所述裝置包括:
監控模塊,用於通過預設接口對proc文件系統中的目標文件進行監控;所述目標文件是目標進程在運行時對應於內存中的文件;
結果確定模塊,用於在接收到所述預設接口返回的目標消息時,確定所述目標進程被調試,所述目標消息為對目標文件進行讀寫操作的通知消息。
可選地,所述預設接口為inotify接口。
可選地,所述目標文件包括下述至少一種:
所述目標進程對應的/proc/目錄下的meminfo文件;
所述目標進程對應的/proc/目錄下的status文件。
可選地,所述裝置還包括:
進程結束模塊,用於在所述確定所述目標進程被調試後,結束所述目標進程。
可選地,所述裝置還包括:
提示信息輸出模塊,用於在所述確定所述目標進程被調試後,輸出所述目標進程被調試的提示信息。
由於目標進程沒有被調試、正常運行時,proc文件系統中存儲的目標進程對應的文件(目標文件)是不會被執行讀寫操作的,因此,本申請實施例採用的上述至少一個技術方案,能夠達到以下有益效果:通過預設接口監控目標文件是否被執行讀寫操作,可以確定出目標進程是否被其它進程所調試,以方便及時採取相應的反調試措施,防止對目標進程的內存等進行讀取篡改,保護目標進程及用戶信息的安全,提高了用戶體驗。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用於解釋本申請,並不構成對本申請的不當限定。在附圖中:
圖1為本申請實施例1提供的一種進程調試檢測方法的流程圖;
圖2為本申請實施例2提供的一種進程調試檢測方法的流程圖;
圖3為本申請實施例3提供的一種進程調試檢測方法的流程圖;
圖4為本申請實施例4提供的一種進程調試檢測裝置的結構示意圖;
圖5為本申請實施例5提供的一種進程調試檢測裝置的結構示意圖;
圖6為本申請實施例6提供的一種進程調試檢測裝置的結構示意圖。
具體實施方式
為使本申請的目的、技術方案和優點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例。基於本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本申請保護的範圍。
為了解決現有技術中存在的問題,防止動態調試對android系統應用程式運行時的內存數據被讀取、篡改,本發明實施例提出了一種進程調試檢測方法及裝置。
下面先對本發明實施例提供的一種進程調試檢測方法進行說明。
首先,需要說明的是,本申請實施例提供的一種進程調試檢測方法的執行主體可以是安裝有android系統的電子設備,例如,手機、平板電腦等等。所述的執行主體並不構成對本申請的限定,為了便於描述,本申請實施例均以執行主體是安裝有android系統的手機為例進行說明。
實現本申請實施例所提供的一種進程調試檢測方法的功能軟體可以為安全軟體、安全軟體中的功能模塊等。所述的功能軟體也不構成對本申請的限定。
以下結合附圖,詳細說明本申請各實施例提供的技術方案。
實施例1
請參考圖1,圖1為本發明實施例1提供的一種進程調試檢測方法的流程圖。由於android系統中的proc文件系統暴露了大量的進程信息,調試器通過proc文件系統能夠實現對內存的讀和寫的操作,因此,如圖1所示,本申請實施例1提供的一種進程調試檢測方法,可以包括:
s101、通過預設接口對proc文件系統中的目標文件進行監控;所述目標文件是目標進程在運行時對應於內存中的文件;
android系統是基於linux內核的作業系統,linux系統中的proc文件系統是一種文件系統,該文件系統的根目錄為/proc。與其它常見的文件系統不同的是,proc文件系統是一種偽文件系統(也即虛擬文件系統),/proc中存儲的是當前內核運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關系統硬體及當前正在運行的進程的信息。
基於proc文件系統如上所述的特殊性,proc文件系統內的文件也常被稱作虛擬文件,並具有一些獨特的特點。例如,雖然使用查看命令查看其中的一些文件時會返回大量信息,但這些文件本身的大小卻會顯示為0位元組。
為了查看及使用上的方便,這些虛擬文件通常被按照相關性分類存儲於不同的目錄甚至子目錄中。例如,/proc/scsi目錄中存儲的是當前系統上所有小型計算機系統接口(smallcomputersysteminterface,scsi)設備的相關信息;/proc/pid中存儲的是系統當前正在運行的進程的相關信息,其中pid為正在運行的進程的進程號,可以想像得到,在某進程結束後與該進程相關的目錄會自動消失。
在本申請實施例中,目標進程為待檢測的進程,一般由用戶指定,也可以預先設定。
在linux系統中,每一個進程都有一個進程號(pid或pid),進程號是一個正數,用以唯一標識系統中的某個進程。由於/proc/pid中存儲的是與進程號為pid(例如222)的進程相關的信息,因此,可以通過目標進程的進程號在proc文件系統中確定目標進程在運行時對應於內存中的文件。
在一種可選的實施方式中,proc文件系統中的proc/pid/meminfo文件中存儲的是各進程佔用的內存信息,在目標進程沒有被調試、正常運行時,proc/pid/meminfo文件中存儲的目標進程佔用的內存信息是不會被執行讀寫操作的,如果監控到這些文件被執行讀寫操作時,說明存在目標進程外的其他進程在對目標進程進行調試。因此,所述目標文件是所述目標進程對應的/proc/目錄下的meminfo文件。
在另一種可選的實施方式中,proc文件系統中的/proc/pid/status中存儲的是各進程的進程狀態信息,在目標進程沒有被調試、正常運行時,/proc/pid/status中存儲的目標進程的狀態信息也是不會被執行讀寫操作的,如果監控到這些文件被執行讀寫操作時,說明存在目標進程外的其他進程在對目標進程進行調試。因此,所述目標文件是所述目標進程對應的/proc/目錄下的status文件。
因此,所述目標文件包括下述至少一種:
所述目標進程對應的/proc/目錄下的meminfo文件;
所述目標進程對應的/proc/目錄下的status文件。
在一種可選的實施方式中,所述預設接口為inotify接口。
inotify是一個linux內核特性,用於通知用戶空間程序文件系統發生變化的機制,它監控文件系統,並且及時向專門的應用程式發出相關的事件通知,比如將文件的增加、刪除、讀和寫操作等事件通知用戶空間。在本實施例中,所述的專門的應用程式可以是實施本申請的功能軟體。
具體實現時,通過inotify接口對proc文件系統中的目標文件進行監控可以包括:首先創建一個inotify實例;然後添加與待監控的目標文件數量相等的多個inotify監視器(watch)至創建的inotify實例中,用於監控目標文件,一個監視器可以用一個二元組(目標,事件掩碼)表示,其中,目標表示待監控的一個文件或目錄,事件掩碼表示期望監控的inotify事件。
在另一種可選的實施方式中,所述預設接口可以為自定義的、能夠對目標文件進行監控,並能返回通知消息的接口。本申請實施例對所述預設接口的具體形式不做限定。
s102在接收到所述預設接口返回的目標消息時,確定所述目標進程被調試,所述目標消息為對所述目標文件進行讀寫操作的通知消息。
一般情況下,如果有進程對proc文件系統中的文件進行讀寫操作時,預設接口就會被觸發並返回通知消息,所述通知消息中會包括:被操作的文件名稱、操作的類型。其中操作的類型包括:讀操作、寫操作等。
具體的,所述目標消息可以包括:目標文件的名稱、操作的類型。
本申請實施例1提供的一種進程調試檢測方法,可以通過預設接口對proc文件系統中的目標進程對應的目標文件進行監控,確定是否存在對目標文件進行讀寫操作的情況。由於目標進程沒有被調試、正常運行時,proc文件系統中存儲的目標進程對應的文件(目標文件)是不會被執行讀寫操作的,因此,通過預設接口監控目標文件是否被執行讀寫操作,可以有效地確定出目標進程是否被其它進程所調試,以方便及時採取相應的反調試措施,防止對目標進程的內存等進行讀取篡改,保護目標進程及用戶信息的安全,提高了用戶體驗。
此外,本申請實施例1提供的一種進程調試檢測方法實現過程簡單,系統開銷小,不影響用戶對目標進程對應的應用程式的應用體驗。
下面以一個具體的實施例,說明在實際應用場景中如何對一個應用程式實施本方案,該應用程式運行時在作業系統中所創建的進程即為目標進程。
步驟1,在任務管理器中確定目標進程的進程號xx;
步驟2,根據目標進程的進程號xx,確定存儲在proc/xx/meminfo目錄下的目標進程的文件,也即確定需要監控的目標文件;
步驟3,創建一個inotify實例,具體實現函數可以為:intfd=inotify_init,其中,fd是inotify_init返回的文件描述符。
步驟4,添加與目標文件數量相等的多個inotify監視器(watch)至創建的inotify實例中,每一個監視器用一個二元組(目標,事件掩碼)表示,其中,目標表示待監控的一個目標文件或目錄,事件掩碼表示期望監控的inotify事件。
具體實現函數可以為:intwd=inotify_add_watch(path,mask),其中,path是被監視的目標文件的文件名或目錄名,mask是事件掩碼,wd是監視器的描述符。
步驟5,當目標文件被執行讀寫操作時,監視器會返回監控到的事件,根據返回的事件可以確定通知消息的具體內容,也即可以確定對目標文件執行了讀操作還是寫操作。具體實現時,事件用一個inotify_event結構表示。
實施例2
請參考圖2,圖2為本發明實施例2提供的一種進程調試檢測方法的流程圖。圖2所示的實施例提供的一種進程調試檢測方法與圖1所示的實施例的不同之處在於,所述方法還可以包括:
s103、結束所述目標進程。
不難理解,結束所述目標進程是一種較為有效地反調試措施,將所述目標進程結束,可以有效地阻止動態調試攻擊,能夠避免目標進程對應的應用程式的邏輯被破解、內存代碼和數據被查看或修改,為用戶信息的安全提供了保障。
實施例3
請參考圖3,圖3為本發明實施例3提供的一種進程調試檢測方法的流程圖。圖3所示的實施例提供的一種進程調試檢測方法與圖1所示的實施例的不同之處在於,所述方法還可以包括:
s104、輸出所述目標進程被調試的提示信息。
所述提示信息可以包含:目標進程正在被惡意程序調試的信息;也可以進一步包含:建議信息,例如,建議用戶結束目標進程,建議用戶採用安全軟體對惡意程序進行查殺等。
不難理解,輸出提示信息可以提示用戶所述目標進程被調試,以使用戶採取反調試措施,進而阻止動態調試攻擊,能夠避免目標進程對應的應用程式的邏輯被破解、內存代碼和數據被查看或修改,為用戶信息的安全提供了保障。
另外,可以理解的是,除上述實施例2和實施例3提供的反調試措施外,本領域技術人員可以採取現有技術中存在的其他反調試措施,這都是合理的,此處不再贅述。
通過實施例2和實施例3提供的反調技術,對目標進程的內存信息的訪問進行了嚴格的控制,保護內存中臨時存在的敏感信息不被讀取,同時可以杜絕對目標進程運行時的程序數據做動態調試分析,有效地防止了各類調試工具對目標進程的動態調試。
需要說明的是,實施例1所提供方法的各步驟的執行主體均可以是同一設備,或者,該方法也由不同設備作為執行主體。比如,步驟s101的執行主體可以為設備1,步驟s102的執行主體可以為設備2,等等。
相應於上述方法實施例,本申請還提供了一種進程調試檢測裝置,下面結合具體實施例予以說明。
實施例4
請參考圖4,圖4為本發明實施例4提供的一種進程調試檢測裝置的結構示意圖。如圖4所示,本申請實施例4提供的一種進程調試檢測裝置,可以包括:
監控模塊401,用於通過預設接口對proc文件系統中的目標文件進行監控;所述目標文件是目標進程在運行時對應於內存中的文件;
目標進程為待檢測的進程,一般由用戶指定,也可以預先設定。
在linux系統中,每一個進程都有一個進程號(pid),進程號是一個正數,用以唯一標識系統中的某個進程。由於/proc/pid中存儲的是與進程號為pid的進程相關的信息,因此,可以通過目標進程的進程號在proc文件系統中確定目標進程在運行時對應於內存中的文件。
在一種可選的實施方式中,proc文件系統中的/proc/pid/meminfo文件中存儲的是各進程佔用的內存信息,在目標進程沒有被調試、正常運行時,/proc/pid/meminfo文件中存儲的目標進程佔用的內存信息是不會被執行讀寫操作的,如果監控到這些文件被執行讀寫操作時,說明存在目標進程外的其他進程在對目標進程進行調試。因此,所述目標文件是所述目標進程對應的/proc/目錄下的meminfo文件。
在另一種可選的實施方式中,proc文件系統中的/proc/pid/status中存儲的是各進程的進程狀態信息,在目標進程沒有被調試、正常運行時,/proc/pid/status中存儲的目標進程的狀態信息也是不會被執行讀寫操作的,如果監控到這些文件被執行讀寫操作時,說明存在目標進程外的其他進程在對目標進程進行調試。因此,所述目標文件是所述目標進程對應的/proc/目錄下的status文件。
因此,所述目標文件包括下述至少一種:
所述目標進程對應的/proc/目錄下的meminfo文件;
所述目標進程對應的/proc/目錄下的status文件。
在一種可選的實施方式中,所述預設接口為inotify接口。
在另一種可選的實施方式中,所述預設接口可以為自定義的、能夠對目標文件進行監控,並能返回通知消息的接口。本申請實施例對所述預設接口的具體形式不做限定。
結果確定模塊402,用於在接收到所述預設接口返回的目標消息時,確定所述目標進程被調試,所述目標消息為對目標文件進行讀寫操作的通知消息。
一般情況下,如果有進程對proc文件系統中的文件進行讀寫操作時,預設接口就會被觸發並返回通知消息,所述通知消息中會包括:被操作的文件名稱、操作的類型。其中操作的類型包括:讀操作、寫操作等。
進而,具體的,所述目標消息可以包括:目標文件的名稱、操作的類型。
本申請實施例4提供的一種進程調試檢測裝置,可以通過預設接口對proc文件系統中的目標進程對應的目標文件進行監控,確定是否存在對目標文件進行讀寫操作的情況。由於目標進程沒有被調試、正常運行時,proc文件系統中存儲的目標進程對應的文件(目標文件)是不會被執行讀寫操作的,因此,通過預設接口監控目標文件是否被執行讀寫操作,可以有效地確定出目標進程是否被其它進程所調試,以方便及時採取相應的反調試措施,防止對目標進程的內存等進行讀取篡改,保護目標進程及用戶信息的安全,提高了用戶體驗。
實施例5
請參考圖5,圖5為本發明實施例5提供的一種進程調試檢測裝置的結構示意圖。圖5所示的實施例提供的一種進程調試檢測方法與圖4所示的實施例的不同之處在於,所述裝置還可以包括:
進程結束模塊,用於在所述確定所述目標進程被調試後,結束所述目標進程。
不難理解,結束所述目標進程是一種較為有效地反調試措施,將所述目標進程結束,可以有效地阻止動態調試攻擊,能夠避免目標進程對應的應用程式的邏輯被破解、內存代碼和數據被查看或修改,為用戶信息的安全提供了保障。
實施例6
請參考圖6,圖6為本發明實施例6提供的一種進程調試檢測裝置的結構示意圖。圖6所示的實施例提供的一種進程調試檢測方法與圖4所示的實施例的不同之處在於,所述裝置還可以包括:
提示信息輸出模塊,用於在所述確定所述目標進程被調試後,輸出所述目標進程被調試的提示信息。
所述提示信息可以包含:目標進程正在被惡意程序調試的信息;也可以進一步包含:建議信息,例如,建議用戶結束目標進程,建議用戶採用安全軟體對惡意程序進行查殺等。
不難理解,輸出提示信息可以提示用戶所述目標進程被調試,以使用戶採取反調試措施,進而阻止動態調試攻擊,能夠避免目標進程對應的應用程式的邏輯被破解、內存代碼和數據被查看或修改,為用戶信息的安全提供了保障。
本申請實施例提供的一種進程調試檢測方法及裝置,能夠支持安卓art(androidruntime)模式和dalvik模式,能夠支持安卓最新作業系統,能夠兼容arm-32位cpu、兼容arm-64位cpu、兼容x86-32位cpu、兼容x86-64位cpu,還能夠兼容魅族、小米、阿里雲、錘子、華為等手機廠商定製的只讀內存鏡像(read-onlymemory,rom)。
本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或電腦程式產品。因此,本申請可採用完全硬體實施例、完全軟體實施例、或結合軟體和硬體方面的實施例的形式。而且,本申請可採用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限於磁碟存儲器、cd-rom、光學存儲器等)上實施的電腦程式產品的形式。
本申請是參照根據本申請實施例的方法、設備(系統)、和電腦程式產品的流程圖和/或方框圖來描述的。應理解可由電腦程式指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些電腦程式指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些電腦程式指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的製造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些電腦程式指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設備包括一個或多個處理器(cpu)、輸入/輸出接口、網絡接口和內存。
內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內存等形式,如只讀存儲器(rom)或快閃記憶體(flashram)。內存是計算機可讀介質的示例。
計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限於相變內存(pram)、靜態隨機存取存儲器(sram)、動態隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內存技術、只讀光碟只讀存儲器(cd-rom)、數字多功能光碟(dvd)或其他光學存儲、磁盒式磁帶,磁帶磁磁碟存儲或其他磁性存儲設備或任何其他非傳輸介質,可用於存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitorymedia),如調製的數據信號和載波。
還需要說明的是,術語「包括」、「包含」或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句「包括一個……」限定的要素,並不排除在包括要素的過程、方法、商品或者設備中還存在另外的相同要素。
以上僅為本申請的實施例而已,並不用於限制本申請。對於本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求範圍之內。