<?xml version="1.0" encoding="utf-8"?>
<Peach version="1.0" author="Jason Kratzer">
<Include ns="default" src="file:defaults.xml"/>
<DataModel name="ZipFileFormat">
<!-- A. Local file header -->
<Block name="LocalFileHeader" maxOccurs="1024">
<String name="lfh_Signature" valueType="hex" value="504b0304" token="true" mutable="false"/>
<Number name="lfh_Ver" size="16" endian="little" signed="false"/>
<Flags name="lfh_BitFlag" size="16" endian="little" signed="false">
<Flag name="lfh_bf_Encrypted" size="1" position="0"/>
<Flag name="lfh_bf_CompMethod1" size="1" position="1"/>
<Flag name="lfh_bf_CompMethod2" size="1" position="2"/>
<Flag name="lfh_bf_Zeroed" size="1" position="3"/>
<Flag name="lfh_bf_Deflate" size="1" position="4"/>
<Flag name="lfh_bf_Patched" size="1" position="5"/>
<Flag name="lfh_bf_Strong" size="1" position="6"/>
<Flag name="lfh_bf_Unused1" size="1" position="7"/>
<Flag name="lfh_bf_Unused2" size="1" position="8"/>
<Flag name="lfh_bf_Unused3" size="1" position="9"/>
<Flag name="lfh_bf_Unused4" size="1" position="10"/>
<Flag name="lfh_bf_Efs" size="1" position="11"/>
<Flag name="lfh_bf_Reserved1" size="1" position="12"/>
<Flag name="lfh_bf_Enc_CD" size="1" position="13"/>
<Flag name="lfh_bf_Reserved2" size="1" position="14"/>
<Flag name="lfh_bf_Reserved3" size="1" position="15"/>
</Flags>
<Number name="lfh_CompMethod" size="16" endian="little" signed="false"/>
<Number name="lfh_LastModTime" size="16" endian="little" signed="false"/>
<Number name="lfh_LastModDate" size="16" endian="little" signed="false"/>
<Number name="lfh_CRC32" size="32" endian="little" signed="false"/>
<Number name="lfh_CompSize" size="32" endian="little" signed="false">
<Relation type="size" of="lfh_CompSizeData"/>
</Number>
<Number name="lfh_DecompSize" size="32" endian="little" signed="false"/>
<Number name="lfh_FileNameLen" size="16" endian="little" signed="false">
<Relation type="size" of="lfh_FileName"/>
</Number>
<Number name="lfh_ExtraFldLen" size="16" endian="little" signed="false">
<Relation type="size" of="lfh_FldName"/>
</Number>
<String name="lfh_FileName"/>
<String name="lfh_FldName"/>
<!-- B. File data -->
<Block name="lfh_Data">
<Block name="lfh_DataHasSize">
<Relation type="when" when="int(self.find('lfh_CompSize').defaultValue) != 0"/>
<Blob name="lfh_CompSizeData" mutable="false"/>
</Block>
<Block name="lfh_DataNoSize">
<Relation type="when" when="int(self.find('lfh_CompSize').defaultValue) == 0"/>
<Blob name="lfh_CompNoSizeData" mutable="false"/>
</Block>
</Block>
<!-- C. Data descriptor -->
<Block name="DataDescriptor">
<Relation type="when" when="int(self.find('lfh_BitFlag.lfh_bf_Zeroed').defaultValue) == 1"/>
<String name="dd_Sig" valueType="hex" value="504b0708" token="true" mutable="false"/>
<Number name="dd_CRC32" size="32" endian="little" signed="false"/>
<Choice name="dd_chooser">
<Block name="dd_64">
<Number name="dd_CompSize64" size="64" endian="little" signed="false"/>
<Number name="dd_DecompSize64" size="64" endian="little" signed="false" constraint="'4b50' not in hex(value)"/>
</Block>
<Block name="dd_32">
<Number name="dd_CompSize32" size="32" endian="little" signed="false"/>
<Number name="dd_DecompSize32" size="32" endian="little" signed="false"/>
</Block>
</Choice>
</Block>
</Block>
<!-- E. Archive Extra Data Record: -->
<Block name="ArchiveExtraDataRecord" minOccurs="0" maxOccurs="1">
<String name="aedr_Sig" valueType="hex" value="504b0608" token="true" mutable="false"/>
<Number name="aedr_ExtFldLen" size="32" endian="little" signed="false"/>
<Blob name="aedr_ExtFld"/> <!-- Look into adding more definition -->
</Block>
<!-- F. Central directory structure: -->
<Block name="CentralDirectoryStructure" minOccurs="0" maxOccurs="1">
<Block name="FileHeader" maxOccurs="1024">
<String name="cfh_Signature" valueType="hex" value="504b0102" token="true" mutable="false"/>
<Number name="cfh_Ver" size="16" endian="little" signed="false"/>
<Number name="cfh_VerReq" size="16" endian="little" signed="false"/>
<Flags name="cfh_BitFlag" size="16" endian="little" signed="false">
<Flag name="cfh_bf_Encrypted" size="1" position="0"/>
<Flag name="cfh_bf_CompMethod1" size="1" position="1"/>
<Flag name="cfh_bf_CompMethod2" size="1" position="2"/>
<Flag name="cfh_bf_Zeroed" size="1" position="3"/>
<Flag name="cfh_bf_Deflate" size="1" position="4"/>
<Flag name="cfh_bf_Patched" size="1" position="5"/>
<Flag name="cfh_bf_Strong" size="1" position="6"/>
<Flag name="cfh_bf_Unused1" size="1" position="7"/>
<Flag name="cfh_bf_Unused2" size="1" position="8"/>
<Flag name="cfh_bf_Unused3" size="1" position="9"/>
<Flag name="cfh_bf_Unused4" size="1" position="10"/>
<Flag name="cfh_bf_EFS" size="1" position="11"/>
<Flag name="cfh_bf_Reserved1" size="1" position="12"/>
<Flag name="cfh_bf_Enc_Cd" size="1" position="13"/>
<Flag name="cfh_bf_Reserved2" size="1" position="14"/>
<Flag name="cfh_bf_Reserved3" size="1" position="15"/>
</Flags>
<Number name="cfh_CompMethod" size="16" endian="little" signed="false"/>
<Number name="cfh_LastModTime" size="16" endian="little" signed="false"/>
<Number name="cfh_LastModDate" size="16" endian="little" signed="false"/>
<Number name="cfh_CRC32" size="32" endian="little" signed="false" mutable="false"/>
<Number name="cfh_CompSize" size="32" endian="little" signed="false"/>
<Number name="cfh_CompSize" size="32" endian="little" signed="false"/>
<Number name="cfh_DecompSize" size="32" endian="little" signed="false"/>
<Number name="cfh_FileNameLen" size="16" endian="little" signed="false">
<Relation type="size" of="cfh_FileName"/>
</Number>
<Number name="cfh_ExtraFldLen" size="16" endian="little" signed="false">
<Relation type="size" of="cfh_FldName"/>
</Number>
<Number name="cfh_FileCommLen" size="16" endian="little" signed="false">
<Relation type="size" of="cfh_FileComment"/>
</Number>
<Number name="cfh_DiskNumStart" size="16" endian="little" signed="false"/>
<Number name="cfh_IntFileAttrib" size="16" endian="little" signed="false"/>
<Number name="cfh_ExtFileAttrib" size="32" endian="little" signed="false"/>
<Number name="cfh_RelOffsetLFH" size="32" endian="little" signed="false"/>
<String name="cfh_FileName">
<Fixup class="checksums.ExpressionFixup">
<Param name="ref" value="lfh_FileName" />
<Param name="expression" value="data" />
</Fixup>
</String>
<String name="cfh_FldName"/>
<String name="cfh_FileComment"/>
</Block>
<Block name="CDSDigitalSignature" minOccurs="0" maxOccurs="1">
<String name="cdsds_Signature" valueType="hex" value="504b0505" token="true" mutable="false"/>
<Number name="cdsds_DataSize" size="16" endian="little" signed="false">
<Relation type="size" of="cdsds_Data"/>
</Number>
<Blob name="cdsds_Data" mutable="false"/>
</Block>
</Block>
<!-- G. Zip64 end of central directory record -->
<Block name="Zip64EndOfCentralDirectoryRecord" minOccurs="0" maxOccurs="1">
<String name="z64eocd_Signature" valueType="hex" value="504b0606" token="true" mutable="false"/>
<Number name="z64eocd_SizeOfRecord" size="64" endian="little" signed="false">
<Relation type="size" of="CentralDirectoryRecord"/>
</Number>
<Block name="CentralDirectoryRecord">
<Number name="z64eocd_VerMadeBy" size="16" endian="little" signed="false"/>
<Number name="z64eocd_VerNeeded" size="16" endian="little" signed="false"/>
<Number name="z64eocd_ThisDiskNum" size="32" endian="little" signed="false"/>
<Number name="z64eocd_SofCDDiskNum" size="32" endian="little" signed="false"/>
<Number name="z64eocd_CDOnDisk" size="64" endian="little" signed="false"/>
<Number name="z64eocd_TotNumEntries" size="64" endian="little" signed="false"/>
<Number name="z64eocd_SizeOfCenDir" size="64" endian="little" signed="false"/>
<Number name="z64eocd_OffsetToCenDir" size="64" endian="little" signed="false"/>
<Block name="z64eocd_Z64ExtensDS" minOccurs="0" maxOccurs="1">
<Number name="z64eocd_ExtensDs_Header" size="16" endian="little" signed="false"/>
<Number name="z64eocd_ExtensDs_Size" size="32" endian="little" signed="false">
<Relation type="size" of="z64eocd_ExtensDs_Data"/>
</Number>
<Blob name="z64eocd_ExtensDs_Data"/>
</Block>
</Block>
</Block>
<!-- H. Zip64 end of central directory locator -->
<Block name="Zip64EndOfCentralDirectoryLocator" minOccurs="0" maxOccurs="1">
<String name="eocdl_Signature" valueType="hex" value="504b0607" token="true" mutable="false"/>
<Number name="eocdl_NumOfDisk" size="32" endian="little" signed="false"/>
<Number name="eocdl_RelOffsetofZ64" size="64" endian="little" signed="false"/>
<Number name="eocdl_TotNumDisk" size="32" endian="little" signed="false"/>
</Block>
<!-- I. End of central directory record: -->
<Block name="EndOfCentralDirectoryRecord">
<String name="eocd_Signature" valueType="hex" value="504b0506" token="true" mutable="false"/>
<Number name="eocd_NumOfDisk" size="16" endian="little" signed="false"/>
<Number name="eocd_NumOfDiskWCD" size="16" endian="little" signed="false"/>
<Number name="eocd_TotNumEntriesOD" size="16" endian="little" signed="false"/>
<Number name="eocd_TotNumEntriesICD" size="16" endian="little" signed="false"/>
<Number name="eocd_SizeOfCenDir" size="32" endian="little" signed="false">
<Relation type="size" of="CentralDirectoryStructure" isOutputOnly="true"/>
</Number>
<Number name="eocd_OffsetToCenDir" size="32" endian="little" signed="false">
<Relation type="size" of="LocalFileHeader" isOutputOnly="true"/>
</Number>
<Block name="ZipFileCommentBlock" minOccur="0" maxOccur="1">
<Number name="eocd_CommLen" size="16" endian="little" signed="false">
<Relation type="size" of="eocd_Comment"/>
</Number>
<Blob name="eocd_Comment"/>
</Block>
</Block>
</DataModel>
<DataModel name="Param">
<String name="Value" isStatic="true"/>
</DataModel>
<StateModel name="TheState" initialState="Initial">
<State name="Initial">
<Action type="output">
<DataModel ref="ZipFileFormat"/>
<Data name="data" fileName="C:\peachfuzz\minset\test.zip"/>
</Action>
<Action type="close"/>
<Action type="call" method="ScoobySnacks"/>
</State>
</StateModel>
<Agent name="LocalAgent">
<Monitor class="debugger.WindowsDebugEngine">
<Param name="CommandLine" value="C:\Program Files\GlobalSCAPE\CuteZIP\CuteZip.exe -x fuzzed.zip C:\temp"/>
<Param name="StartOnCall" value="ScoobySnacks"/>
</Monitor>
<Monitor class="process.PageHeap">
<Param name="Executable" value="CuteZip.exe"/>
</Monitor>
</Agent>
<Test name="TheTest">
<Strategy class="rand.RandomMutationStrategy" switchCount="1500" maxFieldsToMutate="7"/>
<Agent ref="LocalAgent"/>
<StateModel ref="TheState"/>
<!--<Publisher class="file.FileWriterLauncherGui">
<Param name="fileName" value="fuzzed.zip"/>
<Param name="windowName" value="jZip"/>
<Param name="debugger" value="true"/>
</Publisher>-->
<Publisher class="file.FileWriterLauncher">
<Param name="fileName" value="fuzzed.zip" />
<Param name="debugger" value="true"/>
</Publisher>
</Test>
<Run name="DefaultRun">
<Test ref="TheTest"/>
<Logger class="logger.Filesystem">
<Param name="path" value="Z:\logs.zip.cutezip"/>
</Logger>
</Run>
</Peach>