Ich weiß nichts über PIE, bitte sagen Sie mir, wie man eine positionsunabhängige ausführbare Datei erstellt.
Position Independent Executable oder PIE ermöglicht es, ein Programm genau wie ein gemeinsam genutztes Objekt zu verschieben. Bei jeder Ausführung des Programms kann das Programm an verschiedenen Adressen geladen werden, um es einem Angreifer schwerer zu machen, einen bestimmten Programmstatus zu erraten.
Sie können eine ausführbare PIE-Datei auf zwei Arten kompilieren und verknüpfen. Zuerst alles mit -fPIE
kompilieren und mit -pie
verlinken . Die zweite besteht darin, alles mit -fPIC
zu kompilieren und mit -pie
verlinken .
Wenn Sie sowohl ein gemeinsam genutztes Objekt als auch ein Programm erstellen, kompilieren Sie alles mit -fPIC
. Verknüpfen Sie das freigegebene Objekt mit -shared
, und verknüpfen Sie das Programm mit -pie
.
Sie können es nicht anders machen. Das heißt, Sie können nicht alles mit -fPIE
kompilieren und sowohl ein gemeinsam genutztes Objekt als auch ein Programm erstellen. Einzelheiten finden Sie unter Optionen zur Codegenerierung im GCC-Handbuch.
Eine Sache, auf die Sie bei Android achten sollten:Das Erstellen mit PIE vor 4.1 führt zu einem Segmentierungsfehler in /system/bin/linker
. PIE wurde bei Android 4.1 hinzugefügt und stürzt bei niedrigeren Versionen ab.
Jemand hat mir gesagt, ich solle einen benutzerdefinierten Link/Loader bereitstellen, um das Problem zu vermeiden, aber ich kann die Referenz im Moment nicht finden.
Siehe auch Sicherheitsverbesserungen in Android 1.5 bis 4.1.
Fehler:Nur positionsunabhängige ausführbare Dateien (PIE) werden unterstützt
Ja, das ist eine Lollipop-Funktion. Siehe Sicherheitsverbesserungen in Android 5.0.
Mit readelf
können Sie überprüfen, ob ein Programm mit PIE erstellt wurde :
$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)
Der wichtige Teil ist readelf
meldet DYN
, und EXE
wird nicht gemeldet . EXE
bedeutet, dass ihm PIE fehlt, und das sollte einen sicherheitsrelevanten Defekt auslösen.
Verwandte Informationen finden Sie unter Wird PIE (Positionsunabhängige ausführbare Datei) für die wichtigsten ausführbaren Dateien in Android 4.0 (ICS) unterstützt?
Ich weiß, dass dies ein altes Thema ist, aber dieser Hacky-Weg kann einigen Leuten Zeit sparen
mit einem Hex-Editor das 17. Byte finden, den Wert 02 auf 03 ändern, fertig!