Hexstring aus mehreren Dateien auslesen.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
michaelc
User
Beiträge: 7
Registriert: Sonntag 22. Mai 2016, 09:42

Moin leute, bin neu hier und hätte ne Frage zum auslesen von Hexstrings aus Binären Dateien in meinem Beispiel nehme ich .exe Dateien.
hier mal der Code der mit einzelnen Dateien wunderbar funktioniert:

Code: Alles auswählen

import glob, os
path = "/root"
for bla in glob.glob("*.exe"):
    file = os.path.join(path, bla)
    print(file)
with open("d.exe", 'rb') as f: 
#with open(bla, 'rb') as f:       <---ist das die Lösung?
   if b'\x74\x75\x61\x6C\x44\x75\x62\x20\x62\x75\x69\x6C\x64\x20\x25\x64\x2F' in f.read():
        print('String find in: ',file)
   else:
        print('String not found!')
Das Ergebnis:

Code: Alles auswählen

#python 4.py
/root/d.exe
/root/DivXRepair.exe
('String find in: ', '/root/DivXRepair.exe')
Dachte das ich mit
with open(bla, 'rb') as f:
mein Problem lösen könnte, leider erhalte ich zwar kein Fehlermeldung, aber nur eine von 2 Dateien.
Danke im vorraus.

Gruß Michael
Zuletzt geändert von Anonymous am Sonntag 22. Mai 2016, 11:31, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@michaelc: zum Ersten durchsuchst Du das falsche Verzeichnis, falls «/root» nicht sowieso schon Dein aktuelles ist. Zum Zweiten steht Dein with-open-Block nach der for-Schleife und nicht in ihr. Zum Dritten verwendest Du Python 2 schreibst aber print-Statements wie eine Funktion.

Code: Alles auswählen

from __future__ import print_function
import os
import glob

PATH = "/root"
PATTERN = b"\x74\x75\x61\x6C\x44\x75\x62\x20\x62\x75\x69\x6C\x64\x20\x25\x64\x2F"

def main():
    for filename in glob.iglob(os.path.join(PATH, '*.exe')):
        print(filename)
        with open(filename, "rb") as binary:
            data = binary.read()
        if PATTERN in data:
            print('String find in:', filename)
        else:
            print('String not found!')

if __name__ == '__main__':
    main()
BlackJack

@michaelc: `PATTERN` könnte man auch etwas kürzer schreiben: b'tualDub build %d/'. Es macht nicht so wirklich viel Sinn ASCII-Zeichen als Hex-Escape-Codes zu schreiben. ;-)
michaelc
User
Beiträge: 7
Registriert: Sonntag 22. Mai 2016, 09:42

Supi DANKE genau das was ich gesucht hab :D
Antworten