我读过phison的源代码(关于badusb,python文件)。但是我不明白程序发送给SCSI设备的是什么命令。在阅读了SCSI命令后,我仍然找不到以"06h“开头的操作码(有一个类似的设置设备ID的操作码) https://www.seagate.com/staticfiles/support/disc/manuals/scsi/100293068a.pdf上面是我找到的SCSI命令。下面是读取和写入命令:
def get_info(自身):
''' Performs a SCSI call to read version info from the device. Returns bool. The object's following attributes are set: data, version, run_mode, chip_type, date, f1f2 ''' self.data = self.SCSI_device.read('\x06\x05\x00\x00\x00\x00\x00\x00\x01',528) if not self.data or self.data[0x17A:0x17C]!='VR': return False self.version = struct.unpack('BBB', self.data[0x94:0x97]) self.f1f2 = struct.unpack('BB', self.data[0x9A:0x9C]) self.date = struct.unpack('BBB', self.data[0x97:0x9A]) if self.data[0xA0:0xA8]==' PRAM ': self.run_mode = 'BROM' # BootROM elif self.data[0xA0:0xA8]==' FW BURN': self.run_mode = 'BN' # firmware burner elif self.data[0xA0:0xA8]==' HV TEST': self.run_mode = 'HV' # hardware verify else: self.run_mode = 'FW' # firmware self.chip_type = struct.unpack('>H', self.data[0x17E:0x180])[0] data = self.SCSI_device.read('\x06\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',512)[0:6].encode('hex').upper() self.chip_id = '-'.join(data[i:i+2] for i in range(len(data))[::2]) return Truedef run_firmware(自身、固件):
''' Loads firmware onto device. Returns bool. ''' # rebooting self.brom() sleep(2) # sending firmware self.load_file(firmware,'\x01','\x00') ret = self.SCSI_device.read('\x06\xEE\x01\x00\x00\x00\x00\x00\x00', 72) sleep(2) self.load_file(firmware,'\x03','\x02') self.SCSI_device.read('\x06\xEE\x01\x01\x00\x00\x00\x00\x00', 72) self.SCSI_device.read('\x06\xEE\x00\x00\x00\x00\x00\x00\x00', 72) self.SCSI_device.read('\x06\xEE\x00\x01\x00\x00\x00\x00\x00', 72) # executing self.brom() sleep(2) return Truedef pram(self):
''' Called to run a burner or firmware. Returns int result. ''' return self.SCSI_device.write('\x06\xB3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', '')def brom(自身):
''' Sets device into boot mode from firmware mode. Returns int result. ''' return self.SCSI_device.write('\x06\xBF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', '')发布于 2017-11-03 08:27:26
根据this的说法,它是特定于供应商的。
发布于 2017-11-03 09:22:12
正如Paul指出的,它是特定于供应商的操作码。这意味着它不是任何SCSI标准的一部分。供应商可以使用0x06做任何他们想做的事情。
本页详细介绍了这些SCSI CDB在BootROM上的工作原理:
https://stackoverflow.com/questions/47086505
复制相似问题