一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法
【專利摘要】本發(fā)明公開了一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,包括以下步驟:S1:連接裝有SQLite數(shù)據(jù)庫的設(shè)備,建立與設(shè)備的連接通道;S2:掃描設(shè)備內(nèi)存空間中所有SQLite文件,得到存儲路徑;S3:將掃描到的SQLite文件逐個進行分析,并進行非正常數(shù)據(jù)清除。本發(fā)明優(yōu)點在于掃描全面,能夠找到存儲空間內(nèi)的所有SQLite文件并針對SQLite內(nèi)的所有區(qū)域進行掃描和標記;清除徹底,針對SQLite文件內(nèi)master表、數(shù)據(jù)表、索引表、空閑頁面的非正常數(shù)據(jù)進行掃描和清除;防止針對隱私數(shù)據(jù)的惡意盜取行為,保護隱私數(shù)據(jù)的安全。
【專利說明】一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全【技術(shù)領(lǐng)域】,特別涉及一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法。
【背景技術(shù)】
[0002]SQLite是一種輕型數(shù)據(jù)庫,占用資源少,具有支持主流操作系統(tǒng),能跟多種語言結(jié)合,處理速度快的特點而被廣泛使用。SQLite數(shù)據(jù)庫中的數(shù)據(jù)涉國家機關(guān)、軍隊、企業(yè)、事業(yè)單位、個人的保密數(shù)據(jù)及隱私。
[0003]使用含SQLite數(shù)據(jù)庫的應(yīng)用程序時,對數(shù)據(jù)進行的刪除操作并沒有做到真正意義上的刪除,數(shù)據(jù)仍然存在只是被標記為刪除狀態(tài);而通過目前市面上的一些數(shù)據(jù)恢復(fù)軟件可以輕松的找出這些被刪除的數(shù)據(jù),從而被一些不法分子利用竊取隱私數(shù)據(jù),對個人、企業(yè)、國家機關(guān)照成嚴重的損失和危害;所以目前急需一種能夠徹底清除SQLite數(shù)據(jù)庫中隱私數(shù)據(jù)的方法。
【發(fā)明內(nèi)容】
[0004]本發(fā)明針對現(xiàn)有技術(shù)的缺陷,提出一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,能有效的解決上述現(xiàn)有技術(shù)存在的問題。
[0005]為了實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,包括以下步驟:
51:連接裝有SQLite數(shù)據(jù)庫的設(shè)備,建立與設(shè)備的連接通道;
52:掃描設(shè)備內(nèi)存空間中所有SQLite文件,得到存儲路徑;
53:將掃描到的SQLite文件逐個進行分析,并進行非正常數(shù)據(jù)清除。
[0006]作為優(yōu)選,所述S2包括以下步驟:
5201:逐個掃描設(shè)備存儲空間,獲取路徑;
5202:判斷獲取的路徑對應(yīng)的是文件夾還是文件,若是文件夾則打開掃描文件夾內(nèi)的文件,若是文件則執(zhí)行S203 ;
5203:解析并判斷該文件是否為SQLite數(shù)據(jù)庫文件,若是執(zhí)行S204,否則執(zhí)行S205 ;
5204:記錄該SQLite數(shù)據(jù)庫文件的路徑,執(zhí)行步驟S205 ;
5205:判斷是否掃描完成,如果掃描完成,執(zhí)行S206,否則繼續(xù)掃描直至完成所有SQLite數(shù)據(jù)庫文件路徑記錄;
5206:掃描完成后返回并存儲所有的SQLite數(shù)據(jù)庫文件的路徑。
[0007]作為優(yōu)選,所述S3包括一下步驟:
5301:根據(jù)存儲的SQLite文件路徑中提取一個SQLite文件;
5302:解析并清除master表中的非正常數(shù)據(jù);
5303:解析并清除數(shù)據(jù)表和索引表中的非正常數(shù)據(jù);
5304:解析并清除空閑頁面的非正常數(shù)據(jù);
5305:判斷所有SQLite文件是否解析完成,如是則退出;如否則返回到S301。
[0008]作為優(yōu)選,所述S302包括以下步驟:
53021:從master表的根頁開始,找到master表所有的頁面,并使頁號在邏輯上形成B
樹;
53022:根據(jù)master表的B樹,解析每個頁面,對頁面的未分配區(qū)、自由塊、碎片在位圖上進行標記;
53023:對表葉子頁的單元內(nèi)容區(qū)進行解析,查看單元是否有溢出頁,如果有則對溢出頁中的碎片進行標記;如果沒有則跳過;
53024:將解析出來的所有表信息存儲,提供給S303使用;
53025:根據(jù)位圖上的標記,清除標記區(qū)域的所有數(shù)據(jù)。
[0009]作為優(yōu)選,所述S303包括以下步驟:
53031:從S3024得到的表信息中取出一條表信息;
53032:判斷該表的類型;
53033:根據(jù)表類型,創(chuàng)建表的對象,從表的根頁開始,找到所有表的頁面,并使頁號在邏輯上形成B樹;
53034:根據(jù)表的B樹,解析每個頁面,對頁面的未分配區(qū)、自由塊、碎片在位圖上進行標記;
53035:解析葉子頁及索引頁的單元內(nèi)容區(qū),查看單元是否有溢出頁,如果有則對溢出頁中的碎片進行標記;如果沒有則跳過;
53036:根據(jù)位圖上的標記,清除該表所有標記區(qū)域數(shù)據(jù);
53037:判斷所有表是否解析完成,如果是,則退出;如果否,則返回到S3031 ;
作為優(yōu)選,所述S304包括以下步驟:
53041:讀取SQLite空閑頁鏈表首頁指針;
53042:判斷是否有空閑頁,若沒有則結(jié)束,若有則執(zhí)行S3043 ;
53043:讀取該空閑樹干頁內(nèi)容,并清除其中的碎片數(shù)據(jù);
53044:判斷該空閑樹干頁下是否有空閑葉子頁,如果有,則執(zhí)行S3045 ;如果沒有,則S執(zhí)行3046 ;
53045:讀取該空閑樹干頁下的所有空閑葉子頁,并清除每個空閑葉子頁中的碎片數(shù)據(jù);
53046:讀取下一個空閑樹干頁的指針;
53047:判斷下一個空閑樹干頁的指針是否為零,若為零則表示空閑鏈表已到尾部,結(jié)束;若不為零則執(zhí)行S3043。
[0010]與現(xiàn)有技術(shù)相比本發(fā)明的優(yōu)點在于:
掃描全面,能夠找到存儲空間內(nèi)的所有SQLite文件并針對SQLite內(nèi)的所有區(qū)域進行掃描和標記。
[0011]清除徹底,針對SQLite文件內(nèi)master表、數(shù)據(jù)表、索引表、空閑頁面的非正常數(shù)據(jù)進行掃描和清除。
[0012]預(yù)防針對隱私數(shù)據(jù)的惡意盜取行為,保護數(shù)據(jù)的安全。
【專利附圖】
【附圖說明】
[0013]圖1為本發(fā)明實施例的主流程圖;
圖2為本發(fā)明實施例步驟S2的流程圖;
圖3為本發(fā)明實施例步驟S3的流程圖;
圖4為本發(fā)明實施例步驟S302的流程圖;
圖5為本發(fā)明實施例步驟S303的流程圖;
圖6為本發(fā)明實施例步驟S304的流程圖。
【具體實施方式】
[0014]為了詳細說明本發(fā)明的【具體實施方式】,下面結(jié)合附圖加以說明:
如圖1所示,一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,包括以下步驟:
51:連接裝有SQLite數(shù)據(jù)庫的設(shè)備,建立與設(shè)備的連接通道;
52:掃描設(shè)備內(nèi)存空間中所有SQLite文件,得到存儲路徑;
53:將掃描到的SQLite文件逐個進行分析,并進行非正常數(shù)據(jù)清除。
[0015]如圖2所示,所述S2包括以下步驟:
5201:逐個掃描設(shè)備存儲空間,獲取路徑;
5202:判斷獲取的路徑對應(yīng)的是文件夾還是文件,若是文件夾則打開掃描文件夾內(nèi)的文件,若是文件則執(zhí)行S203 ;
5203:解析并判斷該文件是否為SQLite數(shù)據(jù)庫文件。在該步驟中要判斷是否為SQLite數(shù)據(jù)庫文件我們先判斷該文件大小是否為512字節(jié)的整倍數(shù),若是則提取該文件前16字節(jié)的內(nèi)容,判斷是否為“SQLite Format 3”,若是則取出該文件從開始的偏移量為16的2個字節(jié),判斷是否為512字節(jié)的整倍數(shù),若是則執(zhí)行S204 ;上述判斷若有一項為否則執(zhí)行S205 ;
5204:記錄該SQLite數(shù)據(jù)庫文件的路徑,執(zhí)行步驟S205 ;
5205:判斷是否掃描完成,如果掃描完成,執(zhí)行S206,否則繼續(xù)掃描直至完成所有SQLite數(shù)據(jù)庫文件路徑記錄;
5206:掃描完成后返回并存儲所有的SQLite數(shù)據(jù)庫文件的路徑。
[0016]如圖3所示,所述S3包括一下步驟:
5301:根據(jù)存儲的SQLite文件路徑中提取一個SQLite文件;
5302:解析并清除master表中的非正常數(shù)據(jù);
5303:解析并清除數(shù)據(jù)表和索引表中的非正常數(shù)據(jù);
5304:解析并清除空閑頁面的非正常數(shù)據(jù);
5305:判斷所有SQLite文件是否解析完成,如是則退出;如否則返回到S301。
[0017]如圖4所示,所述S302包括以下步驟:
53021:從master表的根頁開始,依次遍歷所有master表的頁,判斷頁類型,若為表葉子頁,則記錄下該頁頁號;若為表內(nèi)部頁,則查找該內(nèi)部頁的所有葉子頁,記錄該內(nèi)部頁的頁號及所有葉子頁的頁號。所有屬于master表的頁都遍歷完成后,返回所有的頁號,并使頁號在邏輯上形成B樹;
53022:根據(jù)master表的B樹,依次取出頁號,讀取頁內(nèi)容。對于每個頁,判斷頁類型,在位圖上標記該頁的未分配區(qū)、自由塊、碎片。如果該頁為表內(nèi)部頁,由于不存放數(shù)據(jù),所以只做標記;如果是表葉子頁執(zhí)行S3023 ; 53023:對表葉子頁的單元進行解析,若單元含有溢出頁則對溢出頁中的碎片數(shù)據(jù)進行標記,得到SQlite數(shù)據(jù)庫的所有表信息;
53024:將解析出來的所有表信息存儲,提供給S303使用;
53025:根據(jù)位圖上的標記,通過構(gòu)造16進制數(shù)據(jù)(OxOO、OxFF)寫入到所有位圖標記的物理存儲位置覆蓋原有數(shù)據(jù),達到清除master表的所有標記區(qū)域數(shù)據(jù)的目的。
[0018]如圖5所示,所述S303包括以下步驟:
53031:從S3024得到的表信息中取出一條表信息;
53032:判斷該表的類型;
53033:根據(jù)表類型,創(chuàng)建不同表的對象,從表的根頁開始,依次遍歷表所有的頁,判斷頁類型,若為葉子頁,則記錄下該頁頁號;若為內(nèi)部頁,則查找該內(nèi)部頁的所有葉子頁,記錄該內(nèi)部頁的頁號及所有葉子頁的頁號找到所有表的頁面,所有屬于該表的頁都遍歷完成后,返回所有的頁號并使頁號在邏輯上形成B樹;
S3034:根據(jù)表的B樹,依次取出頁號,讀取頁內(nèi)容,對于每個頁,判斷頁類型,在位圖上標記該頁的未分配區(qū)、自由塊、碎片的方法,如果該頁為表內(nèi)部頁,由于不存放數(shù)據(jù),所以只做標記;如果是表葉子頁以及索引頁,標記完成后對該頁面的單元內(nèi)容區(qū)進行分析;
53035:解析頁面的單元,查看單元是否有溢出頁,如果有溢出頁,則對溢出頁中的碎片進行標記;如果沒有溢出頁,則跳過;
53036:根據(jù)位圖上的標記,清除B樹的每個頁面中未分配區(qū)、自由塊、碎片的數(shù)據(jù);
53037:判斷所有表是否解析完成,如果是,則退出;如果否,則返回到S3031。
[0019]如圖6所示,所述S304包括以下步驟:
53041:讀取SQLite數(shù)據(jù)庫空閑頁鏈表首頁指針,該指針為從開始的偏移量為32的4個字節(jié);
53042:判斷S3041讀取的值是否為零,若為零,表示該SQLite數(shù)據(jù)庫中無空閑頁則結(jié)束;若不為零則執(zhí)行S3043 ;
53043:讀取該空閑樹干頁內(nèi)容,并清除其中的碎片數(shù)據(jù);
53044:判斷該空閑樹干頁下是否有空閑葉子頁,如果有,則執(zhí)行S3045 ;如果沒有,則S執(zhí)行3046 ;
53045:讀取該空閑樹干頁下的所有空閑葉子頁,并清除每個空閑葉子頁中的碎片數(shù)據(jù);
53046:讀取下一個空閑樹干頁的指針,該指針存放在當前的空閑樹干頁中;
S3047:判斷下一個空閑樹干頁的指針是否為零,若為零則表示空閑鏈表已到尾部,結(jié)束;若不為零則執(zhí)行S3043。
【權(quán)利要求】
1.一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,其特征在于包括以下步驟: 51:連接裝有SQLite數(shù)據(jù)庫的設(shè)備,建立與設(shè)備的連接通道; 52:掃描設(shè)備內(nèi)存空間中所有SQLite文件,得到存儲路徑; 53:將掃描到的SQLite文件逐個進行分析,并進行非正常數(shù)據(jù)清除。
2.根據(jù)權(quán)利要求1所述的一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,其特征在于所述S2包括以下步驟: 5201:逐個掃描設(shè)備存儲空間,獲取路徑; 5202:判斷獲取的路徑對應(yīng)的是文件夾還是文件,若是文件夾則打開掃描文件夾內(nèi)的文件,若是文件則執(zhí)行S203 ;5203:解析并判斷該文件是否為SQLite數(shù)據(jù)庫文件,若是執(zhí)行S204,否則執(zhí)行S205 ; 5204:記錄該SQLite數(shù)據(jù)庫文件的路徑,執(zhí)行步驟S205 ; 5205:判斷是否掃描完成,如果掃描完成,執(zhí)行S206,否則繼續(xù)掃描直至完成所有SQLite數(shù)據(jù)庫文件路徑記錄; 5206:掃描完成后返回并存儲所有的SQLite數(shù)據(jù)庫文件的路徑。
3.根據(jù)權(quán)利要求1所述的一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,其特征在于所述S3包括一下步驟: 5301:根據(jù)存儲的SQLite文件路徑中提取一個SQLite文件; 5302:解析并清除master表中的非正常數(shù)據(jù); 5303:解析并清除數(shù)據(jù)表和索引表中的非正常數(shù)據(jù); 5304:解析并清除空閑頁面的非正常數(shù)據(jù); 5305:判斷所有SQLite文件是否解析完成,如是則退出;如否則返回到S301。
4.根據(jù)權(quán)利要求3所述的一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,其特征在于所述S302包括以下步驟:53021:從master表的根頁開始,找到master表所有的頁面,并使頁號在邏輯上形成B樹; 53022:根據(jù)master表的B樹,解析每個頁面,對頁面的未分配區(qū)、自由塊、碎片在位圖上進行標記; S3023:對表葉子頁的單元內(nèi)容區(qū)進行解析,查看單元是否有溢出頁,如果有則對溢出頁中的碎片進行標記;如果沒有則跳過; 53024:將解析出來的所有表信息存儲,提供給S303使用; 53025:根據(jù)位圖上的標記,清除標記區(qū)域的所有數(shù)據(jù)。
5.根據(jù)權(quán)利要求3所述的一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,其特征在于所述S303包括以下步驟: 53031:從S3024得到的表信息中取出一條表信息; 53032:判斷該表的類型; 53033:根據(jù)表類型,創(chuàng)建表的對象,從表的根頁開始,找到所有表的頁面,并使頁號在邏輯上形成B樹; 53034:根據(jù)表的B樹,解析每個頁面,對頁面的未分配區(qū)、自由塊、碎片在位圖上進行標記; 53035:解析葉子頁及索引頁的單元內(nèi)容區(qū),查看單元是否有溢出頁,如果有則對溢出頁中的碎片進行標記;如果沒有則跳過; 53036:根據(jù)位圖上的標記,清除該表所有標記區(qū)域數(shù)據(jù); 53037:判斷所有表是否解析完成,如果是,則退出;如果否,則返回到S3031 ;
6.根據(jù)權(quán)利要求3所述的一種清除SQLite數(shù)據(jù)庫中數(shù)據(jù)的方法,其特征在于所述S304包括以下步驟: 53041:讀取SQLite空閑頁鏈表首頁指針; 53042:判斷是否有空閑頁,若沒有則結(jié)束,若有則執(zhí)行S3043 ; 53043:讀取該空閑樹干頁內(nèi)容,并清除其中的碎片數(shù)據(jù); 53044:判斷該空閑樹干頁下是否有空閑葉子頁,如果有,則執(zhí)行S3045 ;如果沒有,則S執(zhí)行3046 ; S3045:讀取該空閑樹干頁下的所有空閑葉子頁,并清除每個空閑葉子頁中的碎片數(shù)據(jù); 53046:讀取下一個空閑樹干頁的指針; 53047:判斷下一個空閑樹干頁的指針是否為零,若為零則表示空閑鏈表已到尾部,結(jié)束;若不為零則執(zhí)行S3043。
【文檔編號】G06F17/30GK104298766SQ201410585592
【公開日】2015年1月21日 申請日期:2014年10月28日 優(yōu)先權(quán)日:2014年10月28日
【發(fā)明者】梁效寧, 黃旭 申請人:四川秘無痕信息安全技術(shù)有限責任公司