2013-01-03 5 views
5

Ich habe eine seltsame ELF-Binärdatei. Ich kann diese Binärdatei in 32-Bit-Linux ausführen.Seltsame ELF binär

Aber wenn ich diese Binärdatei mit IDA Disassembler öffnen, sagt IDA "ungültiger Einstiegspunkt".

Ergebnis readelf ist wie folgt:

[email protected]:/home/meltdown# readelf -S -l SimpleVM 

There are no sections in this file. 

Elf file type is EXEC (Executable file) 
Entry point 0xc023dc 
There are 2 program headers, starting at offset 52 

Program Headers: 
    Type   Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 
    LOAD   0x000000 0x00c01000 0x00c01000 0x013c7 0x013c7 RWE 0x1000 
    LOAD   0x00019c 0x0804b19c 0x0804b19c 0x00000 0x00000 RW 0x1000 

Es gibt keinen Abschnitt ist. Ich dachte, diese Binärdatei ist gepackt. Die letzte virtuelle Adresse des ersten LOAD-Segments ist jedoch 0xc023c7. Und die virtuelle Adresse des Einstiegspunktes ist 0xc023dc, die außerhalb des Bereichs liegt ...

Kann mir jemand sagen, was los ist?

Vielen Dank im Voraus.

  • /proc/PID/Karten ist wie folgt (zwei Prozesse erstellt ...)

    [email protected]:/proc/3510# cat maps 
    00110000-00111000 rwxp 00000000 00:00 0 
    006c0000-006c1000 r-xp 00000000 00:00 0   [vdso] 
    007d2000-007d4000 rwxp 00000000 00:00 0 
    00c01000-00c02000 rwxp 00000000 08:01 3801242 /home/meltdown/SimpleVM 
    00ca4000-00e43000 r-xp 00000000 08:01 17171359 /lib/i386-linux-gnu/libc-2.15.so 
    00e43000-00e45000 r-xp 0019f000 08:01 17171359 /lib/i386-linux-gnu/libc-2.15.so 
    00e45000-00e46000 rwxp 001a1000 08:01 17171359 /lib/i386-linux-gnu/libc-2.15.so 
    00e46000-00e49000 rwxp 00000000 00:00 0 
    08048000-0804b000 r-xp 00000000 00:00 0 
    0804b000-0804c000 rwxp 00000000 00:00 0 
    b77a7000-b77c7000 r-xp 00000000 08:01 17171339 /lib/i386-linux-gnu/ld-2.15.so 
    b77c7000-b77c8000 r-xp 0001f000 08:01 17171339 /lib/i386-linux-gnu/ld-2.15.so 
    b77c8000-b77c9000 rwxp 00020000 08:01 17171339 /lib/i386-linux-gnu/ld-2.15.so 
    bfa90000-bfab1000 rwxp 00000000 00:00 0   [stack] 
    
    [email protected]:/proc/3511# cat maps 
    00110000-00111000 rwxp 00000000 00:00 0 
    006c0000-006c1000 r-xp 00000000 00:00 0   [vdso] 
    007d2000-007d4000 rwxp 00000000 00:00 0 
    00c01000-00c02000 rwxp 00000000 08:01 3801242 /home/meltdown/SimpleVM 
    00ca4000-00e43000 r-xp 00000000 08:01 17171359 /lib/i386-linux-gnu/libc-2.15.so 
    00e43000-00e45000 r-xp 0019f000 08:01 17171359 /lib/i386-linux-gnu/libc-2.15.so 
    00e45000-00e46000 rwxp 001a1000 08:01 17171359 /lib/i386-linux-gnu/libc-2.15.so 
    00e46000-00e49000 rwxp 00000000 00:00 0 
    08048000-0804b000 r-xp 00000000 00:00 0 
    0804b000-0804c000 rwxp 00000000 00:00 0 
    b77a7000-b77c7000 r-xp 00000000 08:01 17171339 /lib/i386-linux-gnu/ld-2.15.so 
    b77c7000-b77c8000 r-xp 0001f000 08:01 17171339 /lib/i386-linux-gnu/ld-2.15.so 
    b77c8000-b77c9000 rwxp 00020000 08:01 17171339 /lib/i386-linux-gnu/ld-2.15.so 
    bfa90000-bfab1000 rwxp 00000000 00:00 0   [stack] 
    
+0

(+1) Interessante Frage. Ich denke jedoch, dass wir eine höhere Chance auf Erfolg haben würden, wenn wir die tatsächliche Binärdatei untersuchen könnten. – NPE

+0

Was sagen 'file SimpleVM' und' ldd SimpleVM'? –

+1

Ich vermute, wenn dies ein proprietäres Programm ist, dann möchte der Autor verhindern, dass es zerlegt wird. Wie es bekannt ist, ist der Kernel etwas permissiver über das Binärformat (es akzeptiert glücklicherweise einige leicht fehlerhafte ausführbare Dateien, die Disassemblierer/Debugger nicht verwenden), und diese Tatsache wird ausgenutzt, um zu verhindern, dass eine Binärdatei rückentwickelt wird. –

Antwort

3

Es ist wahrscheinlich wegen der Granularität der Abbildungslänge. Die Länge des Mappings wird auf ein Vielfaches der Seitengröße aufgerundet. Auf meinem System ist die Seitengröße 4k, also würde das Mapping auf 4k aufgerundet werden und den Einstiegspunkt umfassen. Selbst bei einer Seitengröße von 1k würde die Länge auf 0x1400 abgerundet werden, genug, um den Einstiegspunkt aufzunehmen. Wenn die Datei lang genug ist, würden die zusätzlichen Bytes wahrscheinlich aus der Datei statt der Seiteninitialisierung stammen.

+0

Ok, es kann nicht als Folge davon * sofort * Seite Fehler *. Aber wäre der Einstiegspunkt nicht gefüllt mit den leeren Seiten, die auf diesem System gefüllt werden? Wenn das effektiv ein * nop * ist, würde es diese ausführen, bis das Ende der Seite abläuft; aber der Befehl könnte wirklich alles Mögliche sein ... –

+0

@ChrisStratton Ich habe angenommen, dass die Datei groß genug für die erweiterte Länge ist. Ich füge das zur Antwort hinzu. –

+0

Das mag in der Tat plausibel sein, besonders wenn jemand versucht, hinterhältig zu sein und sich auf das Verhalten eines bestimmten Programm-Loaders zu verlassen.Es wäre interessant zu sehen, wie die Dateigröße "basierend auf dem ELF-Header sein sollte, im Gegensatz zu dem, was es ist. –