No sé nada sobre PIE. Por favor, dígame cómo crear un ejecutable independiente de posición.
Position Independent Executable o PIE permite reubicar un programa, al igual que un objeto compartido. En cada ejecución del programa, el programa se puede cargar en diferentes direcciones para que sea más difícil para un atacante adivinar cierto estado del programa.
Puede compilar y vincular un ejecutable PIE de una de dos maneras. Primero, compila todo con -fPIE
y enlace con -pie
. La segunda es compilar todo con -fPIC
y enlace con -pie
.
Si está creando tanto un objeto compartido como un programa, compile todo con -fPIC
. Vincular el objeto compartido con -shared
y vincular el programa con -pie
.
No puedes hacerlo de otra manera. Es decir, no puedes compilar todo con -fPIE
y construir un objeto compartido y un programa. Para obtener más información, consulte Opciones de generación de código en el manual de GCC.
Una cosa a tener en cuenta en Android:compilar con PIE anterior a 4.1 provocará un error de segmentación en /system/bin/linker
. PIE se agregó en Android 4.1 y falla en versiones menores.
Alguien me dijo que proporcionara un enlace/cargador personalizado para evitar el problema, pero no puedo encontrar la referencia en este momento.
Consulte también Mejoras de seguridad en Android 1.5 a 4.1.
Error:solo se admiten ejecutables independientes de la posición (PIE)
Sí, esa es una característica de Lollipop. Consulte Mejoras de seguridad en Android 5.0.
Puede verificar si un programa está construido con PIE usando readelf
:
$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)
La parte importante es readelf
está informando DYN
y no informar EXE
. EXE
significa que carece de PIE, y eso debería desencadenar un defecto relacionado con la seguridad.
Relacionado, consulte ¿Se admite PIE (ejecutable independiente de la posición) para los ejecutables principales en Android 4.0 (ICS)?
Sé que este es un tema antiguo, pero esta forma de piratería puede ahorrarle tiempo a algunas personas.
con un Hex-Editor, encuentre el byte 17, cambie el valor 02 a 03, ¡y eso es todo!