Domanda

Non ho conoscenza di come funziona il formato ELF o di come accedere alle sue intestazioni e dati tramite codice, tuttavia devo verificare se un binario ELF è stato compresso (imballato?) Con UPX per Linux.

Controllando il binario con strings Ho visto la stringa UPX! Quindi immagino di poterlo usare. L'esodio del binario mostra la corda e per la posizione nel binario posso supporre che faccia parte di una delle intestazioni di Elf (per favore correggimi se sbaglio). Questa è una discarica di questo:

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

Non so se sembra buono, scusa.

Qualcuno sa come rilevare UPX su Linux? In caso contrario, come accedere alle intestazioni e ottenerlo UPX! String (nome dell'intestazione?)?

Ho esaminato il codice sorgente UPX ma tutto è C ++, sto cercando di codificare questo in C ed è davvero difficile da seguire.

Grazie, qualsiasi aiuto è accolto.

EDIT: Informazioni sulla taglie. Le rispondono devono dare un solido esempio che funziona da quando ho provato approcci diversi e non sempre funzionano, come il campione di seguito.
Grazie

È stato utile?

Soluzione

Questi sono i test per rilevare un file compresso 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

uso

man 5 magic

Per vedere come vengono specificati gli offset all'interno del file.

Ad esempio nel tuo programma dovresti:

  1. Apri il file in test per la lettura
  2. Passa a uno di questi offset
  3. Controlla se la stringa prevista è lì
  4. Ripeti fino a non essere più compensati

È interessante notare che non vengono rilevati i file compressi UBuntu 64 bit, non vengono rilevati perché questo test manca da /usr/share/misc/magic:

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

Altri suggerimenti

Nel codice sorgente su UPX, c'è una funzione int PackW32Pe::canUnpack() che viene eseguito per la prima volta come test proprio quando fai un upx -d <file> (Unpack eseguibile). Mostra quali offset devono essere testati per rilevare se un file era pieno di UPX. Ho trovato il codice chiaro e facile da seguire. Consiglio un editor con un'evidenziazione della sintassi.

Puoi scaricare il codice sorgente per UPX su sito del progetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top