Jump to content
FuSer

Version String aus Binary extrahieren

Recommended Posts

Hallo,

ich hab folgendes Problem:

Ich habe eine Binary Datei. In dieser Datei steckt irgendwo die Version im Klartext zb: "V1.2.4.1".

Diese Version möchte ich finden. Da ich aber über mehre Dateien interreiren muss, kann sich die Version natürlich unterscheiden.

 

Daher suche ich über RegEx nach der Version:

findstr /R /C "V[0-9].[0-9].[0-9].[0-9]" "D:\binaryFooFile.xyz" > 'VERSION'

Das Ausgabefile enthält aber die Kommplette Zeile, die die Version enthält.

Super wäre es, wenn mir findStr NUR den gefunden String ausgibt, oder ich die Ausgabe Zeile soweit modifizieren kann, das nur die Version übrig bleibt.

 

Der Tricki Teil ist halt, dass der SuchString dynmich ist.

 

Hat da jemad eine Idee?

VersionHex.PNG

Share this post


Link to post
Share on other sites

Korrekt compilierte Binaries haben normalerweise eine entsprechende Eigenschaft, die man mit Powershell ganz einfach auslesen kann .... hier als Beispiel die Explorer.exe ....

Get-Item -Path C:\Windows\explorer.exe |
    Select-Object -ExpandProperty VersionInfo
        Format-Table -AutoSize

Das funktioniert normalerweise mindestens mit allen *.exe und *.dll Binaries.

 

Edited by BOfH_666
  • Like 1

Share this post


Link to post
Share on other sites

Hallo,

Prinzipiell ja egal da ich nach einer Lösung suche in einer Binary einen String zu suchen und zu extrahieren. 

Aber ok. Es ist eine vdk Datei. Dürfte nicht all zu bekannt sein. Da es eher ein Industriellens tool ist. 

Erzeugt wird die vdk mit dem Tool "VAC" welches die Dresdner Software Firma AIS Entwickelt hat.

 

Share this post


Link to post
Share on other sites
vor 4 Stunden schrieb FuSer:

Prinzipiell ja egal da ich nach einer Lösung suche in einer Binary einen String zu suchen und zu extrahieren.

OK ... ich bin weit davon entfernt, ein Experte zu sein, aber wenn ich mich nicht irre, ist Binary nicht gleich Binary. Es könnte sich also als schwierig herausstellen, eine generelle Lösung zu präsentieren, die mit einer beliebigen Binär-Datei funktioniert. ;-)

Wäre es Dir möglich, uns eine um sensible Daten bereinigte Beispiel-Datei zukommen zu lassen?

Share this post


Link to post
Share on other sites

Wenn es sich um ein proprietäres Format handelt, wäre evtl. ein Anchor hilfreich - also das, was vor und hinter dem Versionsstring steht. Ansonsten wird es echt düster...

Share this post


Link to post
Share on other sites

Wollte schon gestern was sagen, traute mich aber nicht...Bekommt man ggf. mit Linux Befehlen hin...

Share this post


Link to post
Share on other sites
vor 8 Minuten schrieb v-rtc:

Wollte schon gestern was sagen, traute mich aber nicht...Bekommt man ggf. mit Linux Befehlen hin...

Na jetzt bin ich aber gespannt .... her damit!  ;-)

Share this post


Link to post
Share on other sites
vor 1 Stunde schrieb BOfH_666:

Na jetzt bin ich aber gespannt .... her damit!  ;-)

Brüchte wie Du paar Beispiele :) und ein wenig Zeit. Skripte nicht mehr so viel mit Linux.

Share this post


Link to post
Share on other sites
vor 19 Stunden schrieb BOfH_666:

OK ... ich bin weit davon entfernt, ein Experte zu sein, aber wenn ich mich nicht irre, ist Binary nicht gleich Binary. Es könnte sich also als schwierig herausstellen, eine generelle Lösung zu präsentieren, die mit einer beliebigen Binär-Datei funktioniert. ;-)

Wäre es Dir möglich, uns eine um sensible Daten bereinigte Beispiel-Datei zukommen zu lassen?

Hallo, ich hab eine ensprechend bereinigte Datei mal angehangen. Musste sie aber als *txt kennzeichnen.

Diese öffnen und nach "V1.3.4.2" suchen.

 

Also wenn es dafür eine shell script gibt, um die Versionsnummer zu finden, wäre klasse.

 

Aktuell habe ich mir damit beholfen, dass ich ein kleines C# Konsolen Programm geschrieben habe welches mir die Version ausließt.

Ist vermutlich die einfachere Methode als mit Werkzeugen zu arbeiten, die dafür nicht ausgelegt sind.

 

Grüße

hap_mobil.txt

vor 7 Stunden schrieb v-rtc:

Wollte schon gestern was sagen, traute mich aber nicht...Bekommt man ggf. mit Linux Befehlen hin...

Linux ist leider keine Option, aber deine Lösung würde ich auch gern sehen.

Grüße

Share this post


Link to post
Share on other sites

Wenn ich das richtig sehe, sind davor und danach Leerzeichen? Dann wäre das doch per regex einfach zu lösen...

Edit: Nachdem Du den regex schon zusammegebaut hast, vergiß einfach findstr und mach das in Powershell...

 

$bytes = [System.IO.File]::ReadAllBytes("C:\Users\martin\Downloads\hap_mobil.txt")
$text = [System.Text.Encoding]::ASCII.GetString($bytes, 0, $bytes.Count)
$text -match ".*(V[0-9]\.[0-9]\.[0-9]\.[0-9]).*"
$matches.Count
$matches[1]

Credits: https://stackoverflow.com/questions/10672092/read-parse-binary-files-with-powershell

Edited by daabm

Share this post


Link to post
Share on other sites

Hallo, wie in meinem Start Post geziegt, nutze ich bereits regEx. Aber es wird mir nur die Komplette Zeile ausgegeben in der sich die Version befindet.

Wenn du weisst wie ich nur die Version ermittle, dann los.

Share this post


Link to post
Share on other sites

Bin auch erst reingefallen - Get-Content macht ASCII und wirft Zeilenumbrüche rein. Der Trick ist, das File tatsächlich als Bytestream zu lesen...

Noch ein Edit: Bei get-content müßte man dann halt mit foreach durch alle "Zeilen" durchrennen.

Edited by daabm

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...