私はココアでアプリケーションを作成していて、その中のいくつかの文字列に簡単にアクセスできるかどうかを確認したかったので、OTXを実行しましたが、残念ながらすべてのコードが見つかりました。コードをより「安全」にするため、または少なくとも文字列を暗号化/非表示にするために使用できる方法はありますか?文字列を暗号化する理由は、サーバーのパスワードだからです。本当に安全である必要はありません。パスワードを簡単に見つけられるようにしたくありません。
助けてくれてありがとう
私はココアでアプリケーションを作成していて、その中のいくつかの文字列に簡単にアクセスできるかどうかを確認したかったので、OTXを実行しましたが、残念ながらすべてのコードが見つかりました。コードをより「安全」にするため、または少なくとも文字列を暗号化/非表示にするために使用できる方法はありますか?文字列を暗号化する理由は、サーバーのパスワードだからです。本当に安全である必要はありません。パスワードを簡単に見つけられるようにしたくありません。
助けてくれてありがとう
実行可能ファイルにパスワードを入れてはいけません。
これは、モニターの横にある付箋にパスワードを貼り付けるようなものです。悪意のあるハッカーがあなたのアプリケーションを手に入れた場合、あなたがどの言語や API を使って書いたかに関係なく、彼らは最終的にパスワードを抽出することができます.
たとえば、アプリケーションがパスワードで保護されたサーバーに接続しているにもかかわらず、アプリケーションがパスワードを要求しないことがわかっている場合は、パスワードを含めたのが間違いであることがわかります。パスワードを見つけるには、プログラムの動作を監視して、サーバーへの接続時にアクティブなコード領域を確認するだけで済みます。これにより、アプリケーションの規模に関係なく、パスワードの検索をどこに集中すべきかがわかります。それから、パスワードを追跡するのは時間の問題です。暗号化アルゴリズムもアプリに含まれている必要があり、それも解明できるため、パスワードを暗号化しても意味がありません。
生のマシンコードのみを使用してコードを解読できる人がたくさんいることを忘れないでください。それらの人々にとって、どの言語や API を使用するかは問題ではありません。最終的に機械語に変換されるからです。それらの人々はプログラミングの恐ろしい熟練した神であり、あなたや私のような単なる人間を笑います. 残念ながら、彼らの中には悪人もいます.
実行可能ファイルにパスワードを入れてはいけないと言いましたか? そうでない場合は、実行可能ファイルにパスワードを入力してはならないことを繰り返します。
あなたの特定のケースでは、初心者のプログラマーとして、自分よりも少しでも経験のある人からパスワードを隠すことはできません。これは、実行可能ファイルにパスワードを入力してはならないもう 1 つの正当な理由です。
1. 安全なコードで ObjC を避ける。
ObjC のクラス システムはランタイム リフレクションに大きく依存しているため、インターフェイス全体を実行可能ファイルと共に含める必要があります。これにより、ツールなどclass-dump
でバイナリのソース @interface を簡単に復元できます。
したがって、セキュア コード関数は、ObjC メソッドではなく、C 関数として記述する必要があります。
2. を使用しstrip
ます。
デフォルトでは、コンパイラはすべてのプライベート シンボルを保持します (これにより、スタック トレースが読みやすくなります)。を使用strip
して、これらのシンボルをすべて削除できます。
3. 難読化。
上記の手順では、コード ロジックのみを非表示にできます。strings
ただし、パスワードが定数文字列の場合は、ユーティリティを使用してすぐに表示できます。実行時にパスワードを作成することで、これを難読化できます (たとえば、ROT-13 でエンコードされたパスワードをファイルに保存します)。
4. または単にデザインを変更します。
保護システムがどれほど優れていても、ハッカーは自分のマシンを完全に制御できるため、十分な時間があれば常に勝ちます。実行可能ファイルにパスワードを付ける必要がある理由など、設計を修正したほうがよいでしょう。または、なぜグローバルパスワードが必要なのですか?