PIE について何も知りません。位置に依存しない実行可能ファイルの作成方法を教えてください。
Position Independent Executable または PIE を使用すると、プログラムを共有オブジェクトのように再配置できます。プログラムを実行するたびに、攻撃者が特定のプログラムの状態を推測するのを困難にするために、プログラムを異なるアドレスにロードすることができます。
PIE 実行可能ファイルは、2 つの方法のいずれかでコンパイルおよびリンクできます。まず、すべてを -fPIE
でコンパイルします -pie
でリンク . 2 つ目は、すべてを -fPIC
でコンパイルすることです。 -pie
でリンク .
共有オブジェクトとプログラムの両方をビルドする場合は、すべてを -fPIC
でコンパイルします .共有オブジェクトを -shared
にリンクします 、プログラムを -pie
でリンクします .
他の方法ではできません。つまり、すべてを -fPIE
でコンパイルすることはできません。 共有オブジェクトとプログラムの両方を構築します。詳細については、GCC マニュアルのコード生成オプションを参照してください。
Android で注意すべきことの 1 つは、4.1 より前の PIE でビルドすると、/system/bin/linker
でセグメンテーション エラーが発生することです。 . PIE は Android 4.1 で追加され、それより古いバージョンをクラッシュさせます。
問題を回避するためにカスタム リンク/ローダーを提供するよう誰かに言われましたが、現時点ではリファレンスが見つかりません。
Android 1.5 から 4.1 のセキュリティ強化も参照してください。
<ブロック引用>エラー:位置に依存しない実行可能ファイル (PIE) のみがサポートされています
はい、ロリポップの機能です。 Android 5.0 のセキュリティ強化を参照してください。
readelf
を使用して、プログラムが PIE でビルドされているかどうかを確認できます。 :
$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)
重要な部分は readelf
です DYN
を報告しています 、報告しない EXE
. EXE
PIE がないことを意味し、セキュリティ関連の欠陥を引き起こすはずです。
関連して、Android 4.0 (ICS) でサポートされている主要な実行可能ファイルの PIE (位置に依存しない実行可能ファイル) を参照してください。
私はこれが古いトピックであることを知っていますが、このハックな方法は一部の人々の時間を節約するかもしれません
Hex-Editor を使用して、17 番目のバイトを見つけ、値 02 を 03 に変更します。それだけです!