x86 vs x64 sfruttamento [chiuso]

-3

Molti dei testi che ho visto sembrano basati su processori a 32 bit. Quanto è diverso l'inversione di 32 bit e 64 bit? È facile raccogliere le cose a 64 bit se imparo le cose a 32 bit?

    
posta Shikataganai 20.11.2017 - 03:34
fonte

1 risposta

1

Suppongo che per x86 e x64 intendiate rispettivamente i386 e amd64.

Sfruttamento

Questa è una domanda molto complessa. Almeno per x86, il comportamento generale dei processori a 32 bit e 64 bit è abbastanza simile. Le basi sono le stesse (ad esempio ROP non è una bestia significativamente diversa su una o l'altra). La differenza principale è che i processori a 64 bit di solito hanno alcune istruzioni più recenti e, naturalmente, hanno registri che sono due volte più grandi. È ancora possibile utilizzare registri a 32 bit su un processore a 64 bit (ad esempio mov eax,32 funziona su entrambi i processori, mentre mov rax,32 funziona solo su 64 bit). Molte volte vedrai programmi a 64 bit che usano tutti i tipi di istruzioni e registri e anche qualcosa come mov al,32 è perfettamente valido. Una spiegazione utile è fornita qui .

Ci sono alcune sottili differenze quando si tratta di comportamenti di basso livello. Un processore a 64 bit funziona in modalità estesa, mentre un processore a 32 bit è limitato alla modalità protetta. Ciò si traduce in cose come la segmentazione della memoria non disponibile sul primo. Questo di solito non importa quando si tratta di sfruttamento di applicazioni di base però.

Anche il comportamento del sistema operativo potrebbe essere diverso. Ci sono alcune diverse syscalls, con comportamenti diversi, su Linux a 32 bit rispetto a Linux a 64 bit. Una vulnerabilità nel codice specifico a 32 bit potrebbe non essere presente su Linux a 64 bit (ad esempio, una vulnerabilità in vm86() syscall). Allo stesso modo, le librerie di sistema possono comportarsi in modo leggermente diverso tra i due. Ci sono anche diversi modi di invocare syscalls. Sui sistemi a 32 bit, si usa un interrupt, chiamato come int 0x80 . Sui sistemi a 64 bit, c'è l'istruzione syscall più veloce, che genera un'eccezione piuttosto che un interrupt.

Reverse engineering

Chiedi anche se RE è molto diverso (RE è separato dallo sfruttamento). Sì, è un po 'diverso, ma solo in questo ci sono nuove istruzioni e registri. Un disassemblatore sarà in grado di mostrarti cosa è cosa. Ci saranno molti aspetti familiari, anche familiari se tutto ciò che hai mai usato è un vecchio 8086 (dal momento che ax e al sono ancora registri perfettamente validi). Vi sono tuttavia alcune differenze non ovvie, come un'azione su un registro a 32 bit che cancella la metà superiore del registro a 64 bit equivalente.

Inoltre, ci sono alcuni registri più generali. Ciò significa che potresti visualizzare istruzioni come xchg rax,r12 . Hanno versioni a 32 bit sebbene siano state aggiunte solo su sistemi a 64 bit, dove vengono denominate cose come r12d .

Disassemblaggio di un mondo ciao a 64 bit:

hello64:     file format elf64-x86-64

Disassembly of section .text:
0000000000400080 <_start>:
  400080:   b8 01 00 00 00          mov    eax,0x1
  400085:   bf 01 00 00 00          mov    edi,0x1
  40008a:   48 8d 34 25 a4 00 40    lea    rsi,ds:0x4000a4
  400091:   00 
  400092:   ba 0e 00 00 00          mov    edx,0xe
  400097:   0f 05                   syscall 
  400099:   b8 3c 00 00 00          mov    eax,0x3c
  40009e:   31 ff                   xor    edi,edi
  4000a0:   0f 05                   syscall 

Contents of section .rodata:
 4000a4 48656c6c 6f2c2077 6f726c64 210a      Hello, world!.  

Disassemblaggio di un mondo hello a 32 bit:

hello32:     file format elf32-i386

Disassembly of section .text:
08048060 <_start>:
 8048060:   b8 04 00 00 00          mov    eax,0x4
 8048065:   bf 01 00 00 00          mov    edi,0x1
 804806a:   8d 35 80 80 04 08       lea    esi,ds:0x8048080
 8048070:   ba 0e 00 00 00          mov    edx,0xe
 8048075:   cd 80                   int    0x80
 8048077:   b8 01 00 00 00          mov    eax,0x1
 804807c:   31 ff                   xor    edi,edi
 804807e:   cd 80                   int    0x80

Contents of section .rodata:
 8048080 48656c6c 6f2c2077 6f726c64 210a      Hello, world!.  

Asporto

Se conosci già lo sfruttamento o il reverse engineering, la migrazione a un sistema a 64 bit sarà facile.

    
risposta data 20.11.2017 - 08:40
fonte

Leggi altre domande sui tag