shadowbrokers-exploits/windows/Resources/GaTh/Commands/Storage/gangsterthief_storage.xsl
2017-04-14 11:45:07 +02:00

407 lines
No EOL
15 KiB
XML

<?xml version='1.1' ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="include/StorageFunctions.xsl"/>
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:element name = "StorageObjects">
<xsl:apply-templates select = "GangsterThiefFileListEntries"/>
<xsl:apply-templates select = "GangsterThiefFileInformation"/>
<xsl:apply-templates select = "FileStart"/>
<xsl:apply-templates select="FileLocalName"/>
<xsl:apply-templates select="FileWrite"/>
<xsl:apply-templates select="FileStop"/>
</xsl:element>
</xsl:template>
<xsl:template match="GangsterThiefFileListEntries">
<xsl:apply-templates select="GangsterThiefFileListEntry" />
<xsl:element name="IntValue">
<xsl:attribute name="name">EntryCount</xsl:attribute>
<xsl:value-of select="@EntryCount" />
</xsl:element>
</xsl:template>
<xsl:template match="GangsterThiefFileListEntry">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileListEntry</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">filename</xsl:attribute>
<xsl:value-of select="@filename" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">recordindex</xsl:attribute>
<xsl:value-of select="@recordindex" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">parentrecordindex</xsl:attribute>
<xsl:value-of select="@parentrecordindex" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">filesize</xsl:attribute>
<xsl:value-of select="@filesize" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">filesizeondisk</xsl:attribute>
<xsl:value-of select="@filesizeondisk" />
</xsl:element>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="StdCreated"/>
<xsl:with-param name="var" select="'StdCreated'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="FileNameCreated"/>
<xsl:with-param name="var" select="'FileNameCreated'"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template match="GangsterThiefFileInformation">
<xsl:apply-templates select="GangsterThiefFileInformationEntry" />
</xsl:template>
<xsl:template match="GangsterThiefFileInformationEntry">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileInfoEntry</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">filename</xsl:attribute>
<xsl:value-of select="@filename" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">recordindex</xsl:attribute>
<xsl:value-of select="@recordindex" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">filesize</xsl:attribute>
<xsl:value-of select="@filesize" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">filesizeondisk</xsl:attribute>
<xsl:value-of select="@filesizeondisk" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">dosflags</xsl:attribute>
<xsl:value-of select="@dosflags" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">filenameflags</xsl:attribute>
<xsl:value-of select="@filenameflags" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">overwrittenpercentage</xsl:attribute>
<xsl:value-of select="@overwrittenpercentage" />
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">parentrecordindex</xsl:attribute>
<xsl:value-of select="@parentrecordindex" />
</xsl:element>
<xsl:apply-templates select="MACEFileTimes" />
<xsl:element name="ObjectValue">
<xsl:attribute name="name">Attributes</xsl:attribute>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeDeleted"/>
<xsl:with-param name="var" select="'deleted'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeDir"/>
<xsl:with-param name="var" select="'directory'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeSystem"/>
<xsl:with-param name="var" select="'system'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeArchive"/>
<xsl:with-param name="var" select="'archive'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeDevice"/>
<xsl:with-param name="var" select="'device'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeNormal"/>
<xsl:with-param name="var" select="'normal'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeTemporary"/>
<xsl:with-param name="var" select="'temporary'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeSparseFile"/>
<xsl:with-param name="var" select="'sparse'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeReparsePoint"/>
<xsl:with-param name="var" select="'reparsepoint'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeCompressed"/>
<xsl:with-param name="var" select="'compressed'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeOffline"/>
<xsl:with-param name="var" select="'offline'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeNotIndexed"/>
<xsl:with-param name="var" select="'notindexed'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeEncrypted"/>
<xsl:with-param name="var" select="'encrypted'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeHidden"/>
<xsl:with-param name="var" select="'hidden'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeReadonly"/>
<xsl:with-param name="var" select="'read-only'"/>
</xsl:call-template>
<xsl:call-template name="FileAttribute">
<xsl:with-param name="flag" select="FileAttributeInUse"/>
<xsl:with-param name="var" select="'inuse'"/>
</xsl:call-template>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="MACEFileTimes">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">MACEFileTimes</xsl:attribute>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="StdModified"/>
<xsl:with-param name="var" select="'StdModified'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="StdAccessed"/>
<xsl:with-param name="var" select="'StdAccessed'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="StdCreated"/>
<xsl:with-param name="var" select="'StdCreated'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="StdEntry"/>
<xsl:with-param name="var" select="'StdEntry'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="FilenameModified"/>
<xsl:with-param name="var" select="'FilenameModified'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="FilenameAccessed"/>
<xsl:with-param name="var" select="'FilenameAccessed'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="FilenameCreated"/>
<xsl:with-param name="var" select="'FilenameCreated'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="FilenameEntry"/>
<xsl:with-param name="var" select="'FilenameEntry'"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template name="FileTimeFunction">
<xsl:param name="time"/>
<xsl:param name="var" />
<xsl:element name="ObjectValue">
<xsl:attribute name="name">
<xsl:value-of select="$var"/>
</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">time</xsl:attribute>
<xsl:value-of select="$time"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">type</xsl:attribute>
<xsl:value-of select="$time/@type"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template name="FileAttribute">
<xsl:param name="flag"/>
<xsl:param name="var" />
<xsl:element name="BoolValue">
<xsl:attribute name="name">
<xsl:value-of select="$var"/>
</xsl:attribute>
<xsl:choose>
<xsl:when test="$flag">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
<xsl:template match="LocalGetDirectory">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">LocalGetDirectory</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">path</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="FileStart">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileStart</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">FileName</xsl:attribute>
<xsl:variable name="realpath" select="@realPath"/>
<xsl:choose>
<xsl:when test="string($realpath)">
<xsl:value-of select="$realpath"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@remoteName"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">OriginalName</xsl:attribute>
<xsl:value-of select="@remoteName"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">Size</xsl:attribute>
<xsl:value-of select="@size"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">id</xsl:attribute>
<xsl:value-of select="@fileId"/>
</xsl:element>
<xsl:apply-templates select="FileTimes"/>
<xsl:apply-templates select="GangsterThiefFileInformationEntry" />
</xsl:element>
</xsl:template>
<xsl:template match="FileLocalName">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileLocalName</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">LocalName</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">Subdir</xsl:attribute>
<xsl:value-of select="@subdir"/>
</xsl:element>
<xsl:element name="StringValue">
<xsl:attribute name="name">id</xsl:attribute>
<xsl:value-of select="@fileId"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="FileWrite">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileWrite</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">id</xsl:attribute>
<xsl:value-of select="@fileId"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">bytes</xsl:attribute>
<xsl:value-of select="@bytes"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">totalBytes</xsl:attribute>
<xsl:value-of select="@totalBytes"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="FileStop">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileStop</xsl:attribute>
<xsl:element name="StringValue">
<xsl:attribute name="name">id</xsl:attribute>
<xsl:value-of select="@fileId"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">written</xsl:attribute>
<xsl:value-of select="@bytesWritten"/>
</xsl:element>
<xsl:element name="BoolValue">
<xsl:attribute name="name">Successful</xsl:attribute>
<xsl:choose>
<xsl:when test="starts-with(@status, 'SUCCESS')">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="Conclusion">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">Conclusion</xsl:attribute>
<xsl:element name="IntValue">
<xsl:attribute name="name">NumSuccess</xsl:attribute>
<xsl:value-of select="@successFiles"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">NumPartial</xsl:attribute>
<xsl:value-of select="@partialFiles"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">NumFailed</xsl:attribute>
<xsl:value-of select="@failedFiles"/>
</xsl:element>
<xsl:element name="IntValue">
<xsl:attribute name="name">NumSkipped</xsl:attribute>
<xsl:value-of select="@skippedFiles"/>
</xsl:element>
</xsl:element>
</xsl:template>
<!-- This template takes advantage of the below functionality -->
<xsl:template match="FileTimes">
<xsl:element name="ObjectValue">
<xsl:attribute name="name">FileTimes</xsl:attribute>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="Modified"/>
<xsl:with-param name="var" select="'Modified'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="Accessed"/>
<xsl:with-param name="var" select="'Accessed'"/>
</xsl:call-template>
<xsl:call-template name="FileTimeFunction">
<xsl:with-param name="time" select="Created"/>
<xsl:with-param name="var" select="'Created'"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
</xsl:transform>