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?
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?
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.
Leggi altre domande sui tag reverse-engineering