[學習記錄]fanotify


fanotify是一個挺好用的文件監控系統,它會檢測當前文件系統下的事件,並允許做出回應。

官方文檔https://www.man7.org/linux/man-pages/man7/fanotify.7.html

 

Fanotify主要有兩個函數,fanotify_init()和fanotify_mark(),

fanotify_init()會初始化一個新的fanotify組並返回一個與組關聯的事件隊列描述符fd,fanotify_init(unsigned int flags, unsigned int event_f_flags)函數接收兩個參數,第一個參數為flags,規定了哪些類型的事件會被記錄,這里使用FAN_CLASS_CONTENT,該參數也是官方手冊上推薦的應用於惡意軟件掃描的參數,第二個參數為event_f_flags,用來修飾描述符fd。

Fanotify_mark(int fanotify_fd, unsigned int flags,uint64_t mask, int dirfd, const char *pathname)函數會進一步對fanotify組進行修飾,第一個參數為init創建的fd,第二個參數flags描述了執行修改行為的方式以及被監視的文件系統類型,第三個參數mask為監聽的事件類型,這里我們監聽FAN_OPEN_PERM類型,該類型事件在目標進程獲取權限時發生,並且允許我們對其做出回應。最后兩個參數為相關的文件路徑,當參數五有效時,參數四一般不起作用。后續處理中,我們不斷讀取fd中的內容,放入fanotify_event_metadata類型的變量里,該類型結構如下

 

 

其中pid就是執行此次操作的進程pid。通過pid我們就可以獲取目標進程的相關信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM