Excel-Version erkennen
#1
Hallo,

in xl\workbook.xml wird die verwendete XL-Version angegeben:

Code:
<fileVersion appName="xl" lastEdited="7" lowestEdited="7" rupBuild="11012" codeName="{51196F13-6AD0-C1B8-E2B4-A1F9AE17003E}"/><workbookPr codeName="DieseArbeitsmappe" defaultThemeVersion="166925"/>

<fileVersion appName="xl" lastEdited="7" lowestEdited="7" rupBuild="24527"/><workbookPr defaultThemeVersion="166925"/>

<fileVersion appName="xl" lastEdited="7" lowestEdited="7" rupBuild="23801" codeName="{4D1C537B-E38A-612A-F078-A93A15B4B7F4}"/><workbookPr codeName="DieseArbeitsmappe" defaultThemeVersion="166925"/>

<fileVersion appName="xl" lastEdited="7" lowestEdited="7" rupBuild="24701"/><workbookPr defaultThemeVersion="166925"/>

<fileVersion appName="xl" lastEdited="7" lowestEdited="7" rupBuild="24430"/><workbookPr defaultThemeVersion="166925"/>

"LasteEdited"und "lowestEdited" kann ich noch interpretieren, aber wie ist "rupBuild" zu verstehen?

Gibt es eine Liste, die mehr als Excel 2016/2019 etc erkennen läßt?

Die Daten stammen aus Dateien, die gestern oder heute in den Nachbarforen hochgeladen wurde.

Hintergrund: Falls auch Sprachversion uä kodiert wäre könnte das bei der Attribution von Malware helfen.

mfg
Antworten Top
#2
Hi,

vielleicht hilft das:

https://docs.microsoft.com/de-de/dotnet/...nxml-2.8.1
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Hallo,

das dürfte die Build-Nummer sein. Diese dürfte aber m.W. nicht weiterhelfen zwischen 2016, 2019, 365 zu unterscheiden.
Ein paar Links:

https://docs.microsoft.com/en-us/dotnet/...nxml-2.8.1
http://www.datypic.com/sc/ooxml/e-ssml_f...ion-1.html

Die MS Open XML Dokumentation gibt's auch als Spezifikation hier  - viel zum Durcharbeiten ;-)

https://docs.microsoft.com/en-us/openspe...bf3724c6f0

Dass eine Sprachversion kodiert würde, ist mir nicht bekannt.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#4
Danke

Mein Versuch

Code:
www.datypic.com/sc/ooxml/a-rupBuild-1.html

http://www.datypic.com/sc/ooxml/e-ssml_fileVersion-1.html

endete mit einem timeout, auch bei Versuche mit curl und nslookup, d.h. es kann nicht an meinen Browser-Einstellungen liegen. Ich versuche es später noch einmal.
Antworten Top
#5
Hallo,

eine Analyse von ca 120 Dateien (nur sehr wenige von mir) ergab folgende Verteilung:

[
Bild bitte so als Datei hochladen: Klick mich!
]

Ich konnte keine Erklärung für die Bedeutung der Ausprägungen finden. Alle Dateien stammen aus den Foren und wurden in der letzten Zeit heruntergeladen.

mfg

---------------------
Der Code zum extrahieren (Powershell):

Code:
function Get-ZippedLog {
    param (
        [Parameter(Mandatory=$true)]$ZipPath
    )
    Add-Type -assembly "system.io.compression.filesystem"
    $zip = [io.compression.zipfile]::OpenRead($ZipPath)
    if ($zip.Entries[2].name -eq 'workbook.xml') {$i = 2} else {$i=3}
    #write-host ($zip.Entries[$i].name)
    $file = $zip.Entries[$i]
    $stream = $file.Open()

    $reader = New-Object IO.StreamReader($stream)
    $text = $reader.ReadToEnd()

    $reader.Close()
    $stream.Close()
    $zip.Dispose()

    return $text
}

$Pfad = 'C:\Temp\'
$files = Get-childItem $Pfad -Filter *.xls?

foreach ($f in $files) {
    try {
    $Tx = Get-ZippedLog ($Pfad + $f)
    #$Tx

    $regex = $Tx | Select-String -Pattern '(<fileVersion.+?/>)'
    write-host ($f, $regex.matches.value)
    } catch {'Fehler: ' + $f}
}


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#6
Zumindest zwei der UUID hat Google gefunden:

Code:
https://github.com/jmcnamara/libxlsxwriter/blob/main/src/workbook.c

