8

私は最近、iOS アプリの逆コンパイルについて読みましたが、今は本当に心配しています。次の投稿 ( #1#2 ) で述べたように、App Store に配布されている iOS を逆コンパイルすることができます。これはジェイルブレイクで行うことができ、アプリをメモリからhddにコピーすると思います。一部のツールを使用すると、

  • 文字列を読み上げる (文字列ツール)
  • ヘッダファイルをダンプする
  • アセンブリ コードへのリバース エンジニアリング

Cocoa コードをリバース エンジニアリングすることはできないようです。

セキュリティは私が作成するソフトウェアの機能であるため、悪意のあるユーザーがセキュリティ機能 (キーによる暗号化または Web サイトへのログイン) を再構築することを防止したいと考えています。そこで、次の質問を思いつきました。

  1. 誰かが私の保存方法と暗号化方法またはログイン方法をアセンブリで再構築できますか? つまり、彼は正確に何が起こっているのかを理解できますか (どのパスに何が保存されているか、どのキーが使用されているか、どの Web サイトへのログインがどの資格情報で実行されているかなど)? 私にとってはマトリックスのように見えるアセンブリを理解していません...
  2. NSStrings文字列で読めないものやアセンブリで読めないものを安全に使うにはどうすればいいですか?文字列を難読化できることは知っていますが、それでも安全ではありませんね。
4

1 に答える 1

32

これは人々が何年も追い求めてきた問題であり、十分にやる気のあるスキルを持つ人なら誰でも、あなたが知りたくない情報を見つける方法を見つけることができます。その情報がデバイスに保存されていれば、 .

脱獄しなくても、購入またはダウンロードしたバイナリを使用してアプリを逆アセンブルすることができます。これは静的検査であり、標準の分解ツールを使用すると容易になります。ただし、リンカーからシンボルを追加し、何が起こっているのかを理解できるようにメソッド呼び出しを十分に理解できるツールが必要です。これがどのように機能するかを知りたい場合は、hopperをチェックしてください。これは、非常に優れた分解/リバース エンジニアリング ツールです。

特に問題の安全なログに関しては、動機のある攻撃者がいる場合、より大きな問題があります: システムベースの中間者攻撃です。この場合、攻撃者はシステムで使用されているネットワーク コードをシムアウトし、標準のネットワーク経由で送信されるものをすべて見ることができます。したがって、暗号化されていないデータを OS またはライブラリ レベルで「安全な」パイプに送信できることに依存して、それが表示されないことを期待することはできません。少なくとも、データをパイプに入れる前に暗号化する必要があります (つまり、プレーン テキストを標準の SSL ライブラリに送信することに依存することはできません)。独自の SSL ライブラリ セットをコンパイルしてアプリに直接リンクすることができます。これは、システム パフォーマンスとセキュリティの強化が時間の経過とともに得られないことを意味しますが、必要に応じて SSL ライブラリを手動でアップグレードできます。

ただし、これはすべて、攻撃者が十分な動機を持っていることを前提としています。簡単に達成できる問題を取り除けば、カジュアルなハッカーがシステムを簡単に突き止めようとするのを防ぐことができるかもしれません。避けるべきいくつかのこと:

  • 暗号化の両側に平文の暗号鍵を保存する
  • 特定の名前のリソースにキーを保存する (名前が付けられたファイルserverkey.textまたは名前が含まれる plist に保存されたキーkeyは両方ともクラシックです)
  • 可能な限り単純なパスワードを避ける

ただし、最も重要なのは、アプリケーション自体に格納されているキー (存在する場合) が、ユーザーが自分で (直接、または OAUTH などのシステムを介して間接的に) 入力しなければならない情報なしでは役に立たないシステムを作成することです。サーバーは、信頼できるユーザーと何らかの対話を行うことなく、重要な操作についてクライアントを信頼するべきではありません。

Apple のキーチェーンは、OAUTH シーケンス中に取得されたトークンなどの認証トークンを格納するのに適した場所を提供します。API は少し使いにくいですが、システムはしっかりしています。

結局のところ、問題は、あなたが何をしようとも、対策を破るのに必要な作業量を増やしているだけだということです。攻撃者は方程式のすべての重要な部分を制御できるようになるため、最終的にはデバイス上のすべてのものを無効にします. サーバーを保護して悪用を監視するのに対して、クライアントを保護するためにどれだけの労力を費やすかを決定する必要があります。攻撃者はデバイス上のすべてのカードを保持しているため、より良いアプローチは、目標を強化するためにサーバーに実装できる方法になります。

于 2013-07-29T09:35:42.250 に答える