Mengapa tidak dapat menemukan string hardcode dalam program yang dibongkar?
Oct 17 2020
Saya telah menulis program sederhana untuk mencetak sesuatu di layar seperti di bawah ini:
ebra@him:/tmp/tuts$ cat sample.c #include <stdio.h> int main() { puts("Sample!"); } ebra@him:/tmp/tuts$ gcc sample.c -o sample
ebra@him:/tmp/tuts$ ebra@him:/tmp/tuts$ ./sample
Sample!
Dan kemudian saya membongkar file yang dapat dieksekusi untuk melihat apa yang terjadi di balik terpal:
ebra@him:/tmp/tuts$ objdump -M intel --disassemble-all sample | grep "<main>:" -A 10
0000000000001149 <main>:
1149: f3 0f 1e fa endbr64
114d: 55 push rbp
114e: 48 89 e5 mov rbp,rsp
1151: 48 8d 3d ac 0e 00 00 lea rdi,[rip+0xeac] # 2004 <_IO_stdin_used+0x4>
1158: e8 f3 fe ff ff call 1050 <puts@plt>
115d: b8 00 00 00 00 mov eax,0x0
1162: 5d pop rbp
1163: c3 ret
1164: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0]
116b: 00 00 00
Seperti yang Anda lihat di atas, tepat sebelum memanggil putsfungsi, kami punya lea rdi,[rip+0xeac]. Saya berasumsi bahwa itu [rip+0xeac]adalah alamat dari teks hardcode (yaitu "Sampel!").
Karena ripsama dengan 0x1151saat mengeluarkan movgaris, nilai [rip + 0xeac]akan 0x1151 + 0xeac = 0x1ffd.
Tetapi saya tidak dapat menemukan alamat ini di program yang dibongkar:
ebra@him:/tmp/tuts$ objdump -M intel --disassemble-all sample | grep -i 1ffd
ebra@him:/tmp/tuts$ objdump -M intel --disassemble-all sample | grep -i "Sample!" ebra@him:/tmp/tuts$
Mengapa?
Jawaban
4 blabb Oct 17 2020 at 15:24
untuk mencari String Anda tidak bisa menggunakan disassemble-all
look at the bytes in both commands if you disassemble how can you find the string
objdump -s sample.exe |grep -i sample
sample.exe: file format pei-i386
404040 00000000 53616d70 6c652100 20634000 ....Sample!. c@.
objdump -M intel --disassemble-all sample.exe --start-address=0x404044 --stop-address=0x40404f
sample.exe: file format pei-i386
Disassembly of section .rdata:
00404044 <.rdata>:
404044: 53 push ebx
404045: 61 popa
404046: 6d ins DWORD PTR es:[edi],dx
404047: 70 6c jo 4040b5 <.rdata+0x45>
404049: 65 21 00 and DWORD PTR gs:[eax],eax
0040404c <_GS_ExceptionPointers>:
40404c: 20 63 40 and BYTE PTR [ebx+0x40],ah
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'