python NTFS runlistのコードの解釈
4111 ワード
コードは次のとおりです.
実行効果は次のとおりです.
root@zhangyu-VirtualBox:~/NTFS-5# python3 read_runlist.py mft_source.img
***パラメータの数またはフォーマットが間違っています.
コマンド形式:
python3 read_runlist.py :
File name:説明するrunlistを含むファイル名
Start bytes:runlistの開始位置をファイルで説明する
Start LCN:runlistから始まる参照LCN値は、完全なrunlistである場合、この値は0であるべきである.
Start VCN:runlistから始まる参照VCN値は、0 x 20のないrunlistのセグメントであれば、この値の多くは0である.
*戻り値:2 Dキューで結果を印刷します.
root@zhangyu-VirtualBox:~/NTFS-5# python3 read_runlist.py mft_source.img 5688 0 0
Runlist(合計18個の断片):
VCN LCN LEN
0 32212 1
1 157952 2
3 207115 3
6 244046 3
9 122523 1
10 157991 1
11 170296 3
14 40552 5
19 149853 2
21 122721 2
23 141674 1
24 145783 3
27 158109 3
30 145820 1
31 240236 1
32 154081 1
33 166379 3
36 178711 3
#!/usr/bin/python3
#http://www.frombyte.com
import os
import sys
import random
import hashlib
import struct
import zlib
import re
def help_exit():
print(" :")
print(" python3 %s :" % sys.argv[0])
print(" File name: runlist ")
print(" Start bytes: runlist ")
print(" Start LCN:runlist LCN , runlist, 0.")
print(" Start VCN:runlist VCN , 0x20 runlist, 0.")
print(" * : , 。
")
exit()
# A-F
def is_num_by_except(s):
try:
a=int(s,16)
if (a>0 and a<=16): return True
else: return False
except ValueError:
return False
if len(sys.argv)!= 5 :
print(" *** !")
help_exit()
if sys.argv[2].isdigit():
spoi = int(sys.argv[2])
if spoi<0:
print("*** , ")
help_exit()
else:
print("*** , ")
help_exit()
if sys.argv[3].isdigit():
slcn = int(sys.argv[3])
if slcn<0:
print("*** , LCN ")
help_exit()
else:
print("*** , LCN ")
help_exit()
if sys.argv[4].isdigit():
svcn = int(sys.argv[4])
if svcn<0:
print("*** , VCN ")
help_exit()
else:
print("*** , VCN ")
help_exit()
def get_i(vl,ilen):
q=0
for i in range(0,ilen):
q = q | ( vl[0][i] < 0x80:
q = q - (1 <> 4
v1_l = (v1 &0xF)
if (v1_l >=8) or (v1_p >=8) or (v1_l == 0):
print("*** %d:run list !***"%(i+spoi))
break
i = i+1
if (i+8) >= 1024:
break
t = struct.unpack_from('8s',data,i)
v1_dl = get_i(t,v1_l)
if v1_dl = 1024:
break
t = struct.unpack_from('8s',data,i)
v1_dp = get_i(t,v1_p)
slcn = slcn + v1_dp
lists.append([slcn,v1_dl])
i = i + v1_p
#print("%x,%x:%x,%x"%(v1_l,v1_p,v1_dl,slcn))
print("Runlist( %d ):"%len(lists))
print("%20s%20s%20s"%("VCN","LCN","LEN"))
for i in lists:
print("%20d%20d%20d"%(svcn,i[0],i[1]))
svcn += i[1]
f.close()
実行効果は次のとおりです.
root@zhangyu-VirtualBox:~/NTFS-5# python3 read_runlist.py mft_source.img
***パラメータの数またはフォーマットが間違っています.
コマンド形式:
python3 read_runlist.py :
File name:説明するrunlistを含むファイル名
Start bytes:runlistの開始位置をファイルで説明する
Start LCN:runlistから始まる参照LCN値は、完全なrunlistである場合、この値は0であるべきである.
Start VCN:runlistから始まる参照VCN値は、0 x 20のないrunlistのセグメントであれば、この値の多くは0である.
*戻り値:2 Dキューで結果を印刷します.
root@zhangyu-VirtualBox:~/NTFS-5# python3 read_runlist.py mft_source.img 5688 0 0
Runlist(合計18個の断片):
VCN LCN LEN
0 32212 1
1 157952 2
3 207115 3
6 244046 3
9 122523 1
10 157991 1
11 170296 3
14 40552 5
19 149853 2
21 122721 2
23 141674 1
24 145783 3
27 158109 3
30 145820 1
31 240236 1
32 154081 1
33 166379 3
36 178711 3