檢視 壞檔的製作方式 的原始碼
←
壞檔的製作方式
前往:
導覽
、
搜尋
由於下列原因,您沒有權限進行 編輯此頁面 的動作:
您剛才的請求只有這個使用者組的使用者才能使用:
使用者
你可以檢視並複製本頁面的原始碼。
=簡介= 壞檔的製作共有兩種方式,一種是刪除部分檔案區塊,而另一種是取代部分檔案區塊,實現方式要靠python的腳本來達到目的。 =刪除區塊= 一般情況下,下載的檔案不會只出現某個區塊遺失的狀況,因此製作此種壞檔只是單純測試修復能力。 ==腳本== #開啟腳本後填寫刪除區塊的起始點(數值請填大於500)以即刪除區塊的長度(數值請填大於80)兩個參數,單位為byte #[http://pastebin.com/rAkbALvC 腳本備份] <pre> #!/usr/bin/python3 default_block_size = 512 def slice_file(source_filename, dest_filename, slice_from, slice_to, block): f_in = open(source_filename, 'rb') f_out = open(dest_filename, 'wb') read_count = 0 eof = False while not eof: read = f_in.read(block) if(len(read) < block): eof = True if(read_count < slice_from or read_count >= slice_to): f_out.write(read) read_count += block f_in.close() f_out.close() if __name__ == '__main__': import sys if(len(sys.argv) < 3): print('missing arguments:') print(sys.argv[0] + ' source_filename dest_filename [slicing_starts_from slicing_length [block_size]]') quit() source_filename = sys.argv[1] dest_filename = sys.argv[2] if(len(sys.argv) < 4): slice_from = int(input('slicing starts from: ')) slice_to = slice_from + int(input('slicing length: ')) else: slice_from = int(sys.argv[3]) slice_to = int(sys.argv[3]) + int(sys.argv[4]) if(len(sys.argv) >= 6): block = int(sys.argv[6]) else: block = default_block_size slice_file(source_filename, dest_filename, slice_from, slice_to, block) </pre> ==範例== *檔案大小:12539482 byte *區塊刪除起始點:location 509 *區塊刪除長度:50byte *結果:location 0x200~ 0x400 被刪除,因為block size為512byte,故採用無條件進入的方式計算來說結果合理。 {{Warning|腳本上設計的缺失,前512 byte的資料無法透過這個腳本刪除,參數填的過小會導致檔案沒有更動}}<br /> {{Note|CLI可連續調用腳本實現一行指令同時刪除不同區塊的,但是腳本是以後方區塊刪除後往前堆疊的角度來設計故location的填寫必須先指定大才能指定小,舉例 '''cut.py test.rar test2.rar 4096 512 && cut.py test2.rar test3.rar 2048 512'''}}<br /> http://blessing.bdmv.info/tutorial/corrupt001.png =區塊損壞= ==腳本== #開啟腳本後填寫改寫區塊的起始點以及改寫資料的長度共兩個參數,單位為byte, *[http://pastebin.com/dqqsRiMs 腳本備份] <pre> #!/usr/bin/python3 default_block_size = 512 def slice_file(source_filename, dest_filename, slice_from, slice_to, block): f_in = open(source_filename, 'rb') f_out = open(dest_filename, 'wb') read_count = 0 eof = False import random random.seed() while not eof: read = f_in.read(block) if(len(read) < block): eof = True if(read_count < slice_from or read_count >= slice_to): f_out.write(read) else: for i in range(block): f_out.write(bytes(chr(random.randint(0,127)), encoding = 'utf-8')) read_count += block f_in.close() f_out.close() if __name__ == '__main__': import sys if(len(sys.argv) < 3): print('missing arguments:') print(sys.argv[0] + ' source_filename dest_filename [slicing_starts_from slicing_length [block_size]]') quit() source_filename = sys.argv[1] dest_filename = sys.argv[2] if(len(sys.argv) < 4): slice_from = int(input('slicing starts from: ')) slice_to = slice_from + int(input('slicing length: ')) else: slice_from = int(sys.argv[3]) slice_to = int(sys.argv[3]) + int(sys.argv[4]) if(len(sys.argv) >= 6): block = int(sys.argv[6]) else: block = default_block_size slice_file(source_filename, dest_filename, slice_from, slice_to, block) </pre> ==範例== *檔案大小:12539482 byte *資料修改起始點:location 0x00 *資料修改長度:50byte *結果:location 0x00~0x200資料被改寫,因為block size為512byte,故結果合理。 http://blessing.bdmv.info/tutorial/corrupt002.png
此頁面使用了以下樣版:
模板:Note
(
檢視原始碼
)
模板:Warning
(
檢視原始碼
)
返回
壞檔的製作方式
。
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
檢視
閱讀
檢視原始碼
檢視歷史
更多
搜尋
導覽
主頁面
近期變動
隨機頁面
使用說明
工具箱
連入頁面
相關頁面修訂記錄
特殊頁面
頁面資訊