Libcapライブラリを使用してネットワークトラフィックに関連する情報を取得する.cソースコード(Eclipse)を作成しました。これで、Eclipseでndk-buildを使用して実行可能バイナリを作成しました。 libs/armeabiフォルダーに作成されたバイナリをmy Android(rooted nexus 5、Lollipop)の/ data/local /フォルダーにプッシュし、バイナリを実行しようとしましたが、Androidはこのエラーをスローしています
エラー:位置独立実行可能ファイル(PIE)のみがサポートされています
PIEについては何も知りません。位置に依存しない実行可能ファイルを作成する方法を教えてください。
PIEについては何も知りません。位置に依存しない実行可能ファイルを作成する方法を教えてください。
位置独立実行可能ファイルまたは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に変更します。これで完了です!