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("")
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("")
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("")