2011-01-03 10 views
2

Ich versuche herauszufinden, wie man erkennt, ob eine Binärdatei mit UPX komprimiert wurde. Ich verwende einen einfachen CRC, um zu erkennen, ob meine App in irgendeiner Weise geändert wurde, und wenn der CRC aufgrund eines Packers auf die Größe nicht passt, möchte ich das als OK erkennen.UPX programmgesteuert erkennen

Jetzt beginne ich mit UPX.

Also, gibt es einen Marker auf der Binärdatei? Gibt es bestimmte JMP oder andere Anweisungen, die ich suchen sollte?
Dies wird hauptsächlich in Windows getestet, aber in Zukunft könnte ich es auch zu Linux hinzufügen.

Jede Hilfe (und Code) wird geschätzt.

ADDED:

fand ich, dass in den 10 Binärdateien ich die

AddressOfEntryPoint
Import Directory RVA
Resouce Directory RVA

entweder Buch

geprüft einen Versatz UPX oder zu haben, die durch UPX eingestellt ist. Irgendwelche Informationen dazu?

Dank

+0

Versuchen Sie, Blick auf UPX-Entpacker-Quellcode, ich bin sicher, dass ein Algorithmus für UPX-Erkennung sollte da sein – Machinarius

+0

Bereits getan, und es ist ein Durcheinander, gelinde gesagt. –

Antwort

0

Sie könnten versuchen, die Abschnittsnamen der ausführbaren Datei zu überprüfen. UPX ändert sie zu UPX0, UPX1, UPX2, glaube ich.

+1

Diese Methode ist leider nicht zuverlässig. Die Abschnitte einiger (gepackter/verschlüsselter) Bilder werden in "Standard"/"traditionelle" Sektionsnamen umbenannt. Die Namen der Abschnitte werden vom Loader niemals "interpretiert". Die Namen der Abschnitte fehlen manchmal sogar (auch entfernt) durch einige Werkzeuge. – mox

+0

@mox, diese Antwort ist spezifisch für den UPX-Packer. Das Ausführen zusätzlicher Packer oder Obfuscatoren kann die Abschnittsnamen weiter modifizieren; Standardmäßig ändert der UPX-Packer jedoch die oben beschriebenen Abschnittsnamen. –

2

Herunterladen upx Quellcode von UPX Homepage und offener src/p_w32pe.cpp-Datei; die Funktion, die Sie suchen, ist;

int PackW32Pe::canUnpack() 

Diese Funktion prüft, ob die Datei mit win32 upx komprimiert ist.

+0

Vielen Dank für den Tipp, aber ich habe es schwer, diesen Code mit den verschiedenen Objekten und ihren Konstruktoren zu folgen. Für einen win32 heißt es 'PackW32Pe' (in einer .h-Datei), aber das wiederum erstellt einen anderen Aufruf, etc ... Ich bin ein C-Programmierer und Objekte sind nicht sehr stark mit mir. Irgendwelche spezifischen, die Sie vom Lesen dieses Codes hinzufügen könnten? Danke nochmal –

+0

Aktualisiere meine Antwort. – ismail

+0

danke. Lass mich sehen ob ich es irgendwie benutzen kann –

Verwandte Themen