7

ASLR(アドレス空間配置のランダム化)によると、プロセスが開始するたびにランダムなスタックとヒープの割り当てとページの読み込みを提供し、特定のプロセスの仮想空間にオブジェクトが配置されるアドレスをランダム化します。

しかし、iOSで実行されている私のアプリケーションでは、ObjectAという名前のオブジェクトを作成し、プロセスを数回リロードした後、ObjectAのアドレスがすべて同じであり、ランダム化されていないことがわかりました。

Apple独自のASLR実装はどのように機能しますか?ObjectAのアドレスがすべて同じなのはなぜですか?

4

2 に答える 2

3

「数回のリロード」とはどういう意味ですか?マルチタスクのため、同じプロセスを再度開く可能性があるため、アプリケーションを明示的に終了する必要があります。

例えば。オブジェクトのアドレスは実行ごとに異なることがわかるので、これはUIViewControllerインスタンスのアドレスを出力する私のアプリケーションの1つです。

First run: <DCViewController: 0x13d4a0>
Second run: <DCViewController: 0x2880f0>
Third run: <DCViewController: 0x2a2050>

(これは当てはまらないと思いますが、XCodeでは、[ビルド設定]の下にPIE(Position Independent Executable)を有効にするオプションがあり、[Do n't Create Position Indipendent Executables]と呼ばれます。簡単に見つけることができますが、「pie」と入力します。検索ボックスの「。このオプションは「いいえ」に設定する必要があります)。

編集:

さらに、Xcodeは、展開ターゲットが4.3以上の場合にのみPIEバイナリを作成します

これがお役に立てば幸いです=)

于 2012-04-14T13:55:31.427 に答える
0

完全を期すために、その質問に答えるために仕事をしたのは、AppleiOS4セキュリティ評価のDinoZoviでした。他の誰かがDinoの前に公開した場合はお詫びします(私はその仕事やあなたが誰であるかを知りません)。

Zoviは、AppleがiOS Securityを公開するかなり前に、自分の作品を公開しました。ディノの仕事はまだもっと完全です。

于 2012-12-07T20:43:29.240 に答える