2

これはメッセージアプリです。ログイン(ユーザー名またはパスワード)はありません。これは、サーバーにメッセージを送信する必要があることを意味し、サーバーは、それが発信元の電話番号から発信されていることを信頼する必要があります。

どうやってそれをしますか?

1) テキスト メッセージ サービスを使用してトークンを電話に送信する

4

2 に答える 2

6

残念ながら、サーバーに報告された電話番号が発信元のものであることを 100% 確実に保証することはできません。その理由は、クライアント コードは何をしてもリバース エンジニアリングされる可能性があるためです。ただし、100% 安全であるためにはこれに依存しないことが重要ですが、もう少し難しくするためにできることがいくつかあります。100% の保証が必要な場合は、従来の方法でアプリをサーバーに対して認証する必要があります。

私がこれを行う方法は、リリースされるクライアントの各コピーにトークンを埋め込み、各クライアントが異なるトークンを持つようにすることです。トークンには非常に大きなエントロピー (128 ビット以上の整数など) が必要であり、デバイスの電話番号を使用して発行したトークンのリストをサーバーに保持し、有効性を確認できるようにする必要があります。新しいトークンを使用するためにアプリの再インストールを要求し、以前のトークンをブラックリストに登録して使用できないようにします。UID を使用できますが、root 化されたデバイスによって簡単にスプーフィングされる可能性があることに注意してください。

毎回このトークンをサーバーに送信し、アプリが要求する電話番号が変更されないようにします。リバース エンジニアがコード内のトークンを見つけにくくするために、xor追加のトークンを使用して 1 回以上検出することができます。また、サーバーでブラックリストに登録されているコード全体に多数の偽のトークンを配置することもできます。

また、サーバーとのライブ対話中に RE が埋め込みトークンを取得する必要があるように、サーバーから取得した秘密鍵を使用して暗号化することもできます。繰り返しますが、これは、トークンが見つからず、変更/盗難されないことを保証するものではありませんが、潜在的なリバース エンジニアの基準を引き上げます.

誰かがワイヤーを盗聴してトークンを取得および/または改ざんしたり、Burp Suiteなどのプロキシを使用してキャプチャ/改ざんしたりするのを防ぐには、暗号化された HMACを使用する必要があります。これまでに HMAC を使用したことがない場合は、暗号化しない限り、認証と整合性のみが提供され、機密性は提供されないことに注意してください。

編集:

また、展開する前に難読化ツールを介してコードを実行する必要があることも追加する必要があります。これはトークンを難読化するわけではありませんが、逆コンパイルされたコードを難読化するため、RE には意味不明に見えます。これにより、RE はアプリのバイト コード/アセンブリ コードを使用するようになりますが、これは非常に困難です。

于 2013-06-18T23:17:01.753 に答える
1
  1. 各電話番号を一意のデバイス識別子に関連付けます
  2. udid を取得し、リクエストごとに送信します
  3. サーバーへの各リクエストに続く署名を作成します。署名は次のようなものである必要があります: 秘密鍵 1 + msg + 電話番号 + uid + 秘密鍵 2、次に文字列を SHA1 してリクエストに添付します。
  4. サーバー上で署名を計算し、メッセージに続く元の署名と比較します。一致する場合はOK、そうでない場合は送信しないでください。

強力なキーを使用し、2 つ使用して、力ずくで抽出することをほとんど不可能にします。

于 2013-06-18T23:14:20.503 に答える