STATIC void
_write_file_version(lxw_workbook *self)
{
    struct xml_attribute_list attributes;
    struct xml_attribute *attribute;

    LXW_INIT_ATTRIBUTES();
    LXW_PUSH_ATTRIBUTES_STR("appName", "xl");
    LXW_PUSH_ATTRIBUTES_STR("lastEdited", "4");
    LXW_PUSH_ATTRIBUTES_STR("lowestEdited", "4");
    LXW_PUSH_ATTRIBUTES_STR("rupBuild", "4505");

    if (self->vba_project)
        LXW_PUSH_ATTRIBUTES_STR("codeName",
                                "{37E998C4-C9E5-D4B9-71C8-EB1FF731991C}");

    lxw_xml_empty_tag(self->file, "fileVersion", &attributes);

-------------------------------------------------------------------------------

https://github.com/jmcnamara/XlsxWriter/blob/main/xlsxwriter/metadata.py

def _write_ext(self):
        # Write the <ext> element.
        attributes = [('uri', '{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}')]

Es bleibt die Frage, wie der Github-Code zu normalen Usern kommt.
Antworten Top
#7
Hallo,

habe mich auch mal ein bißchen damit beschäftigt: lastEdited und lowestEdited spiegeln die Excel-Version wieder. Das heißt, editierst Du die Datei
mit Excel 2010 stehen beide auf 5. In Excel 365 stehen beide auf 7. Editierst Du eine Datei aus Excel 365 in Excel 2010, steht dann bspw. lastEdited
auf 5 und lowestEdited auf 7.

Ähnlich verhält es sich mit rupBuild. Eine mit Excel 2010 generierte Datei erhält rupBuild="9303" und eine mit meiner letzten Version von Excel 365
(Insider Build) dann rupBuild="24729". Somit spiegelt rupBuild den Build der verwendeten Excel-Version wieder. Und entspricht aber nicht dem Build,
den Du z.B. bei Konto siehst. Der Wert zu rupBuild ist übrigens auch in XLS-Dateien vorhanden, also in Binärform, siehe Link hier.

Du kannst Dir die komplette Spezifikation moderner Office-Dateien hier herunterladen (zip). Dort findest Du dann in den Dateien [MS-OI29500].pdf
und [MS-OE376].pdf folgende Informationen:

Code:
2.1.573 Part 1 Section 18.2.13, fileVersion (File Version)

a. The standard states that the appName attribute is restricted to be an XML Schema string datatype.
   Office requires that the appName attribute have a maximum length of 65535 characters.
b. The standard states that the lastEdited attribute is restricted to be an XML Schema string datatype.
   Office requires that the lastEdited attribute have a maximum length of 65535 characters.
c. The standard states that te lowestEdited attribute is restricted to be an XML Schema string datatype.
   Office requires that the lowestEdited attribute have a maximum length of 65535 characters.
d. The standard states that the rupBuild attribute is restricted to an XML Schema string datatype.
   Office requires that the rupBuild attribute have a maximum length of 65535 characters.
e. The standard does not define any value restrictions on the lastEdited attribute.
   In Office, if the appName attribute equals xl in the en-US locale, then the lastEdited attribute is
   the text representation of an unsigned integer in the en-US locale.
f. The standard does not define any value restrictions on the lowestEdited attribute.
   In Office, if the appName attribute equals xl in the en-US locale, then the lowestEdited attribute is
   the text representation of an unsigned integer in the en-US locale.
g. The standard does not define any value restrictions on the rupBuild attribute.
   In Office, if the appName attribute equals xl in the en-US locale, then the rupBuild attribute is
   the text representation of an unsigned integer in the en-US locale.
h. The standard does not place any restrictions on the value for the lastEdited attribute.
   In Office, when the appName attribute equals xl, the lastEdited attribute should be less than or equal to 32767.
i. The standard does not place any restrictions on the value for the lowestEdited attribute.
   In Office, when the appName attribute equals xl, the lowestEdited attribute should be less than or equal to 32767.
j. The standard does not place any restrictions on the value for the rupBuild attribute.
   In Office, when the appName attribute equals xl, the rupBuild attribute should be less than or equal to 32767.

Was das Attribut codeName betrifft, so wird dieses wohl nur gesetzt, wenn auch tatsächlich Code in der Mappe drin ist, also z.B. bei DieseArbeitsmappe.
Ich würde sagen, die GUID wird dann von Excel dynamisch generiert. Diese bleibt gleich, wenn ich mit meinem Excel dann mehrere Dateien generiere,
was man ja vielleicht unter dem Vorbehalt der Prüfung durchaus als Erkennungsmerkmal sehen könnte. Man könnte ja noch in der Doku zu OO-XML
suchen.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#8
Danke

Nachdem ich gelernt habe, die Datei nach "rupBuild" zu durchsuchen, gab es einige Treffer, die aber nur den Bereich "0-32.000" erklärten.

Es gibt wohl keine Liste, die erklärt "rupBuilt=4502" bedeutet ...

Da Malware i.d.R. nicht mit Excel erstellt wird und ich die passwordgeschützten Zip's nicht mit Python durchsuchen kann, bleibt die Hoffnung, dass die IT-Security-Spezialisten das bereits geprüft haben.

Für Dateien hier aus den Foren fehlt mir die Idee, nach welchen Konstellationen ich suchen sollte.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste