Saya tidak tahu apa-apa tentang PIE, Tolong beri tahu saya cara membuat posisi yang dapat dieksekusi secara independen.
Position Independent Executable atau PIE memungkinkan sebuah program untuk dipindahkan, seperti objek yang dibagikan. Pada setiap menjalankan program, program dapat dimuat di alamat yang berbeda untuk mempersulit penyerang menebak status program tertentu.
Anda dapat mengompilasi dan menautkan PIE yang dapat dieksekusi dengan salah satu dari dua cara. Pertama, kompilasi semuanya dengan -fPIE
dan tautkan dengan -pie
. Yang kedua adalah mengkompilasi semuanya dengan -fPIC
dan tautkan dengan -pie
.
Jika Anda membuat objek bersama dan program, kompilasi semuanya dengan -fPIC
. Tautkan objek bersama dengan -shared
, dan tautkan program dengan -pie
.
Anda tidak dapat melakukannya dengan cara lain. Artinya, Anda tidak dapat mengkompilasi semuanya dengan -fPIE
dan membangun objek bersama dan program. Untuk mengetahui detailnya, lihat Opsi Pembuatan Kode di manual GCC.
Satu hal yang harus diperhatikan di Android:membangun dengan PIE sebelum 4.1 akan menyebabkan kesalahan segmentasi di /system/bin/linker
. PIE ditambahkan di Android 4.1, dan menyebabkan crash pada versi yang lebih rendah.
Seseorang mengatakan kepada saya untuk menyediakan tautan/pemuat khusus untuk menghindari masalah, tetapi saya tidak dapat menemukan referensi saat ini.
Lihat juga Penyempurnaan Keamanan di Android 1.5 hingga 4.1.
Kesalahan:hanya position independent executable (PIE) yang didukung
Ya, itu adalah fitur Lollipop. Lihat Penyempurnaan Keamanan di Android 5.0.
Anda dapat memeriksa apakah suatu program dibuat dengan PIE menggunakan readelf
:
$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)
Bagian yang penting adalah readelf
melaporkan DYN
, dan tidak melaporkan EXE
. EXE
berarti tidak memiliki PIE, dan itu akan memicu cacat terkait keamanan.
Terkait, lihat Apakah PIE (Position-independent executable) untuk executable utama didukung di Android 4.0 (ICS)?
saya tahu ini adalah topik lama tetapi cara hacky ini dapat menghemat waktu beberapa orang
dengan Hex-Editor , temukan byte ke-17, ubah nilainya 02 menjadi 03, dan selesai!