本發(fā)明涉及信息安全技術領域,特別涉及一種基于WPF技術生成及加載特定項目文件的方法。
背景技術:
在手機取證領域的友商當中絕大部分采用的項目保存方式是:程序內部的數(shù)據(jù)表直接序列化成xml格式或者json格式的文件,然后將這些文件保存在一個統(tǒng)一文件夾中(既案例文件夾),該文件夾中設定一個案例加載的項目文件,加載案例時直接加載該文件,再檢索當前文件夾內的其他數(shù)據(jù)資料文件,達到加載以往案例的目的。而此種項目文件的生成及加載存在以下風險:
1、對于取證行業(yè)內的案例項目,直接保存提取數(shù)據(jù)為明文方式的文件,內容很容易被篡改,無法保證案例真實性;
2、案例以文件夾形式存在,文件夾內文件容易丟失,導致無法加載案例項目或案例項目的內容不完整;
3、加載項目數(shù)據(jù)大多為程序內部自動執(zhí)行,無法手動選擇加載其他電腦保存的項目文件,項目靈活性較低;
4、只保存了程序界面上展示的數(shù)據(jù)集合,未保存下從設備上備份出的原始文件,無法作為取證類關鍵證據(jù)。
本發(fā)明用到的技術名詞:
ZIP:是一個計算機文件的壓縮的算法,原名Deflate(真空),發(fā)明者為菲利普·卡茲(Phil Katz)),他于1989年1月公布了該格式的資料。ZIP通常使用后綴名“.zip”。目前,ZIP格式屬于幾種主流的壓縮格式之一,從性能上比較,RAR格式較ZIP格式壓縮率較高,但是它的壓縮時間遠遠高于Zip。由于設備備份提取的文件數(shù)據(jù)量較大,但又要求壓縮時間盡可能快,所以在本方法中選用了ZIP壓縮方式而非RAR壓縮方式。
WPF(Windows Presentation Foundation):是微軟推出的基于Windows Vista的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統(tǒng)一的編程模型、語言和框架,真正做到了分離界面設計人員與開發(fā)人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。
技術實現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術的缺陷,提供了一種基于WPF技術生成及加載特定項目文件的方法,能有效的解決上述現(xiàn)有技術存在的問題。
一種基于WPF技術生成及加載特定項目文件的方法,包括以下步驟:
S1:源數(shù)據(jù)的備份保存;采用USB和WIFI兩種不同提取方式,增加了識別設備上數(shù)據(jù)的創(chuàng)建時間,及最后修改時間的環(huán)節(jié),當備份到本地后再修改該備份文件在設備上的真實創(chuàng)建時間即最后修改時間,得到與設備原始數(shù)據(jù)一致的文件;
S2:以zip方式壓縮源數(shù)據(jù),使用壓縮文件夾的遞歸算法;
使用第三方zip壓縮庫輸入需要壓縮的文件夾路徑后,開始檢索當前路徑下的文件夾和文件,如果是文件夾則再次調用該算法進行遞歸檢索,如果是文件,則開始以文件流的方式打開該文件,在寫入該動態(tài)庫的ZipEntry對象中,同時刷新與界面交互的當前正在壓縮的文件名及大小,最重要的是在壓縮完該文件時,在調用下列方法保存原始文件的最后修改時間;
FileInfo fileINFO=new FileInfo(file);
entry.DateTime=fileINFO.LastWriteTime.ToUniversalTime();
S3:獲取文件MD5值;
S4:十六進制字節(jié)全部逆向處理,執(zhí)行字節(jié)流的逆向操作:
首先設定一個字節(jié)緩存buffer:byte[]inSertData=new byte[2048],同時設定已加密大小初值:int completedLength=0,加密文件總大小long inFileSize=srcStream.Length;
最后開始執(zhí)行逆向處理的核心算法:每次讀取文件中2KB的數(shù)據(jù)轉化為byte[]數(shù)組,然后該數(shù)組中每個字節(jié)執(zhí)行:inSertData[i]=(byte)(byte.Max Value-inSertData[i])操作;completedLength加上byte[]數(shù)組大小用于和inFileSize文件總大小做比較,如果小于inFileSize再循環(huán)返回讀取文件下一個2KB數(shù)據(jù)進行同樣操作,如果相等則表示讀取到該文件末尾字節(jié),結束逆向操作;
S5:后綴名設定及核心加密處理,根據(jù)程序內部定義的項目文件后綴名來再次加密字節(jié)流并寫入文件MD值;
S51:獲取項目文件后綴名的字節(jié)計算及加密碼:
獲取項目文件后綴名的字符串,由該字符串得出字節(jié)數(shù)組1,數(shù)組中的數(shù)字累加再除以10得到余數(shù),而余數(shù)則為該項目文件的后綴加密碼;再將S4中獲取的新的字節(jié)流數(shù)組與余數(shù)異或處理得到數(shù)組2;
S52:在新的字節(jié)流中加入項目后綴標識,利用S1得出的加密字節(jié)數(shù)組2,和后綴字節(jié)數(shù)組1,將后綴數(shù)組加入到文件數(shù)組的最前面即得到數(shù)組3;
S53:在字節(jié)流中寫入MD5值,在S3中獲取的MD5值為32位的字符串,將該字符串轉化為字節(jié)數(shù)組為128位的字節(jié)數(shù)組。根據(jù)S51中的后綴加密碼和S52中的新字節(jié)流數(shù)組3,將該128位的MD5字節(jié)數(shù)組插入到新字節(jié)流倒數(shù)得到最終的字節(jié)流,完成三重加密,將最終的字節(jié)流寫入到導出的項目文件中即完成了整個項目文件的制作;
S6:案例項目文件的加載,判斷文件是否為項目文件;打開選中的項目文件,以文件流的形式打開獲取字節(jié)數(shù)組,開始讀取0-3位的字節(jié)數(shù)組NewArray,比對NewArray與后綴名字節(jié)數(shù)組2是否相等,如果相等則從項目文件中剔除掉該后綴名的字節(jié)數(shù)組,再繼續(xù)進行下一步,如不相等則提示該文件不是可以讀取的項目文件。
S7:逆向解密項目文件;
S71:獲取項目文件的MD5值
根據(jù)S6步驟中得出項目文件的后綴名字節(jié)數(shù)組2,參照S51步驟得出后綴加密碼;以文件流的方式打開項目文件,找到文件最后倒數(shù)第3個字節(jié),往前讀128個字節(jié)數(shù)組并將該數(shù)組從文件中剔除掉,將該MD5值數(shù)組轉化為字符串類型則獲取了32位的MD5字符串,將該MD5值保持下來用于后續(xù)解密后的文件校對;
S72:文件字節(jié)流的異或逆向解密處理
參照S51中的后綴加密碼及異或加密算法對項目文件全部解密處理;
參照S4中的字節(jié)數(shù)組逆向操作再對項目文件解密處理。
S8:提取數(shù)據(jù)源中的有效數(shù)據(jù);
S9:以WPF的顯示技術結合地圖及時間線對數(shù)據(jù)精準展示;
S91:WPF界面嵌入地圖插件,首先封裝地圖離線服務器的離線圖片,將這些地圖全部寫入db數(shù)據(jù)庫中,在WPF軟件界面開啟時,以檢索到的定位點來加載界面的地圖顯示;
S92:展示數(shù)據(jù),根據(jù)S82步驟中的解析數(shù)據(jù),在界面上展示所有提取到的數(shù)據(jù)。
作為優(yōu)選,所述S1中USB提取為:Android設備開啟USB調試模式,調用adb.exe程序拷貝設備文件到本地,再文件權限不夠的情況下,修改可執(zhí)行權限后再拷貝;iOS設備調用iTunes的設備服務先備份到本地電腦,在解析該iTunes備份出的文件數(shù)據(jù);
WIFI提取為:PC端程序開啟socket監(jiān)聽作為服務端,而移動設備端以安裝App的客戶端模式,以掃碼方式連接到PC端服務器。PC端監(jiān)聽到客戶端連接后再啟動數(shù)據(jù)傳輸命令執(zhí)行備份文件操作;
本地保存及設備信息固定為:本地文件保存在用戶指定位置或程序默認存儲位置,可以同時對多個設備進行數(shù)據(jù)備份提取,備份完成后會做統(tǒng)一標識并保存設備的各項信息,以便在加載項目文件時對該設備備份文件的識別。
作為優(yōu)選,所述S3采用異步分塊計算MD5,首先設定一個數(shù)據(jù)緩沖區(qū)塊int bufferSize=1048576;再打開文件異步讀取緩沖區(qū)塊大小的數(shù)據(jù)進行MD5值的計算,計算完成之后記錄下當前塊的MD5,再讀取文件的下一數(shù)據(jù)塊,循環(huán)執(zhí)行該操作直到整個文件的MD5值計算完畢,最后該方法返回一個32位字符串的MD5值;
設計二十個線程同時執(zhí)行MD5值計算,并設計有文件計算位置的全局標識及線程互斥鎖,最大限度運用CPU計算能力在最短時間內計算出該大文件的MD5值。
作為優(yōu)選,所述S4中在大項目文件時分塊分段處理,采用多線程模式,Byte即字節(jié):數(shù)值為0-255。
作為優(yōu)選,所述S5中加密處理方法的后綴名加密適合多軟件移植項目文件處理,設定不同項目文件的后綴名及可以完成不同軟件的項目導出。
作為優(yōu)選,所述S8的詳細步驟如下:
S81:解壓項目文件
根據(jù)S72步驟中解密出的項目文件,修改該文件后綴名為.zip,再調用zip解壓算法對該文件進行解密,在解密過程中,需要保存修改原始文件的最后修改時間,確保在后面提取數(shù)據(jù)的行為時間的準確性;
S82:提取項目文件中的行為及位置信息
通過C++算法對可能存在數(shù)據(jù)的應用的重要數(shù)據(jù)進行檢索提取,底層后臺返回的為Json數(shù)據(jù)表,再通過WPF界面綁定的后臺數(shù)據(jù)對這些數(shù)據(jù)進行排序和展示。
作為優(yōu)選,所述S91中如果在離線地圖的db數(shù)據(jù)庫中能找到,則先本地加載,如果沒有則連網(wǎng)下載這些離線地圖,并在將這些離線地圖保存下來用于下一次的地圖檢索。
與現(xiàn)有技術相比本發(fā)明的優(yōu)點在于:
1、項目文件為單個文件,極大方便了在裝有同一取證軟件的不同電腦中加載顯示項目數(shù)據(jù);
2、以單文件方式的案例項目在拷貝移動數(shù)據(jù)時明顯優(yōu)于以文件夾方式的案例項目;
3、采用獨特的多重加密方式,對項目文件加密及解析,在保證項目文件完整的同時防止項目文件被篡改影響提取數(shù)據(jù)的真實性;
4、該項目文件加密算法在修改項目文件后綴名后(加密算法根據(jù)文件后綴名對整個數(shù)據(jù)集做加密處理),通用性強,方便移植該方法到其他軟件上使用。
5、項目文件中包含提取時恢復出的原始文件數(shù)據(jù),在加載時會重新解析這些原始數(shù)據(jù),隨著取證軟件的版本升級,高版本提取出的數(shù)據(jù)會越來越多,在案例項目的生成與加載的核心算法上與傳統(tǒng)項目文件夾模式區(qū)分開來。
6、以WPF界面顯示技術對項目文件的加載顯示,分析出的行為軌跡數(shù)據(jù)展示更加簡潔直觀,便于研判;
附圖說明
圖1為本發(fā)明實施例界面展示圖。
具體實施方式
為使本發(fā)明的目的:技術方案及優(yōu)點更加清楚明白,以下舉實施例,對本發(fā)明做進一步詳細說明。
一種基于WPF技術生成及加載特定項目文件的方法,包括以下步驟:
S1:源數(shù)據(jù)的備份保存;采用USB和WIFI兩種不同提取方式,滿足在不同硬件環(huán)境下對數(shù)據(jù)的采集提取。增加了識別設備上數(shù)據(jù)的創(chuàng)建時間,及最后修改時間的環(huán)節(jié),因為在備份設備文件到本地電腦中時,會自動將備份文件的最后修改時間設置為當前拷貝時間。當備份到本地后再修改該備份文件在設備上的真實創(chuàng)建時間即最后修改時間,得到與設備原始數(shù)據(jù)一致的文件,為取證信息的真實性奠定基礎,同時也為將源數(shù)據(jù)制作成可重復提取數(shù)據(jù)的項目創(chuàng)造可能。
USB提?。篈ndroid設備開啟USB調試模式,調用adb.exe程序拷貝設備文件到本地,再文件權限不夠的情況下,修改可執(zhí)行權限后再拷貝;
iOS設備調用iTunes的設備服務先備份到本地電腦,在解析該iTunes備份出的文件數(shù)據(jù)。
WIFI提取:PC端程序開啟socket監(jiān)聽作為服務端,而移動設備端以安裝App的客戶端模式,以掃碼方式連接到PC端服務器。PC端監(jiān)聽到客戶端連接后再啟動數(shù)據(jù)傳輸命令執(zhí)行備份文件操作。
本地保存及設備信息固定:本地文件保存在用戶指定位置或程序默認存儲位置,可以同時對多個設備進行數(shù)據(jù)備份提取,備份完成后會做統(tǒng)一標識并保存設備的各項信息,以便在加載項目文件時對該設備備份文件的識別。
S2:以zip方式壓縮源數(shù)據(jù),使用壓縮文件夾的遞歸算法;
使用第三方zip壓縮庫ICSharpCode.SharpZipLib.dll,輸入需要壓縮的文件夾路徑后,開始檢索當前路徑下的文件夾和文件,如果是文件夾則再次調用該算法進行遞歸檢索,如果是文件,則開始已文件流的方式打開該文件,在寫入該動態(tài)庫的ZipEntry對象中,同時刷新與界面交互的當前正在壓縮的文件名及大小,最重要的是在壓縮完該文件時,在調用下列方法保存原始文件的最后修改時間。
FileInfo fileINFO=new FileInfo(file);
entry.DateTime=fileINFO.LastWriteTime.ToUniversalTime();
S3:獲取文件MD5值
大文件MD5值獲取的算法如下:
由于計算大文件的MD5值花費時間較長,所以采用異步分塊計算MD5的方法,首先設定一個數(shù)據(jù)緩沖區(qū)塊int bufferSize=1048576;即1024*1024byte=1MB緩存空間。再打開文件異步讀取緩沖區(qū)塊大小的數(shù)據(jù)進行MD5值的計算,計算完成之后記錄下當前塊的MD5,再讀取文件的下一數(shù)據(jù)塊,循環(huán)執(zhí)行該操作直到整個文件的MD5值計算完畢,最后該方法返回一個32位字符串的MD5值。
異步多線程計算MD5如下:
一個線程執(zhí)行MD5累計計算在文件越大時執(zhí)行時間越長,為了解決該性能問題,設計二十個線程同時執(zhí)行MD5值計算,并設計有文件計算位置的全局標識及線程互斥鎖,最大限度運用CPU計算能力在最短時間內計算出該大文件的MD5值。
S4:十六進制字節(jié)全部逆向處理
這是項目文件的第一重加密處理,及字節(jié)逆向,而在大項目文件時同樣需要分塊分段處理,同樣采用多線程模式,Byte即字節(jié):數(shù)值為0-255。
執(zhí)行字節(jié)流的逆向操作:
首先設定一個字節(jié)緩存buffer:byte[]inSertData=new byte[2048]即2KB的字節(jié)數(shù)組空間,同時設定已加密大小初值:int completedLength=0,加密文件總大小long inFileSize=srcStream.Length。
最后開始執(zhí)行逆向處理的核心算法:每次讀取文件中2KB的數(shù)據(jù)轉化為byte[]數(shù)組,然后該數(shù)組中每個字節(jié)執(zhí)行:inSertData[i]=(byte)(byte.MaxValue-inSertData[i])操作如inSertData[i]=120逆向得到inSertData[i]=255-120=135。completedLength加上byte[]數(shù)組大小用于和inFileSize文件總大小做比較,如果小于inFileSize再循環(huán)返回讀取文件下一個2KB數(shù)據(jù)進行同樣操作,如果相等則完成該文件的所有逆向操作。
字節(jié)數(shù)據(jù)加密演示:
原文件字節(jié)流如[218,52,70,88,76,168,255]逆向操作后將得到新的字節(jié)流數(shù)組為[37,203,185,88,179,87,0]。
S5:后綴名設定及核心加密處理
該步驟為本方法中最核心的加密處理算法,根據(jù)程序內部定義的項目文件后綴名來再次加密字節(jié)流并寫入文件MD值。該加密處理方法的后綴名加密適合多軟件移植項目文件處理,只需要設定不同項目文件的后綴名及可以完成不同軟件的項目導出,雖然使用同一加密算法,但不同后綴名的項目又不無法相互導入,使得該算法的通用性大大加強。
S51:項目文件后綴名的字節(jié)計算及加密碼的獲取如下:
如果項目文件后綴名為"vts"的字符串,由該字符串得出字節(jié)數(shù)組[86,84,83],數(shù)組中的數(shù)字累加再除以10得到余數(shù)為3,而3則為該項目文件的后綴加密碼。再將S4中獲取的新的字節(jié)流數(shù)組與3異或處理得到[38,200,186,91,176,83,3],為了能在解碼時成功獲取原字節(jié)流,這里采用了異或處理。
S52:在新的字節(jié)流中加入項目后綴標識
利用上述得出的加密字節(jié)數(shù)組[38,200,186,91,176,83,3],和后綴字節(jié)數(shù)組[86,84,83],將后綴數(shù)組加入到文件數(shù)組的最前面即得到[86,84,83,38,200,186,91,176,83,3]。
S53:在字節(jié)流中寫入MD5值
在S3中獲取的MD5值為32位的字符串,將該字符串轉化為字節(jié)數(shù)組為128位的字節(jié)數(shù)組。根據(jù)S51中的后綴加密碼3,和S52中的新字節(jié)流[86,84,83,38,200,186,91,176,83,3],將該128位的MD5字節(jié)數(shù)組插入到新字節(jié)流倒數(shù)(后綴加密碼)即倒數(shù)第3位,插入后新字節(jié)流為[86,84,83,38,200,186,91,【128位的MD5字節(jié)數(shù)組】,176,83,3],此致該項目文件的三重加密全部完成,即將最終的字節(jié)流寫入到導出的項目文件中即完成了整個項目文件的制作。
S6:案例項目文件的加載,判斷文件是否為項目文件;
打開選中的項目文件,以文件流的形式打開獲取字節(jié)數(shù)組,開始讀取0-3位的字節(jié)數(shù)組NewArray,如vts后綴的字節(jié)數(shù)組為[86,84,83],比對NewArray與[86,84,83]看是否相等,如果相等則從項目文件中剔除掉該后綴名的字節(jié)數(shù)組,再繼續(xù)進行下一步,如不相等則提示該文件不是可以讀取的項目文件。
S7:逆向解密項目文件;
S71:獲取項目文件的MD5值
根據(jù)S6步驟中得出項目文件的后綴名字節(jié)數(shù)組[86,84,83],參照S51步驟得出后綴加密碼為3。以文件流的方式打開項目文件,找到文件最后倒數(shù)第3個字節(jié),往前讀128個字節(jié)數(shù)組并將該數(shù)組從文件中剔除掉,將該MD5值數(shù)組轉化為字符串類型則獲取了32位的MD5字符串,將該MD5值保持下來用于后續(xù)解密后的文件校對。
S72:文件字節(jié)流的異或逆向解密處理
參照S51中的后綴加密碼及異或加密算法對項目文件全部解密處理;
參照S4中的字節(jié)數(shù)組逆向操作再對項目文件解密處理。
S8:提取源數(shù)據(jù)中有效數(shù)據(jù);
S81:解壓項目文件
根據(jù)S72步驟中解密出的項目文件,修改該文件后綴名為.zip,再調用zip解壓算法對該文件進行解密,在解密過程中,需要保存修改原始文件的最后修改時間,確保在后面提取數(shù)據(jù)的行為時間的準確性。
S82:提取項目文件中的行為及位置信息
通過C++算法對可能存在數(shù)據(jù)的應用,如短信,通話記錄,聯(lián)系人,QQ,微信等重要數(shù)據(jù)進行檢索提取。底層后臺返回的為Json數(shù)據(jù)表,再通過WPF界面綁定的后臺數(shù)據(jù)對這些數(shù)據(jù)進行排序和展示。
S9:以WPF的顯示技術結合地圖及時間線對數(shù)據(jù)精準展示;
S91:WPF界面嵌入地圖插件
首先封裝地圖離線服務器的離線圖片,將這些地圖全部寫入db數(shù)據(jù)庫中(默認制作了0-10級的離線地圖),在WPF軟件界面開啟時,以檢索到的定位點來加載界面的地圖顯示如果在離線地圖的db數(shù)據(jù)庫中能找到,則先本地加載,如果沒有則連網(wǎng)下載這些離線地圖,并在將這些離線地圖保存下來用于下一次的地圖檢索。
S92:展示數(shù)據(jù)
根據(jù)S82步驟中的解析數(shù)據(jù),在界面上展示所有提取到的數(shù)據(jù),在WPF顯示技術的支持下,設備持有人的行動軌跡被生動的刻畫出來,并加上時間線上的行為信息,公檢法系統(tǒng)辦案人員可以快速研判分析案情。界面展示如圖1所示。
本領域的普通技術人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的實施方法,應被理解為本發(fā)明的保護范圍并不局限于這樣的特別陳述和實施例。本領域的普通技術人員可以根據(jù)本發(fā)明公開的這些技術啟示做出各種不脫離本發(fā)明實質的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護范圍內。