📄 sisfields.py
字号:
def __init__(self) :
SISField.__init__(self)
self.operation = None
self.operationOptions = None
self.compressedLength = None
self.uncompressedLength = None
self.fileIndex = None
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader))
self.subFields.append(fieldParser.parseField(fileReader))
field = fieldParser.parseField(fileReader)
self.subFields.append(field)
if field.type == 41 : # read field was capabilities ==> there is one more field left
self.subFields.append(fieldParser.parseField(fileReader))
self.operation = fileReader.readBytesAsUint(4)
self.operationOptions = fileReader.readBytesAsUint(4)
self.compressedLength = fileReader.readBytesAsUint(8)
self.uncompressedLength = fileReader.readBytesAsUint(8)
self.fileIndex = fileReader.readBytesAsUint(4)
def readableStr(self) :
return "index: " + str(self.fileIndex)
class SISHashField(SISField) :
def __init__(self) :
SISField.__init__(self)
self.algorithm = None
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.algorithm = fileReader.readBytesAsUint(4)
self.subFields.append(fieldParser.parseField(fileReader)) # logo file
class SISIfField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # expression
self.subFields.append(fieldParser.parseField(fileReader)) # install block
self.subFields.append(fieldParser.parseField(fileReader)) # else ifs
class SISElseIfField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # expression
self.subFields.append(fieldParser.parseField(fileReader)) # install block
class SISInstallBlockField(SISField) :
def __init__(self) :
SISField.__init__(self)
self.files = None
self.embeddedSISFiles = None
self.ifBlocks = None
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader))
self.subFields.append(fieldParser.parseField(fileReader))
self.subFields.append(fieldParser.parseField(fileReader))
class SISExpressionField(SISField) :
def __init__(self) :
SISField.__init__(self)
self.operator = None
self.integerValue = None
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.operator = fileReader.readBytesAsUint(4)
self.integerValue = fileReader.readBytesAsInt(4)
if self.operator == 10 or self.operator == 13 :
self.subFields.append(fieldParser.parseField(fileReader))
if self.operator == 1 or self.operator == 2 or self.operator == 3 or self.operator == 4 or self.operator == 5 or self.operator == 6 or self.operator == 7 or self.operator == 8 or self.operator == 11 or self.operator == 12 :
self.subFields.append(fieldParser.parseField(fileReader))
if not (self.operator == 13 or self.operator == 14 or self.operator == 15 or self.operator == 16 or self.operator == 10) :
self.subFields.append(fieldParser.parseField(fileReader))
class SISDataField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # data units
class SISDataUnitField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # file data
class SISFileDataField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # raw file data
class SISSupportedOptionField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # names
class SISControllerChecksumField(SISField) :
def __init__(self) :
SISField.__init__(self)
self.checksum = None
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
self.checksum = fileReader.readBytesAsUint(2)
class SISDataChecksumField(SISField) :
def __init__(self) :
SISField.__init__(self)
self.checksum = None
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
self.checksum = fileReader.readBytesAsUint(2)
class SISSignatureField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # signature algorithm
self.subFields.append(fieldParser.parseField(fileReader)) # signature data
class SISBlobField(SISField) :
def __init__(self) :
SISField.__init__(self)
self.data = None
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
self.data = fileReader.readPlainBytes(self.length)
class SISSignatureAlgorithmField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # algorithm identifier
class SISSignatureCertificateChainField(SISField) :
def __init__(self) :
SISField.__init__(self)
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
fieldParser = sisreader.SISFieldParser()
self.subFields.append(fieldParser.parseField(fileReader)) # signatures
self.subFields.append(fieldParser.parseField(fileReader)) # certificate chain
class SISDataIndexField(SISField) :
def __init__(self) :
SISField.__init__(self)
self.dataIndex = None
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
self.dataIndex = fileReader.readBytesAsUint(4)
class SISCapabilitiesField(SISField) :
def __init__(self) :
SISField.__init__(self)
self.capabilities = 0
self.readableCaps = []
def initFromFile(self, fileReader) :
self.length = self.readFieldLength(fileReader)
self.capabilities = fileReader.readBytesAsUint(self.length)
for i in range(20) :
if (self.capabilities >> i) & 0x01 :
self.readableCaps.append(CapabilityNames[i])
def readableStr(self) :
return " ".join(self.readableCaps)
SISFieldTypes = {
1 : SISStringField,
2 : SISArrayField,
3 : SISCompressedField,
4 : SISVersionField,
5 : SISVersionRangeField,
6 : SISDateField,
7 : SISTimeField,
8 : SISDateTimeField,
9 : SISUidField,
10 : SISUnsupportedField,
11 : SISLanguageField,
12 : SISContentsField,
13 : SISControllerField,
14 : SISInfoField,
15 : SISSupportedLanguagesField,
16 : SISSupportedOptionsField,
17 : SISPrerequisitiesField,
18 : SISDependencyField,
19 : SISPropertiesField,
20 : SISPropertyField,
21 : SISSignaturesField,
22 : SISCertificateChainField,
23 : SISLogoField,
24 : SISFileDescriptionField,
25 : SISHashField,
26 : SISIfField,
27 : SISElseIfField,
28 : SISInstallBlockField,
29 : SISExpressionField,
30 : SISDataField,
31 : SISDataUnitField,
32 : SISFileDataField,
33 : SISSupportedOptionField,
34 : SISControllerChecksumField,
35 : SISDataChecksumField,
36 : SISSignatureField,
37 : SISBlobField,
38 : SISSignatureAlgorithmField,
39 : SISSignatureCertificateChainField,
40 : SISDataIndexField,
41 : SISCapabilitiesField
}
[StringField,
ArrayField,
CompressedField,
VersionField,
VersionRangeField,
DateField,
TimeField,
DateTimeField,
UidField,
UnusedField,
LanguageField,
ContentsField,
ControllerField,
InfoField,
SupportedLanguagesField,
SupportedOptionsField,
PrerequisitiesField,
DependencyField,
PropertiesField,
PropertyField,
SignaturesField,
CertificateChainField,
LogoField,
FileDescriptionField,
HashField,
IfField,
ElseIfField,
InstallBlockField,
ExpressionField,
DataField,
DataUnitField,
FileDataField,
SupportedOptionField,
ControllerChecksumField,
DataChecksumField,
SignatureField,
BlobField,
SignatureAlgorithmField,
SignatureCertificateChainField,
DataIndexField,
CapabilitiesField] = range(1, 42)
FieldNames = {
0 : "ROOT",
StringField : "StringField",
ArrayField : "ArrayField",
CompressedField : "CompressedField",
VersionField : "VersionField",
VersionRangeField : "VersionRangeField",
DateField : "DateField",
TimeField : "TimeField",
DateTimeField : "DateTimeField",
UidField : "UidField",
UnusedField : "UnusedField",
LanguageField : "LanguageField",
ContentsField : "ContentsField",
ControllerField : "ControllerField",
InfoField : "InfoField",
SupportedLanguagesField : "SupportedLanguagesField",
SupportedOptionsField : "SupportedOptionsField",
PrerequisitiesField : "PrerequisitiesField",
DependencyField : "DependencyField",
PropertiesField : "PropertiesField",
PropertyField : "PropertyField",
SignaturesField : "SignaturesField",
CertificateChainField : "CertificateChainField",
LogoField : "LogoField",
FileDescriptionField : "FileDescriptionField",
HashField : "HashField",
IfField : "IfField",
ElseIfField : "ElseIfField",
InstallBlockField : "InstallBlockField",
ExpressionField : "ExpressionField",
DataField : "DataField",
DataUnitField : "DataUnitField",
FileDataField : "FileDataField",
SupportedOptionField : "SupportedOptionField",
ControllerChecksumField : "ControllerChecksumField",
DataChecksumField : "DataChecksumField",
SignatureField : "SignatureField",
BlobField : "BlobField",
SignatureAlgorithmField : "SignatureAlgorithmField",
SignatureCertificateChainField : "SignatureCertificateChainField",
DataIndexField : "DataIndexField",
CapabilitiesField : "CapabilitiesField"
}
CapabilityNames = {
0 : "TCB",
1 : "CommDD",
2 : "PowerMgmt",
3 : "MultimediaDD",
4 : "ReadDeviceData",
5 : "WriteDeviceData",
6 : "DRM",
7 : "TrustedUI",
8 : "ProtServ",
9 : "DiskAdmin",
10 : "NetworkControl",
11 : "AllFiles",
12 : "SwEvent",
13 : "NetworkServices",
14 : "LocalServices",
15 : "ReadUserData",
16 : "WriteUserData",
17 : "Location",
18 : "SurroundingsDD",
19 : "UserEnvironment"
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -