informasi kontak saya
Surat[email protected]
2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Format file yang dapat dieksekusi mach-O adalah format file biner yang digunakan pada sistem operasi Apple macOS dan iOS.
Dalam beberapa pemindaian keamanan iOS, mungkin terdapat kebutuhan untuk mendapatkan lokasi panggilan spesifik suatu fungsi, yang dapat memandu pengguna untuk menemukan kerentanan dengan lebih akurat.
Sekarang ambil fungsi NSLog sebagai contoh dan cari secara statis lokasi panggilan spesifik dari fungsi tautan dinamis di macho.
Cari lokasi spesifik di mana fungsi NSLog dipanggil di aplikasi macho.
Keseluruhan proses pencarian merupakan proses parsing file macho dan parsing data biner ke dalam struktur data yang sesuai.
Beberapa bagian macho digunakan:
Meja Tali
Tabel Simbol
Tabel Simbol Dinamis
Bagian 64(TEKS,(rintisan)
Bagian 64(TEKS,teks)
Temukan LC_SYMTAB di Load Commands, Anda dapat menentukan offset dan ukuran StringTable, dan Anda juga dapat menemukan offset dan Jumlah Tabel Simbol:
Offset Tabel Simbol adalah 0x18c478
Jumlah Simbol adalah 0x9a2d
Offset Tabel String adalah 0x2273b0
Ukuran Tabel String adalah 0x108d58
Karena setiap panjang data simbol adalah 16 byte, yaitu 0x10,
Jadi ukuran Tabel Simbol adalah 0x9a2d*0x10 = 0x9A2D0
Alamat awal Tabel Simbol adalah 0x18c478
Alamat akhir adalah 0x18c478 0x9A2D0 = 0x226748
Alamat awal String Table adalah 0x2273b0
Alamat akhir adalah 0x2273b0 0x108d58 = 0x330108
Karena panjang string tidak tetap, panjang setiap bagian data dalam Tabel String tidak tetap.
Saat membaca data Tabel String dalam biner, Anda dapat menggunakan 'x00' sebagai pembatas string.
Anda dapat membaca data Tabel String terlebih dahulu secara macho dan menggunakan 'x00' sebagai pemisah untuk menghasilkan array string.
Lintasi array string dan tentukan apakah setiap bagian data sama dengan "_NSLog".
_NSLog ditemukan di 0x23331b, dan kode mesin "5F4E534C6F6700" adalah string "_NSLogn".
49003 (0xBF6B dalam heksadesimal) adalah nomor indeks string saat ini, yang untuk sementara ditentukan sebagai strTab_index = 49003.
Nomor indeks 49003 dihitung dari alamat awal 0x2273b0 Tabel String, byte ke-49003,
0x2273b0 49003 = 0x23331B, yang merupakan alamat awal _NSLog.
Di MachOView, Anda dapat melihat bahwa alamat 0x00224988 sesuai dengan _NSLog.
Bagaimana menemukan data tabel simbol yang cocok melalui nomor indeks 49003?
Diketahui pada langkah 1:
Alamat awal Tabel Simbol adalah 0x18c478,
Alamat akhir Tabel Simbol adalah 0x226748.
Dalam macho ini, ukuran data dari satu Tabel Simbol adalah 0x10.
Nilai empat byte pertama dari data ke-38993 dalam Tabel Simbol adalah 0xBF6B, yaitu 49003.
Ini sama dengan nomor indeks string _NSLog pada Tabel String, jadi data ini sesuai dengan "_NSLog":
38993 adalah nomor indeks dari data saat ini di Tabel Simbol, sementara symTab_index = 38993,
0x18c478 38993 * 0x10 = 0x224988 persis dengan alamat data saat ini.
Lokasi Simbol Tidak Langsung dapat ditentukan di LC_DYSYMTAB di bawah Perintah Muat di Macho:
Alamat awal: 0x226748, terdapat 794 data, dan ukuran setiap data adalah 0x4.
Lintasi setiap bagian data dalam Simbol Tidak Langsung. Bagian ke-111 menyimpan data 38993.
Jadi data ini sesuai dengan "_NSLog", setel dySymTab_index = 111
Nomor 0x226748 111*0x4 = 0x226904