Example #1
0
	def populate_part_1(self,prefix = ""):
		sector = self.sector
		self.buffer.append((prefix + "jboot", disutil.ashex(disutil.make_string(sector[0:3]))))
		self.buffer.append((prefix + "oem_id", disutil.make_string(sector[3:11])))
		self.buffer.append((prefix + "byts_per_sector", disutil.toInt(sector[11:13])))
		self.buffer.append((prefix + "sector_per_cluster", disutil.toInt(sector[13:14])))
		self.buffer.append((prefix + "reserved_sector_count", disutil.toInt(sector[14:16])))
		self.buffer.append((prefix + "num_fats", disutil.toInt(sector[16:17])))
		self.buffer.append((prefix + "root_entries_count", disutil.toInt(sector[17:19])))		
		self.buffer.append((prefix + "total_sector_16", disutil.toInt(sector[19:21])))
		self.buffer.append((prefix + "media_type", disutil.ashex(disutil.make_string(sector[21:22]),1)))
		self.buffer.append((prefix + "fat_size_16", disutil.toInt(sector[22:24])))
		self.buffer.append((prefix + "sectors_per_track", disutil.toInt(sector[24:26])))
		self.buffer.append((prefix + "number_heads", disutil.toInt(sector[26:28])))
		self.buffer.append((prefix + "hidden_sectors", disutil.toInt(sector[28:32])))	
		self.buffer.append((prefix + "total_sector_32", disutil.toInt(sector[32:36])))
		self.buffer.append((prefix + "fat_size_32", disutil.toInt(sector[36:40])))
		if VERBOSE == True:
			print("\n\tPopulate part 1 :\n")
			print(self)
			print("")
Example #2
0
	def load_fsinfo_sector(self, prefix = "",fsi_pos = -1):
		if self[prefix + "volume_type"] != "FAT32" :
			return False
		if fsi_pos < 0:
			fsi_pos = self[prefix + "file_system_info"]
		sector = self.bufferObj.new_buffer(fsi_pos,fsi_pos+1)[0]
		self.buffer.append((prefix + "fsi_lead_signature", disutil.ashex(disutil.make_string(sector[0:4]),1)))
		self.buffer.append((prefix + "fsi_reserved1", disutil.ashex(disutil.make_string(sector[4:484]))))
		self.buffer.append((prefix + "fsi_struc_sig", disutil.ashex(disutil.make_string(sector[484:488]),1)))
		self.buffer.append((prefix + "fsi_free_count", disutil.toInt(sector[488:492])))
		self.buffer.append((prefix + "fsi_next_free", disutil.toInt(sector[492:496])))
		self.buffer.append((prefix + "fsi_reserved2", disutil.ashex(disutil.make_string(sector[496:508]))))
		self.buffer.append((prefix + "fsi_boot_close", disutil.ashex(disutil.make_string(sector[508:512]),1)))
		if self[prefix + "fsi_lead_signature"] != "41:61:52:52":
			raise "BadFSInfoSignature"
		if self[prefix + "fsi_struc_sig"] != "61:41:72:72":
			raise "BadFSInfoStructSignature"
		if self[prefix + "fsi_boot_close"] != "aa:55:00:00":
			raise "BadFSInfoBootClose"
		if VERBOSE == True:
			print("\n\tLoad Fsinfo :\n")
			print(self)
			print("")
Example #3
0
	def populate_part_2(self,prefix = ""):
		sector = self.sector
		fat_type = self[prefix + "volume_type"]
		if (fat_type == "FAT12") or (fat_type == "FAT16"):
			#fatmagik = disutil.make_string(sector[54:62])
			#if((fatmagik != "FAT     ") 
			#or (fatmagik != "FAT12   ") 
			#or (fatmagik != "FAT16   ")):
			#	raise("BadFatMagik")
			self[prefix + "fat_size_32"] = ("drive_number", disutil.ashex(disutil.make_string(sector[36:37])))
			#self.buffer.append((prefix + "drive_number", disutil.ashex(disutil.make_string(sector[36:37]))))
			self.buffer.append((prefix + "reserved1", disutil.toInt(sector[37:38])))
			self.buffer.append((prefix + "boot_signature", disutil.ashex(disutil.make_string(sector[38:39]),1)))
			self.buffer.append((prefix + "volume_id",  disutil.ashex(disutil.make_string(sector[39:43]),1)))
			self.buffer.append((prefix + "volume_label", disutil.make_string(sector[43:54])))
			self.buffer.append((prefix + "file_system_type", disutil.make_string(sector[54:62])))
		elif fat_type == "FAT32":
			#fat32magik = disutil.make_string(sector[82:90])
			#if fat32magik != "FAT32   ":
			#	raise("BadFatMagik")
			#self.buffer.append((prefix + "fat_size_32", disutil.toInt(sector[36:40])))
			self.buffer.append((prefix + "extended_flags", disutil.ashex(disutil.make_string(sector[40:42]))))
			self.buffer.append((prefix + "file_system_version", disutil.ashex(disutil.make_string(sector[42:44]))))
			self.buffer.append((prefix + "root_cluster", disutil.toInt(sector[44:48])))
			self.buffer.append((prefix + "file_system_info", disutil.toInt(sector[48:50])))
			self.buffer.append((prefix + "book_boot_sector", disutil.toInt(sector[50:52])))
			self.buffer.append((prefix + "reserved", disutil.toInt(sector[52:64])))
			self.buffer.append((prefix + "drive_number", disutil.ashex(disutil.make_string(sector[64:65]))))
			self.buffer.append((prefix + "reserved1", disutil.toInt(sector[65:66])))
			self.buffer.append((prefix + "boot_signature", disutil.ashex(disutil.make_string(sector[66:67]),1)))
			self.buffer.append((prefix + "volume_id", disutil.ashex(disutil.make_string(sector[67:71]),1)))
			self.buffer.append((prefix + "volume_label", disutil.make_string(sector[71:82])))
			self.buffer.append((prefix + "file_system_type", disutil.make_string(sector[82:90])))
		else:
			raise("NonFatFileSystem")
		
		self.buffer.append((prefix + "partition_1", disutil.ashex(disutil.make_string(sector[446:462]))))
		self.buffer.append((prefix + "partition_2", disutil.ashex(disutil.make_string(sector[462:478]))))
		self.buffer.append((prefix + "partition_3", disutil.ashex(disutil.make_string(sector[478:494]))))
		self.buffer.append((prefix + "partition_4", disutil.ashex(disutil.make_string(sector[494:510]))))
		
		self.buffer.append((prefix + "boot_close", disutil.ashex(disutil.make_string(sector[510:512]),1)))
		
		if VERBOSE == True:
			print("\n\tPopulate Part 2 :\n")
			print(self)
			print("")