[發(fā)明專利]一種數(shù)據(jù)過濾方法及裝置有效
| 申請(qǐng)?zhí)枺?/td> | 202110566822.6 | 申請(qǐng)日: | 2021-05-24 |
| 公開(公告)號(hào): | CN113220953B | 公開(公告)日: | 2022-08-23 |
| 發(fā)明(設(shè)計(jì))人: | 張冬波 | 申請(qǐng)(專利權(quán))人: | 北京安盟信息技術(shù)股份有限公司 |
| 主分類號(hào): | G06F16/9035 | 分類號(hào): | G06F16/9035;G06F21/62;G06F16/13;G06F3/06 |
| 代理公司: | 北京冠榆知識(shí)產(chǎn)權(quán)代理事務(wù)所(特殊普通合伙) 11666 | 代理人: | 王道川 |
| 地址: | 100085 北京市海淀區(qū)上地*** | 國省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 數(shù)據(jù) 過濾 方法 裝置 | ||
1.一種數(shù)據(jù)過濾方法,其特征在于,利用嵌入式Linux內(nèi)核對(duì)文件系統(tǒng)類型為FAT32格式或exFAT格式的真實(shí)USB存儲(chǔ)設(shè)備中的數(shù)據(jù)進(jìn)行過濾,具體包括如下步驟:
1)通過將真實(shí)USB存儲(chǔ)設(shè)備中的FAT32文件系統(tǒng)或exFAT文件系統(tǒng)的磁盤分區(qū)掛載到Linux系統(tǒng)內(nèi)并形成規(guī)則數(shù)據(jù);規(guī)則數(shù)據(jù)通過如下步驟形成:
1.1)在Linux系統(tǒng)內(nèi)創(chuàng)建目錄mnt且目錄mnt為空目錄,并將真實(shí)USB存儲(chǔ)設(shè)備中的FAT32文件系統(tǒng)或exFAT文件系統(tǒng)的磁盤分區(qū)掛載到目錄mnt上;
1.2)執(zhí)行殺毒軟件或關(guān)鍵字過濾軟件對(duì)目錄mnt內(nèi)的文件進(jìn)行遍歷分析,同時(shí)記錄風(fēng)險(xiǎn)文件的路徑并形成風(fēng)險(xiǎn)文件記錄;
1.3)遍歷步驟1.2)中形成的風(fēng)險(xiǎn)文件記錄,并根據(jù)步驟1.2)中記錄的風(fēng)險(xiǎn)文件的路徑依次打開風(fēng)險(xiǎn)文件以及該風(fēng)險(xiǎn)文件的各級(jí)父目錄,調(diào)用fcntl函數(shù)獲取該風(fēng)險(xiǎn)文件的扇區(qū)號(hào)以及該風(fēng)險(xiǎn)文件各級(jí)父目錄的扇區(qū)號(hào);fcntl函數(shù)為增加了F_GET_DISK_SECTOR命令的fcntl函數(shù),通過調(diào)用fcntl函數(shù)獲取風(fēng)險(xiǎn)文件的扇區(qū)號(hào)以及該風(fēng)險(xiǎn)文件各級(jí)父目錄的扇區(qū)號(hào)的具體方法為:其中,fcntl函數(shù)中的F_GET_DISK_SECTOR命令先獲取風(fēng)險(xiǎn)文件或與該風(fēng)險(xiǎn)文件相關(guān)的目錄的file inode,然后調(diào)用bmap(file inode,0)獲取扇區(qū)號(hào),并將返回值拷貝到用戶態(tài);
1.4)合并各個(gè)風(fēng)險(xiǎn)文件的各級(jí)父目錄,形成規(guī)則數(shù)據(jù);規(guī)則數(shù)據(jù)的格式如下:
[目錄扇區(qū)號(hào)] [子目錄1扇區(qū)號(hào)] [文件1扇區(qū)號(hào)] [文件2扇區(qū)號(hào)] [0xffffffff結(jié)束標(biāo)記]和[子目錄1扇區(qū)號(hào)] [文件1扇區(qū)號(hào)] [文件2扇區(qū)號(hào)] [0xffffffff結(jié)束標(biāo)記];
2)對(duì)規(guī)則數(shù)據(jù)的文件系統(tǒng)格式進(jìn)行判別,具體步驟為:
2.1)調(diào)用filp_open打開真實(shí)USB存儲(chǔ)設(shè)備中的磁盤分區(qū)文件,通過調(diào)用kernel_read讀取512字節(jié)的文件系統(tǒng)的DBR信息;
2.2)根據(jù)DBR信息判斷文件系統(tǒng)是否為FAT32格式或exFAT格式,如果文件系統(tǒng)是FAT32格式,則通過調(diào)用fat_boot_sector結(jié)構(gòu)體指針,提取文件系統(tǒng)參數(shù),如果文件系統(tǒng)是exFAT格式,則通過調(diào)用boot_sector結(jié)構(gòu)體指針,提取文件系統(tǒng)參數(shù),文件系統(tǒng)參數(shù)包括扇區(qū)大小、FAT表起始扇區(qū)、FAT表大小和數(shù)據(jù)起始扇區(qū);
2.3)根據(jù)FAT表起始扇區(qū)和FAT表大小,調(diào)用kernel_read將FAT表讀取到內(nèi)存中;
2.4)解析通過ioctl接收到的規(guī)則數(shù)據(jù),為每個(gè)目錄自定義一個(gè)用以表示該目錄的結(jié)構(gòu)體,該結(jié)構(gòu)體內(nèi)部成員至少包括該目錄第一個(gè)扇區(qū)值和規(guī)則數(shù)據(jù)中該目錄下所有文件的第一個(gè)扇區(qū)值的列表;然后將該目錄的扇區(qū)號(hào)作為key、該結(jié)構(gòu)體作為value插入結(jié)構(gòu)體扇區(qū)基數(shù)樹,將該目錄下文件的扇區(qū)號(hào)作為key、該結(jié)構(gòu)體作為value插入到文件扇區(qū)基數(shù)樹;并將該目錄下文件的扇區(qū)號(hào)加入到該結(jié)構(gòu)體的成員變量中;如果目錄文件的大小超過1簇,則遍歷緩存的FAT表,將該目錄文件所有簇的第1個(gè)扇區(qū)的值加入到結(jié)構(gòu)體扇區(qū)基數(shù)樹;
2.5)在f_mass_storage模塊的do_read函數(shù)返回之前增加過濾函數(shù)filter_bh_plugin,用于將讀取的真實(shí)USB存儲(chǔ)設(shè)備中的磁盤數(shù)據(jù)傳入過濾模塊處理,然后再返回給目標(biāo)主機(jī);
2.6)啟動(dòng)f_mass_storage模塊模擬真實(shí)USB存儲(chǔ)設(shè)備;
3)根據(jù)進(jìn)行文件系統(tǒng)格式判別后的規(guī)則數(shù)據(jù)進(jìn)行對(duì)應(yīng)的數(shù)據(jù)過濾,具體步驟如下:
3.1)當(dāng)f_mass_storage模塊調(diào)用filter_bh_plugin過濾函數(shù)時(shí),在真實(shí)USB存儲(chǔ)設(shè)備中的磁盤數(shù)據(jù)讀取傳入后,先判斷當(dāng)前所讀取的數(shù)據(jù)的扇區(qū)號(hào)是根目錄起始扇區(qū)的扇區(qū)號(hào)還是目錄文件簇下的一個(gè)扇區(qū)的扇區(qū)號(hào),如果當(dāng)前所讀取的數(shù)據(jù)的扇區(qū)號(hào)不是根目錄起始扇區(qū)的扇區(qū)號(hào)與目錄文件簇下的一個(gè)扇區(qū)的扇區(qū)號(hào)中的任意一種,表示當(dāng)前所讀取的數(shù)據(jù)為數(shù)據(jù)區(qū)數(shù)據(jù),則直接退出過濾函數(shù);如果當(dāng)前所讀取的數(shù)據(jù)的扇區(qū)號(hào)是根目錄起始扇區(qū)的扇區(qū)號(hào)與目錄文件簇下的一個(gè)扇區(qū)的扇區(qū)號(hào)中的任意一種,表示當(dāng)前所讀取的數(shù)據(jù)為目錄文件內(nèi)容,則進(jìn)入下一步處理;
3.2)當(dāng)目標(biāo)主機(jī)讀取的是目錄文件內(nèi)容時(shí),根據(jù)規(guī)則數(shù)據(jù)對(duì)風(fēng)險(xiǎn)文件的目錄項(xiàng)進(jìn)行修改,實(shí)現(xiàn)對(duì)風(fēng)險(xiǎn)文件的隱藏;
3.3)在結(jié)構(gòu)體扇區(qū)基數(shù)樹和文件扇區(qū)基數(shù)樹中查找是否有該扇區(qū)號(hào)作為key的結(jié)構(gòu)體,如果沒有,則使用臨時(shí)變量作為結(jié)構(gòu)體指針;
3.4)如果文件系統(tǒng)為FAT32格式,將從真實(shí)USB存儲(chǔ)設(shè)備中讀取到的數(shù)據(jù)地址賦值給msdos_dir_entry目錄項(xiàng)指針,然后遍歷msdos_dir_entry目錄項(xiàng)指針,跳過attr為ATTR_EXT和ATTR_DIR的目錄項(xiàng)以及跳過name[0]為0xE5的目錄項(xiàng),其中,ATTR_EXT為長目錄項(xiàng),ATTR_DIR為子目錄項(xiàng),0xE5為已刪除目錄項(xiàng);如果文件系統(tǒng)為exFAT格式,將從真實(shí)USB存儲(chǔ)設(shè)備中讀取到的數(shù)據(jù)地址賦值給exfat_dentry目錄項(xiàng)指針,然后遍歷exfat_dentry目錄項(xiàng)指針,跳過type不為0x85的File Directory Entry目錄項(xiàng)和跳過file.attr置位為0x10的File Directory Entry目錄項(xiàng);
3.5)如果文件系統(tǒng)為FAT32格式,經(jīng)過步驟3.4)遍歷檢查,從真實(shí)USB存儲(chǔ)設(shè)備中讀取的數(shù)據(jù)中剩下的目錄項(xiàng)則都是文件的短目錄項(xiàng),從目錄項(xiàng)中提取文件起始簇ID,并將該簇ID轉(zhuǎn)換成扇區(qū)號(hào),然后判斷該扇區(qū)號(hào)是否在結(jié)構(gòu)體的文件扇區(qū)號(hào)列表中,根據(jù)該判斷的命中結(jié)果并結(jié)合預(yù)先設(shè)置好的黑/白名單模式,得出是否要隱藏該文件;如果文件系統(tǒng)為exFAT格式,經(jīng)過步驟3.4)遍歷檢查,從真實(shí)USB存儲(chǔ)設(shè)備中讀取的數(shù)據(jù)中剩下的目錄項(xiàng)則都是文件的File Directory Entry目錄項(xiàng),從Stream Extension Directory Entry目錄項(xiàng)中提取文件起始簇ID,并將該簇ID轉(zhuǎn)換成扇區(qū)號(hào),然后判斷該扇區(qū)號(hào)是否在結(jié)構(gòu)體的文件扇區(qū)號(hào)列表中,根據(jù)該判斷的命中結(jié)果并結(jié)合預(yù)先設(shè)置好的黑/白名單模式,得出是否要隱藏該文件,其中,Stream Extension Directory Entry目錄項(xiàng)的地址為File DirectoryEntry目錄項(xiàng)指針+1;
3.6)如果文件系統(tǒng)為FAT32格式,對(duì)于要隱藏的文件,則修改此文件的短目錄項(xiàng),將該文件的attr成員的值修改為ATTR_EXT;如果文件系統(tǒng)為exFAT格式,對(duì)于要隱藏的文件,則修改該文件的File Directory Entry目錄項(xiàng),將該目錄項(xiàng)的type成員的值修改為EXFAT_INVAL,然后重新計(jì)算該目錄項(xiàng)的file.checksum成員值。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于北京安盟信息技術(shù)股份有限公司,未經(jīng)北京安盟信息技術(shù)股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110566822.6/1.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 數(shù)據(jù)顯示系統(tǒng)、數(shù)據(jù)中繼設(shè)備、數(shù)據(jù)中繼方法、數(shù)據(jù)系統(tǒng)、接收設(shè)備和數(shù)據(jù)讀取方法
- 數(shù)據(jù)記錄方法、數(shù)據(jù)記錄裝置、數(shù)據(jù)記錄媒體、數(shù)據(jù)重播方法和數(shù)據(jù)重播裝置
- 數(shù)據(jù)發(fā)送方法、數(shù)據(jù)發(fā)送系統(tǒng)、數(shù)據(jù)發(fā)送裝置以及數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)顯示系統(tǒng)、數(shù)據(jù)中繼設(shè)備、數(shù)據(jù)中繼方法及數(shù)據(jù)系統(tǒng)
- 數(shù)據(jù)嵌入裝置、數(shù)據(jù)嵌入方法、數(shù)據(jù)提取裝置及數(shù)據(jù)提取方法
- 數(shù)據(jù)管理裝置、數(shù)據(jù)編輯裝置、數(shù)據(jù)閱覽裝置、數(shù)據(jù)管理方法、數(shù)據(jù)編輯方法以及數(shù)據(jù)閱覽方法
- 數(shù)據(jù)發(fā)送和數(shù)據(jù)接收設(shè)備、數(shù)據(jù)發(fā)送和數(shù)據(jù)接收方法
- 數(shù)據(jù)發(fā)送裝置、數(shù)據(jù)接收裝置、數(shù)據(jù)收發(fā)系統(tǒng)、數(shù)據(jù)發(fā)送方法、數(shù)據(jù)接收方法和數(shù)據(jù)收發(fā)方法
- 數(shù)據(jù)發(fā)送方法、數(shù)據(jù)再現(xiàn)方法、數(shù)據(jù)發(fā)送裝置及數(shù)據(jù)再現(xiàn)裝置
- 數(shù)據(jù)發(fā)送方法、數(shù)據(jù)再現(xiàn)方法、數(shù)據(jù)發(fā)送裝置及數(shù)據(jù)再現(xiàn)裝置
- 一種數(shù)據(jù)庫讀寫分離的方法和裝置
- 一種手機(jī)動(dòng)漫人物及背景創(chuàng)作方法
- 一種通訊綜合測(cè)試終端的測(cè)試方法
- 一種服裝用人體測(cè)量基準(zhǔn)點(diǎn)的獲取方法
- 系統(tǒng)升級(jí)方法及裝置
- 用于虛擬和接口方法調(diào)用的裝置和方法
- 線程狀態(tài)監(jiān)控方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)
- 一種JAVA智能卡及其虛擬機(jī)組件優(yōu)化方法
- 檢測(cè)程序中方法耗時(shí)的方法、裝置及存儲(chǔ)介質(zhì)
- 函數(shù)的執(zhí)行方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)





