Seite 1 von 1
.dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 13:38
von Baconman
Aloha!
Ich habe folgendes Problem und zwar möchte ich mir den Inhalt einer DLL im Hexa-decimal Format ansehen.
Was ich bis jetzt habe:
Code: Alles auswählen
datei = open('Eine.dll', 'rb')
try:
byte = datei.read(1)
i = 0 ## Damit zum Testen nicht die ganze Datei gelesen wird.
while byte != '' and i <= 10:
byte = datei.read(1)
i = i + 1
finally:
datei.close()
Soweit so gut. Ich kriege es nur nicht hin die gelesenen Daten als Hex-Code anzuzeigen. Habe schon mit struct etwas rum gespielt, bin aber zu keinem Ergebnis gekommen.
Weis einer von euch Rat?
Grüße, Baconman
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 13:46
von webspider
Wie wäre es per ord(s) den numerischen Wert jedes Bytes herauszufinden und mit hex(n) (bzw. schöner String-Formatierung) diesen hexadezimal darzustellen?
Bzw. ein Modul wie binascii zu nutzen.
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 13:51
von Hyperion
Dateien solltest Du mit dem ``with open(...) as handler``-Idiom öffnen. Zudem sehe ich hier nicht den Vorteil einer ``while``-Schleife. Wieso iterierst Du nicht einfach über die Bytes?
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 18:28
von Baconman
Okay, danke für die Tipps, das klappt jetzt soweit.
Mein nächstes Problem ist, das ich gerne die Adresse der jeweiligen Bytes hätte. Also die wirkliche Adresse im Speicher.
Mir stellen sich dabei 2 Fragen:
Muss die DLL dafür von einem Programm "geladen" werden?
Wie komme ich an die Adresse? In Python scheint es ja keine Zeiger zu geben und id() gibt wohl irgendeine andere Adresse als die aus dem Speicher aus.
Danke für eure Hilfe schon mal.
Baconman
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 18:37
von EyDu
Hallo.
Vielleicht solltest du erstmal erklären, was du eigentlich genau vor hast. Willst du nur an den Dateiinhalt der DLL, möchtest du die DLL laden und darin verwendete Funktionen verwenden oder möchtest du auf den Speicherbereich einer geladenen DLL zugreifen? Wenn das klar ist, dann kann man dir etwas gezielter helfen.
Sebastian
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 19:04
von BlackJack
@Baconman: Was ist für Dich „die Adresse”? Kann es sein, dass Du einfach nur den Versatz vom Dateianfang haben möchtest? Ansonsten ist das sehr schwer zu beantworten ohne sich tiefergehend mit dem DLL-Dateiformat auseinander zu setzen. Allgemein kann man dann für Teile der Datei relative Speicheradressen ermitteln, aber auch nicht für jedes Byte, denn einige davon sind Teil von Metainformationen die entweder gar nicht, oder nur temporär in den Speicher geladen werden.
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 19:58
von Baconman
Ich möchte
findjmp.exe in Python nachprogrammieren.
Meine erste Idee war jetzt halt jedes Byte einzeln inklusive seiner Adresse zu laden und in der Tupel-Liste dann nach dem(n) gesuchten paar(en) zu suchen.
Ist das mit Python machbar? Kann es sein das, das nur bei System-Dlls möglich ist? Weil diese ja von diversen Anwendungen geladen werden.
Gruß, Baconman
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 20:55
von BlackJack
@Baconman: Das ist mit Python ganz sicher machbar, aber die Frage ist ob das für *Dich* machbar ist. Man muss die DLL anscheinend tatsächlich „verstehen”, also wissen wie das Dateiformat aufgebaut ist, wie man erkennt welche Daten darin Code sind. Zusätzlich auch noch wie Maschinencode für Intelprozessoren aufgebaut ist und wie Register in den Befehlen kodiert sind.
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 21:28
von Baconman
Eigentlich ist das einzige Problem was ich habe, dass ich die Adresse von bestimmten HEX-Werten brauche. Mit Adresse meine ich die Adresse im RAM. Mir würde auch eine Beschränkung auf einpaar Kernel-DLLs reichen, davon werden ja schon viele beim Systemstart geladen und außerdem sind sie statische DLLs.
Obwohl ich es weis, ist es nicht nötig zu wissen welche Daten darin "Code" sind, wie du es nennst. Ich möchte nur die Adressen von Assamblerbefehlen, wie jmp esp, oder call esp haben. Diese haben ja jeweils eine bestimmte Hex-Codierung, wie z.B. /xff/xe4 = jmp esp. Das heißt ich brauche die Adresse von diesem ganz bestimmten /xff auf das dann /xe4 folgt. Deswegen auch das laden in Hex.
Baconman
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 21:43
von BlackJack
@Baconman: Wenn Du weisst welche Bytes in einer DLL Maschinencode sind — was ich nach Deinem bisherigen auftreten bezweifle — dann müsstest Du den Aufbau von DLLs ja kennen, und auch wissen wo und wie die (relativen!?) Adressen kodiert sind.
Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 22:02
von webspider
Klingt nach statischer Analyse. Evtl. hilft dir ja dieses Stichwort weiter. Also ich habe sofort ein interessante Präsentation zu gefunden.
edit: Die Seite auf die du verlinkt hast, sieht ja sehr vertrauenswürdig aus

Re: .dll zu HEX
Verfasst: Sonntag 19. Februar 2012, 22:35
von Baconman
Okay, ich guck mal. Danke.
Zu der Seite: Keine Ahnung, hab mir die nicht weiter angeguckt. Hab nur findjmp.exe gegoogelt. Die Exe hab ich schon ewig, keine Ahnung wo ich die damals runter geladen hab.