Retas ELF Lain Di Tumpukan

[dropbear] baru-baru ini menemukan dirinya dalam acar. Membuang beberapa data dari aplikasi Android pada titik tertentu untuk tujuan rekayasa balik. Meskipun bekerja dengan baik di simulator, itu sangat lambat pada perangkat keras melalui lldb. Solusinya adalah menulis tambalan dan menerapkannya ke file ELF.

Menulis rakitan AArch64 untuk membuang buffer relatif sepele, tetapi menambahkannya ke ELF yang ada dan mengemasnya kembali menjadi APK baru menyebabkan kesalahan aneh. Offset relatif ke .rodata sekarang semuanya salah. Bagi mereka yang tidak secara rutin berinteraksi dengan format file ELF, kami memiliki sumber daya yang fantastis untuk membawa Anda ke kedalaman yang gelap. Tetapi versi ringkasan singkatnya adalah bahwa bagian berisi berbagai sumber daya, dan Anda menemukan bagian dari sumber daya tersebut dengan offset relatif. Header program menjelaskan jenis sumber daya yang ada di setiap bagian.

[dropbear] menemukan bagian CATATAN yang hanya berisi beberapa metadata. Dia membuat bagian baru di akhir file untuk rakitan kustomnya dan memodifikasi header untuk mendeklarasikan bagian CATATAN sebagai bagian LOAD yang menunjuk ke bagian barunya, yang akan dipetakan ke dalam memori. Yang tersisa untuk dilakukan adalah men-tweak Majelis dalam kode aktual untuk melompat ke kode barunya yang dibuang. Bagian BSS diperpanjang beberapa byte sehingga programnya dapat menyimpan statusnya di sana.

Ini adalah teknik yang mengesankan, dan programnya untuk memodifikasi header program ada di situs webnya di bawah lisensi BSD-3.