【原創(chuàng)】FAT32的數(shù)據(jù)隱寫與程序?qū)崿F(xiàn)

程序下載地址

基于FAT32文件系統(tǒng)的數(shù)據(jù)隱寫實驗

實驗內(nèi)容

本實驗要求通過修改采用FAT32文件系統(tǒng)的分區(qū)結(jié)構(gòu),實現(xiàn)將數(shù)據(jù)隱寫在分區(qū)中的空閑扇區(qū),并且該隱寫數(shù)據(jù)不會被新拷入文件覆蓋。具體完成以下目標:
(1) 查找分區(qū)中未分配的扇區(qū),將小于4KB(4096字節(jié))的數(shù)據(jù)隱寫其中;
(2) 為了避免用戶發(fā)現(xiàn)墩划,寫入的數(shù)據(jù)不能夠以文件形式存在;
(3) 為了保證數(shù)據(jù)的可靠性嗡综,寫入的數(shù)據(jù)不能夠被新拷入的文件覆蓋。

實驗步驟

1. 初始化優(yōu)盤

將優(yōu)盤插入主機的USB接口,待主機識別后,雙擊“我的電腦”,找到優(yōu)盤所在分區(qū),右鍵點擊殊者,選擇“格式化”

模擬現(xiàn)實情況猖吴,向優(yōu)盤中拷入一些文件

2. 利用WinHex打開優(yōu)盤

雙擊WinHex.exe共屈,進入操作界面。點擊菜單“工具”?“打開磁盤”泼掠,選擇優(yōu)盤所在分區(qū)

3. 修改FSINFO保留扇區(qū)

為了找到可以寫入數(shù)據(jù)的空閑空間,打開分區(qū)的1號扇區(qū)(第2個扇區(qū)),即保留扇區(qū)右冻。注意可以通過該扇區(qū)0x0偏移的4個字節(jié)“52 52 61 41”以及0x1E4處的4個字節(jié)“72 72 41 61”來判斷定位的FSINFO扇區(qū)是否正確暗赶。

根據(jù)FAT32文件系統(tǒng)結(jié)構(gòu)被环,該扇區(qū)偏移0x1E8處連續(xù)的4個字節(jié)即為當(dāng)前分區(qū)所有的可用簇總數(shù)柱搜,得到值為“1C F6 1C 00”控乾,由于需要將數(shù)據(jù)寫入一個空閑簇慨仿,因此將其值減1,得到“1B F6 1C 00”相寇;同理绵脯,偏移0x1EC處的連續(xù)4個字節(jié)為當(dāng)前分區(qū)內(nèi)“下一個可用簇”的字段蛆挫,值為“A5 03 00 00”。注意該簇0x0362即為我們要寫入數(shù)據(jù)的空閑簇做粤。

通過FAT表找到連續(xù)4個全零字節(jié)所在簇吼和,我們這里找到的是0x0362阳距,將“下一個可用簇”的值0x0362改為0x0363.

0x0362就是我們要保護的簇

4. 修改FAT表

接下來需要修改FAT表中的空閑簇咖熟,在Winhex文件顯示窗口中點擊“FAT1”來到FAT1表的初始位置薪韩。

我們來計算一下需要修改的地址偏移

>>> hex((0x362)*4)
'0xd88'
>>> 0xd88+0x183400      
1589640                 
>>> hex(1589640)        
'0x184188' 
>>> 0xd88+0x8c1a00
9185160
>>> hex(9185160)
'0x8c2788'                

在FAT1表中,找到0x362簇的狀態(tài)字符拉盾,即相對起始處偏移0x362×4(0xd88)的指示的4個字節(jié)承桥,將其值“00 00 00 00”改為“FF FF FF 0F”或者“F7 FF FF FF”,前者表示該簇已被占用轻黑,后者表示該簇已壞,如圖1.8所示。將該簇狀態(tài)標志為壞簇或占用簇主要為了讓系統(tǒng)認為該簇已使用而不會被新寫入的數(shù)據(jù)覆蓋态罪。FAT2是FAT1的備份下面,為了保險起見复颈,也采用與FAT1同樣的處理方式。

5. 填寫數(shù)據(jù)

找到數(shù)據(jù)區(qū)“0x362”簇開始的位置诸狭,將連續(xù)的8個扇區(qū)內(nèi)容填入需要隱藏的數(shù)據(jù)券膀,由于本實驗只是為了驗證寫入數(shù)據(jù)不會被新文件覆蓋,因此我們手工將每個扇區(qū)的開始部分改為連續(xù)的0x66,即字符”f”驯遇。數(shù)據(jù)區(qū)的0x362簇位置可利用WinHex菜單中提供的工具查找芹彬,選擇菜單“位置>Go to Sector”,在Cluster處填入0x362轉(zhuǎn)換為十進制的數(shù)字866即可。

跳轉(zhuǎn)到這來的時候里面存滿了數(shù)據(jù)叉庐,說明這是快速格式化沒有徹底擦除數(shù)據(jù)的證據(jù)舒帮,這也是數(shù)據(jù)可以恢復(fù)的原因

跳轉(zhuǎn)到這里之后我們在扇區(qū)的開頭填上fffffffffffffffffff,這里僅僅是用來做一個標記在頭和尾的地方設(shè)置一個標記來判斷扇區(qū)數(shù)據(jù)是否被修改

然后我們算一下尾部地址

>>> hex(0x1360000+8*512)
'0x1361000'

同樣改完即可

修改完畢

6. 保存與驗證

點擊菜單“文件Save Sectors”將寫入的數(shù)據(jù)保存。接下來需要往優(yōu)盤中寫入新的文件玩郊,以用來驗證之前寫入的數(shù)據(jù)不會被覆蓋肢执。在拷入數(shù)據(jù)前,注意先將優(yōu)盤從系統(tǒng)中正常退出译红,重新插拔预茄。
向U盤里拷入新的文件:一部電影:

