2017-01-25 6 views
0

環境に基づいたさまざまなプリプロセッサ条件を含むConfig.hファイルがあります。プロジェクトには2つの目標があります。プリプロセッサ引数を介して、環境が最初のターゲットである場合、BASE_URL = @ "https://firsttarget.com/"、環境が2番目のターゲットである場合、BASE_URL = @ "https://secondtarget.com/"を持つことがあります。プリプロセッサ内のコードは条件付きでバイナリを入力しますか?

法的には、誰かがアセンブリを再コンパイルして文字列などに狩りをしていた場合、2番目のターゲットアプリケーションのバイナリを調べている場合、文字列@ "https://firsttarget.com/"を見つけることができません。

私の質問は...関連していない場合、アーカイブ中にプリプロセッサの条件文の後ろの文字列が削除されていますか?

答えて

1

ifdef行に指定されたシンボルが定義されていない限り、コード内のセクションは#ifdef#endif(または#else)です。このようなセクションでコンパイルされないものを書くことで、これを簡単に表示できます。そして、コンパイラはそのコードを見ないので、その定義の値がバイナリに終わることはありません。

コンパイラが動作することを正確に確認するには、Xcodeで実装ファイルを選択し、メニューから[製品>アクションの実行>前処理]を選択します。これはコンパイラが動作するものを正確に示します。もちろん、インポートされたすべてのシステム.hファイルの内容もありますので、あなたのコードは終わりです。 #define行も削除されるので、どの文字列を実際に使用するかを実際に確認するには、実際にそれらのマクロを使用するファイルを選択する必要があります。

最後に、攻撃者が行うのと同じことを行うことができます。コンパイルされたバイナリでstringsユーティリティを使用し、そこにあるものを参照してください。 Xcodeでアプリケーションをビルドし、製品グループからアプリバンドルの「Finderで表示」オプションを選択します。 [パッケージコンテンツを表示]を選択すると、実際のアプリバンドルをアプリに表示します。実際のバイナリはバンドルと同じ名前ですが、ファイル拡張子はありません。次に、ターミナルウィンドウを開き、 "strings"と入力して、その上にバイナリをドラッグします。そして返品で確認してください。バイナリからすべての読み込み可能な文字列(すべてのセレクタを含む)の長いリストを取得します。

+0

文字列ユーティリティを使用して、コンパイルされたバイナリの内容を確認する方法について詳しく説明します。 –

関連する問題