怎樣修改檔案頭資訊

2021-08-21 12:27:43 字數 1011 閱讀 2514

這兩天在寫des檔案加密的**,其中遇到3個問題,請教一下:

1:我需要為已經加密的檔案的副檔名改為「.des」(譬如原來為abc.jpg改為abc.des),在解密後又要改會原來的格式,這是問題來了:我怎麼知道這個檔案在加密前是什麼格式的檔案?請問,有什麼辦法可以在沒有副檔名的情況下知道檔案型別。我想可以在檔案的頭資訊中記錄檔案原來的副檔名,但請問,c#怎樣對檔案的標頭檔案資訊進行訪問?

2:我希望我的程式能識別哪個檔案是已經加密了的,哪個是未加密或者已經解密的,但我不想只是簡單的通過檔名進行判別,而是想通過檔案的頭資訊來記錄。

請問c#怎樣可以訪問(修改)檔案頭資訊?

除了檔案頭資訊,更好更專業的方法就更好了。先謝謝先

給你兩種方法:

1.比較簡單。你修改一下檔案加密後的命名,比如 你對 abc.jpg 進行des加密,加密後的檔名改為 abc.jpg.des 這樣就好解密了

2.對 abc.jpg 加密成 abc.des 後,用 filestream 類的seek 方法移動到檔案末尾, 把 副檔名jpg 寫入到檔案裡,解密時先seek到檔案末尾前三個位元組,讀出副檔名,然後再把檔案中的其他部分讀出來作為des解密的輸入,然後還原

檔案的型別是通過標頭檔案來區別的,這個沒錯!

但是你這個問題比較簡單,用不上去解析標頭檔案!

只需要在原檔案流的最前面加乙個標緻的位元組就行了!

比如,原檔案加密後的位元組流為:43 55 73 02 

你在往檔案中寫的時候,在其前面加乙個位元組xx(01=jpg,02=bmp,03=gif等)

如果原檔案是jpg,則把流寫成,01 43 55 73 02 

在解密時,首先讀到第乙個位元組,進行判斷型別,把其餘的位元組(43 55 73 02 )寫到另外乙個新流中進行解密就行了!

system.io 命名空間裡面提供了你要的具體操作功能實現。

大概是開啟2個檔案流,乙個檔案讀檔案,乙個檔案流寫檔案。

把寫檔案的,先寫了標識,在把讀檔案的那個流的內容拷貝到寫的裡面。

寫完以後,這個寫檔案輸出,就是你要的檔案了。

Dll注入 修改PE檔案頭

dll注入,除了常見的遠執行緒注入,掛鉤和修改登錄檔以外還可以通過修改pe檔案頭來達到注入目的,廢話少說先上菜。pe檔案經常會呼叫外部dll檔案,而需要呼叫的dll檔案都會在pe檔案說明,通過 nt頭 可選頭 匯入表 可以找到匯入表,而匯入表就是對需要匯入的每個dll的說明,它實際上是乙個20個位元...

修改PE檔案頭刪除ASLR

windows核心6.0版本之後增設了alsr address space layout randomization 機制,使得每次pe檔案記載到虛擬記憶體的起始位址不一樣,而且棧和堆起始位址也不一樣.熟知pe檔案頭格式的逆向玩家,可以通過修改乙個標誌位來達到刪除編譯好的可執行檔案的aslr功能.p...

C 列印PE檔案頭資訊Demo

pe檔案格式被組織為乙個線性的資料流,它由乙個ms dos頭部開始,接著是乙個是模式的程式殘餘以及乙個pe檔案標誌,這之後緊接著pe檔案頭和可選頭部。這些之後是所有的段頭部,段頭部之後跟隨著所有的段實體。檔案的結束處是一些其它的區域,其中是一些混雜的資訊,包括重分配資訊 符號表資訊 行號資訊以及字串...