Question

Je n'ai aucune connaissance du fonctionnement du format ELF ou de la manière d'accéder à ses en-têtes et à ses données via du code, mais je dois vérifier si un binaire ELF a été compressé (compressé?) avec UPX pour Linux.

En vérifiant le binaire avec strings, j'ai vu la chaîne UPX! donc je suppose que je peux l'utiliser. Hexediting le binaire montre la chaîne et pour la position dans le binaire, je peux supposer que cela fait partie de l'un des en-têtes d'ELF (veuillez me corriger si je me trompe). Ceci est une décharge de cela:

00000000    .ELF........................4...
00000020    ........4. ...(.................
00000040    ........................@...@...
00000060    @.....................[.UPX!....
00000080    ............T............?d..ELF

Je ne sais pas si cela semble bon, désolé.

Est-ce que quelqu'un sait comment détecter UPX sous Linux? Sinon, comment accéder aux en-têtes et obtenir cette chaîne UPX! (nom de l'en-tête?)?

J'ai regardé dans le code source UPX mais tout est en C ++, je cherche à le coder en C, et c'est vraiment difficile à suivre.

Merci, toute aide est la bienvenue.

EDIT: À propos de la prime. La réponse doit donner un exemple solide qui fonctionne puisque j'ai essayé différentes approches et qu'elles ne fonctionnent pas toujours, comme l'exemple ci-dessous.
Merci

Était-ce utile?

La solution

Voici les tests pour détecter un fichier compressé UPX:

>>>>(0x3c.l+0xf8)   string      UPX0 \b, UPX compressed
>>>>(0x3c.l+0xf8)   search/0x140    UPX2
>>>(&0x7c.l+0x26)   string      UPX \b, UPX compressed
>>>&0x26    string      UPX \b, UPX compressed
>>85    string      UPX     \b, UPX compressed

utiliser

man 5 magic

pour voir comment les décalages à l'intérieur du fichier sont spécifiés.

Par exemple, dans votre programme, vous devez:

  1. ouvrir le fichier en cours de test pour lecture
  2. passer à l'un de ces décalages
  3. vérifier si la chaîne attendue est là
  4. répéter jusqu'à ce qu'il n'y ait plus de décalages

Fait intéressant, dans mon ubuntu 64bit, les fichiers compressés UPX ne sont pas détectés car ce test est absent de /usr/share/misc/magic:

>>180   string      UPX!        UPX compressed (64-bit)

Autres conseils

Dans le code source de UPX, il y a une fonction int PackW32Pe::canUnpack() qui est d'abord exécutée comme test juste lorsque vous faites un upx -d <file> (décompresser l'exécutable).Il montre quels décalages doivent être testés pour détecter si un fichier a été compressé avec UPX.J'ai trouvé le code clair et facile à suivre.Je recommande un éditeur avec coloration syntaxique.

Vous pouvez télécharger le code source pour UPX sur le site du projet .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top