再次用WinHex將優(yōu)盤所在分區(qū)打開。定位到數(shù)據(jù)區(qū)的0x362簇的最后一個扇區(qū)侦厚,檢查一下看看先前在0x362簇寫入的數(shù)據(jù)是否被覆蓋

可以看出耻陕,先前寫入的0x362處的隱藏數(shù)據(jù)沒有被新文件覆蓋,新文件從0x363處開始寫入刨沦。在文件目錄中看不到隱藏數(shù)據(jù)的任何部分诗宣。
以上實驗中FAT區(qū)中的對應(yīng)簇狀態(tài)標識為壞簇也可達到同樣目的。


對上述步驟的程序化實現(xiàn)

Winhex腳本學(xué)習(xí)

通過上面的實驗想诅,我對步驟已經(jīng)比較熟悉了召庞,寫腳本也是得心應(yīng)手

對于python和winhex腳本的選擇,我選擇了后者来破,因為上述實驗都是在winhex實現(xiàn)篮灼,而且winhex腳本只需要一個winhex就可以運行,比較方便讳癌,然后語言也比較白癡穿稳,容易現(xiàn)學(xué)現(xiàn)賣存皂,把這個腳本寫出來也只花了一個小時

但是winhex腳本語言確實比較蠢晌坤,和網(wǎng)上教程還不一定全都相同,所以總結(jié)了一下:

Winhex腳本的坑

  1. winhex腳本不區(qū)分大小寫 盤符好像區(qū)分
  2. winhex腳本用“\\”符號表示注釋旦袋,但是有些環(huán)境下寫注釋就會報錯
  3. winhex腳本可以用雙引號或單引號將整數(shù)強制轉(zhuǎn)換為文本
  4. winhex腳本支持的運算符有加(+)骤菠、減(-)、乘(*)疤孕、除(/)商乎、取模(%)、按位與(&)祭阀、按位或(|)和按位異或(^)運算符
  5. 雖說支持運算鹉戚,但是必須在運算式外面加上括號,不然會識別為字符串
  6. 有時調(diào)試的話我用message把值給彈出來专控,但是寫運算式是不支持的抹凳,加上括號也不行,也就是最多只能彈一個變量2333333
  7. 至今不知道賦值怎么賦

寫程序

這里有點非常需要注意:

這兩種方式打開非常不一樣

后者打開的話這里所有的偏移算上U盤起始扇區(qū)的0x4000
而用前者打開就不需要加上0x4000

然后我們將每一步的偏移按公式就算出來可以寫出程序

實現(xiàn)效果

  1. FSINFO保留扇區(qū)已經(jīng)被改過來了伦腐,和上面寫實驗報告的時候前移了一個簇
  1. FAT表也修改成功了
  1. 最后在被保護的簇頭和尾寫下“666666666666666”
    也算是一種金絲雀吧
  1. 然后我們還發(fā)現(xiàn)了上次手動修改留下的痕跡_(:3」∠)_


這個時候我們再存儲其他數(shù)據(jù)

將電影存進去之后

我們再檢查

發(fā)現(xiàn)我們要被隱藏的簇保存完好

電影從下一簇開始存儲


注意事項

其實腳本已寫好赢底,開始幾次試了一下,把電影拷進去,發(fā)現(xiàn)我們我們要保護的簇都被覆蓋了幸冻,暈死

試了好幾次粹庞,還好步驟已經(jīng)程序化了,不然嘗試幾次會累死

后來發(fā)現(xiàn)是

改完數(shù)據(jù)保存之后洽损,需要重新插拔一次U盤

前面做實驗的時候記得好像并沒有插拔也成功了庞溜,所以并沒有在意
我覺得需要插拔的原因可能是電腦需要更新一下FSINFO保留扇區(qū)吧

程序地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碑定,隨后出現(xiàn)的幾起案子强缘,更是在濱河造成了極大的恐慌,老刑警劉巖不傅,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旅掂,死亡現(xiàn)場離奇詭異,居然都是意外死亡访娶,警方通過查閱死者的電腦和手機商虐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崖疤,“玉大人秘车,你說我怎么就攤上這事〗俸撸” “怎么了叮趴?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長权烧。 經(jīng)常有香客問我眯亦,道長,這世上最難降的妖魔是什么般码? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任妻率,我火速辦了婚禮,結(jié)果婚禮上板祝,老公的妹妹穿的比我還像新娘宫静。我一直安慰自己,他們只是感情好券时,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布孤里。 她就那樣靜靜地躺著,像睡著了一般橘洞。 火紅的嫁衣襯著肌膚如雪捌袜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天震檩,我揣著相機與錄音琢蛤,去河邊找鬼蜓堕。 笑死,一個胖子當(dāng)著我的面吹牛博其,可吹牛的內(nèi)容都是我干的套才。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼慕淡,長吁一口氣:“原來是場噩夢啊……” “哼背伴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峰髓,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤傻寂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后携兵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疾掰,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年徐紧,在試婚紗的時候發(fā)現(xiàn)自己被綠了静檬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡并级,死狀恐怖拂檩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘲碧,我是刑警寧澤稻励,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站愈涩,受9級特大地震影響望抽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钠署,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一糠聪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谐鼎,春花似錦、人聲如沸趣惠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽味悄。三九已至草戈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侍瑟,已是汗流浹背唐片。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工丙猬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人费韭。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓茧球,卻偏偏與公主長得像,于是被迫代替她去往敵國和親星持。 傳聞我的和親對象是個殘疾皇子抢埋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容