Question:
Comment vérifier si un fichier ELF est compressé en UPX?
qbi
2013-03-23 04:31:47 UTC
view on stackexchange narkive permalink

J'ai un fichier ELF et je veux savoir s'il est compressé en UPX. Comment puis-je détecter la compression UPX dans GNU / Linux?

Vanilla UPX ou une éventuelle modification d'UPX?
Je pense que c'est un UPX vanille-
Quatre réponses:
#1
+11
0xC0000022L
2013-03-23 04:54:03 UTC
view on stackexchange narkive permalink

D'accord, en supposant l'UPX vanille, vous devriez être bien en détectant les chaînes UPX! ou UPX0 . Autant que je me souvienne, cela fonctionnerait également sous Windows.

C'est donc un shell one-liner tel que:

  grep UPX \! <filename>  

ou

  grep UPX0 <filename>  

... en supposant la version GNU de grep ici.


Autre méthode, mais utilisant le même principe:

  $ hexdump -C <filename> | grep -C 1 UPX000000a0 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 | .......... ..... | 000000b0 c3 af e9 18 55 50 58 21 20 08 0d 16 00 00 00 00 | .... UPX! ....... | 000000c0 a0 fd 16 00 a0 fd 16 00 38 02 00 00 c6 00 00 00 | ........ 8 ....... | --0000cf60 fe 61 03 83 78 b5 54 03 67 8b 85 2d ca a8 12 3c | .a..xTg.-... < | 0000cf70 44 ad bc 12 ab 7e 86 55 50 58 30 0e 01 ee 7c 64 | D .... ~. UPX0 ... | d | 0000cf80 00 f7 d1 80 4a 11 03 58 6e ac 0d 01 ff 92 83 e8 | .... J..Xn ....... | --000544e0 73 20 66 69 6c 65 20 69 73 20 70 61 63 6b 65 64 | Le fichier est compressé | 000544f0 20 77 69 74 68 20 74 68 65 20 55 50 58 20 65 78 | avec l'UPX ex | 00054500 65 63 75 74 61 62 6c 65 20 70 61 63 6b 65 72 20 | ecutable packer | 00054510 68 74 74 70 3a 2f 2f 75 70 78 2e 73 66 2e 6e 65 | http: // upx. sf.ne | 00054520 74 20 24 0a 00 24 49 64 3a 20 55 50 58 20 33 2e | t $ .. $ Id: UPX 3. | 00054530 30 38 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 | 08 Copyright (C) | --00054e40 7d 24 24 92 b7 0c 7f 12 01 a8 24 49 92 ff 00 00 |} $$ ....... $ I .... | 00054e50 00 00 55 50 58 21 00 00 00 00 00 00 55 50 58 21 | ..UPX! ...... UPX! | 00054e60 0d 16 08 07 80 44 b5 80 b9 9a 8a d9 a0 08 00 00 | ..... D. ......... |  
Vous pouvez aussi simplement essayer d'exécuter `upx -l` dessus.
#2
+7
joxeankoret
2013-03-24 19:24:06 UTC
view on stackexchange narkive permalink

Je ne vous recommande pas de vous fier aux chaînes ou aux noms de section que vous pouvez trouver. Normalement, cela indiquera que le fichier est emballé avec UPX mais, surtout si vous analysez des logiciels malveillants, cela peut être fait pour vous tromper. Ma recommandation est de regarder vers le point d'entrée et de trouver un modèle similaire à celui-ci:

  0x00023b60; FONCTION start0x00023b60 (01) 60 PUSHA 0x00023b61 (05) be00904300 MOV ESI, 0xHARDCODED_VIRTUAL_ADDRESS0x00023b66 (06) 8dbe0080fcff LEA EDI, [ESI-0x38000] 0x00023b6c (01) 57 PUSH EDIb (01) 57 PUSH EDIb (01) 1 

En gros, recherchez PUSHA, MOV ESI, VIRTUAL_ADDRESS, LEA et JMP.

#3
+5
rev
2013-03-24 17:54:49 UTC
view on stackexchange narkive permalink

Dans les variantes Linux / Unix, la commande strings m'a aidé à identifier certains des packers tels que UPX, Aspack, NSPack, NTKrnl, PeCompact, Themida, etc. identifier le type d'emballeur. Certes, l'auteur du fichier elf pourrait introduire les mêmes chaînes intentionnellement pour faire dérailler votre analyse. Je voudrais simplement utiliser ceci comme point de départ dans mon analyse.

Voici quelques-unes des chaînes d'identification qui m'ont aidé à identifier le type de packer.
UPX - UPX0, UPX1, UPX2
Aspack - aspack, adata
NSPack - NSP0, NSP1, NSP2
NTKrnl - NTKrnl Security Suite
PECompact - PEC2, PECompact2
Themida - Themida, aPa2Wa

De plus, la commande file identifie également certains formats de packer courants.

Si vous pensez que le fichier est définitivement compressé avec UPX, alors je recommanderais la suggestion de 0xC0000022L.

#4
+5
Ange
2013-03-26 21:25:20 UTC
view on stackexchange narkive permalink
  1. obtenez UPX
  2. créez vos propres ELF remplis UPX, avec différentes options (LZMA, NRV, ...)
  3. Comme UPX est facile à modifier, et très souvent modifié, patché ou même falsifié, la comparaison des débuts de code permettra de vérifier facilement si votre cible est bien remplie en UPX, et s'il s'agit vraiment de la version UPX originale ou si elle est modifiée de quelque manière que ce soit.
C'est en fait un excellent point, mais cela le rend assez fastidieux, car même l'UPX vanilla a tellement de versions. Toujours +1
vous avez raison mais c'est toujours gérable: vanilla UPX a beaucoup de versions, mais elles ont peu de variations dans leur flux, donc elles ne sont pas identiques en octets, mais la structure est vraiment similaire. En règle générale, un hack UPX décent a du code supplémentaire entre les principales parties, comme la décompression et le chargement d'importation. J'ai retéléchargé un ancien [commenté UPX IDB] (https://corkami.googlecode.com/files/upx-idb.zip), peut-être que cela aidera.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...