826

Android用の支払い処理アプリを開発していますが、ハッカーがAPKファイルのリソース、アセット、ソースコードにアクセスできないようにしたいと考えています。

誰かが.apk拡張子を.zipに変更すると、それを解凍してアプリのすべてのリソースとアセットに簡単にアクセスできます。また、 dex2jarとJavaデコンパイラーを使用して、ソースコードにアクセスすることもできます。Android APKファイルのリバースエンジニアリングは非常に簡単です。詳細については、StackOverflowの質問APKファイルからプロジェクトへのリバースエンジニアリングを参照してください。

AndroidSDKに付属のProguardツールを使用しました。署名されたキーストアとProguardを使用して生成されたAPKファイルをリバースエンジニアリングすると、難読化されたコードが表示されます。

ただし、Androidコンポーネントの名前は変更されず、アプリで使用されるキー値などの一部のコードは変更されません。Proguardのドキュメントによると、ツールはマニフェストファイルに記載されているコンポーネントを難読化することはできません。

今私の質問は次のとおりです。

  1. Android APKのリバースエンジニアリングを完全に防ぐにはどうすればよいですか?これは可能ですか?
  2. ハッカーがAPKファイルをハッキングできないように、アプリのすべてのリソース、アセット、ソースコードを保護するにはどうすればよいですか?
  3. ハッキングをより困難にしたり、不可能にしたりする方法はありますか?APKファイルのソースコードを保護するためにさらに何ができますか?
4

33 に答える 33

398

 1. Android APK のリバース エンジニアリングを完全に回避するにはどうすればよいですか? これは可能ですか?

私の知る限り、リバースエンジニアリングを完全に回避するためのトリックはありません。

また、@inazaruk は非常によく言っています。コードに何をしても、潜在的な攻撃者は実行可能と判断した方法でコードを変更できます。基本的に、アプリケーションを変更から保護することはできません。また、そこに設定した保護は無効/削除できます。

 2. ハッカーが APK ファイルをハッキングできないように、アプリのすべてのリソース、アセット、ソース コードを保護するにはどうすればよいですか?

ただし、ハッキングを難しくするためにさまざまなトリックを実行できます。たとえば、難読化を使用します (Java コードの場合)。これにより、通常、リバース エンジニアリングが大幅に遅くなります。

 3. ハッキングをより困難にする、または不可能にする方法はありますか? APK ファイルのソース コードを保護するには、他に何ができますか?

誰もが言うように、そしておそらくご存知のように、100% のセキュリティはありません。しかし、Google に組み込まれている Android の開始点は ProGuard です。共有ライブラリを含めるオプションがある場合は、必要なコードを C++ に含めて、ファイル サイズや統合などを確認できます。ビルドごとに APK のライブラリ フォルダに外部ネイティブ ライブラリを追加する必要がある場合は、それを使用できます。以下の提案によって。

プロジェクト フォルダーの "libs" にデフォルト設定されているネイティブ ライブラリ パスにライブラリを配置します。「armeabi」ターゲットのネイティブ コードをビルドした場合は、それをlibs/armeabiの下に置きます。armeabi-v7aでビルドされた場合は、 libs/armeabi-v7a の下に配置し ます。

<project>/libs/armeabi/libstuff.so
于 2012-12-13T07:03:12.323 に答える
139

私の知る限り、 /res ディレクトリ内のファイルは、現在保護されている以上に保護することはできません。

ただし、ソース コードを保護するために実行できる手順があります。または、すべてではないにしても、少なくともその機能を保護するために実行できる手順があります。

  1. ProGuard などのツールを使用します。これらはコードを難読化し、不可能ではないにしても、逆コンパイルすると読みにくくなります。
  2. サービスの最も重要な部分をアプリから Web サービスに移動し、PHP などのサーバー側言語の背後に隠します。たとえば、100 万ドルを費やして作成したアルゴリズムがあるとします。あなたは明らかに、人々があなたのアプリからそれを盗むことを望んでいません. アルゴリズムを移動して、リモート サーバーでデータを処理し、アプリを使用して単純にデータを提供します。または、NDK を使用して、apk よりも逆コンパイルされる可能性がはるかに低い .so ファイルにネイティブに書き込みます。.so ファイルの逆コンパイラは今のところ存在しないと思います (存在したとしても、Java 逆コンパイラほど良くはないでしょう)。さらに、@nikolay がコメントで述べたように、サーバーとデバイス間のやり取りには SSL を使用する必要があります。
  3. デバイスに値を保存するときは、未加工の形式で保存しないでください。たとえば、ゲームがあり、ユーザーが持っているゲーム内通貨の量を SharedPreferences に保存している場合です。10000コインだとしましょう。直接保存する代わりに、 の10000ようなアルゴリズムを使用して保存します((currency*2)+1)/13。の代わりに、SharedPreferences10000に保存します。1538.53846154ただし、上記の例は完全ではありません。丸め誤差などで通貨を失わない方程式を考え出す必要があります。
  4. サーバー側のタスクについても同様のことができます。例として、実際に支払い処理アプリを見てみましょう。ユーザーが の支払いをしなければならないとしましょう$200。生の値をサーバーに送信する代わりに$200、一連の小さい定義済みの値を合計して$200. たとえば、単語と値を同等に扱うファイルまたはテーブルをサーバーに用意します。では、 、 、およびにCharlie対応するとしましょう。したがって、 を送信する代わりに、 4 回送信して$47John$3$200CharlieJohn四回。サーバー上で、それらの意味を解釈して合計します。これにより、ハッカーはどの単語がどの値に対応するかわからないため、任意の値をサーバーに送信できなくなります。セキュリティの追加手段として、これについてもポイント 3 と同様の方程式を作成しn、日数ごとにキーワードを変更することができます。
  5. 最後に、無作為に役に立たないソース コードをアプリに挿入して、ハッカーが干し草の山から針を探すようにすることができます。インターネットからのスニペットを含むランダムなクラスを挿入するか、フィボナッチ数列のようなランダムなものを計算する関数だけを挿入します。これらのクラスがコンパイルされることを確認しますが、アプリの実際の機能では使用されません。これらの偽のクラスを十分に追加すると、ハッカーは実際のコードを見つけるのに苦労することになります.

全体として、アプリを 100% 保護する方法はありません。難しくすることはできますが、不可能ではありません。Web サーバーが危険にさらされる可能性があります。ハッカーは、複数のトランザクションの金額と送信したキーワードを監視して、キーワードを見つけ出し、ソースを入念に調べて、どのコードがダミーであるかを突き止める可能性があります。

反撃することしかできませんが、決して勝つことはできません。

于 2012-12-13T07:07:32.593 に答える
126

コンピューティングの歴史において、ソフトウェアの作業コピーを攻撃者に渡したときに、ソフトウェアのリバース エンジニアリングを防ぐことができたことはありません。また、ほとんどの場合、それは不可能です。

それを理解した上で、明らかな解決策があります。秘密を攻撃者に渡さないことです。APK のコンテンツを保護することはできませんが、保護できるのは配布していないものです。通常、これは、アクティベーション、支払い、ルールの適用、およびその他のジューシーなコードなどに使用されるサーバー側のソフトウェアです。APK で配布しないことで、貴重な資産を保護できます。代わりに、アプリからのリクエストに応答し、アセットを「使用」し (それが何を意味するにせよ)、結果をアプリに送り返すサーバーをセットアップします。考えている資産に対してこのモデルが機能しない場合は、戦略を再考する必要があります。

また、あなたの主な目的がアプリの著作権侵害を防ぐことである場合: 気にしないでください。著作権侵害対策で救われるよりも、この問題に時間とお金を費やしています。この問題を解決するための投資収益率は非常に低く、考えても意味がありません。

于 2012-12-13T08:28:23.160 に答える
97

アプリのセキュリティの最初のルール:攻撃者が無制限の物理的または電子的アクセスを取得するマシンは、実際の場所や料金に関係なく、攻撃者に帰属します。

アプリのセキュリティの2番目のルール:攻撃者が侵入できない物理的な境界を離れるソフトウェアは、コーディングに費やした時間に関係なく、攻撃者に帰属します。

3番目のルール:攻撃者が侵入できない同じ物理的境界を離れる情報は、それがあなたにとってどれほど価値があるとしても、攻撃者に帰属します。

情報技術セキュリティの基盤は、これら3つの基本原則に基づいています。真に安全な唯一のコンピューターは、金庫の中に、ファラデーの檻の中に、鋼鉄の檻の中に閉じ込められたコンピューターです。ほとんどの耐用年数をこの状態で過ごすコンピューターがあります。年に1回(またはそれ以下)、信頼できるルート証明機関の秘密鍵を生成します(カメラが置かれている部屋の隅々まで記録している多数の目撃者の前で)。

現在、ほとんどのコンピューターはこれらのタイプの環境では使用されていません。彼らは物理的に戸外に出ており、無線無線チャネルを介してインターネットに接続されています。要するに、彼らのソフトウェアと同様に、彼らは脆弱です。したがって、それらは信頼されるべきではありません。コンピュータとそのソフトウェアが有用であるために知っているか実行しなければならない特定のことがありますが、損傷を引き起こすのに十分なことを認識または実行できないように注意する必要があります(少なくともその単一のマシンの範囲外の永続的な損傷ではありません) )。

あなたはすでにこれをすべて知っていました。そのため、アプリケーションのコードを保護しようとしています。しかし、そこに最初の問題があります。難読化ツールは、人間が掘り下げようとするコードを混乱させる可能性がありますが、それでもプログラムを実行する必要があります。つまり、アプリの実際のロジックフローと、アプリが使用するデータは、難読化の影響を受けません。少しの粘り強さがあれば、攻撃者はコードの難読化を簡単に解除できます。これは、自分が見ているものが自分が探しているもの以外の何物でもない特定の場合でも必要ありません。

代わりに、攻撃者がコードの明確なコピーを取得するのがどれほど簡単であっても、攻撃者がコードに対して何もできないようにする必要があります。つまり、ハードコードされたシークレットはありません。コードが開発した建物を離れるとすぐにそれらのシークレットは秘密にならないからです。

ハードコーディングしたこれらのキー値は、アプリケーションのソースコードから完全に削除する必要があります。代わりに、3つの場所のいずれかに配置する必要があります。デバイスの揮発性メモリ。攻撃者がオフラインコピーを取得するのは困難です(ただし、それでも不可能ではありません)。サーバークラスター上に永続的に存在し、そこへのアクセスを鉄の拳で制御します。または、物理カードやユーザーのメモリなど、デバイスやサーバーに関係のない2番目のデータストアにあります(つまり、最終的には揮発性メモリになりますが、長くする必要はありません)。

次のスキームを検討してください。ユーザーは、アプリのクレデンシャルをメモリからデバイスに入力します。残念ながら、ユーザーのデバイスがキーロガーやトロイの木馬によって侵害されていないことを信頼する必要があります。この点でできる最善のことは、ユーザーが使用したデバイス(MAC / IP、IMEIなど)に関する偽造が難しい識別情報を記憶し、次の方法で少なくとも1つの追加チャネルを提供することにより、多要素セキュリティを実装することです。なじみのないデバイスでのログイン試行を確認できます。

入力されたクレデンシャルは、クライアントソフトウェアによって(安全なハッシュを使用して)難読化され、プレーンテキストのクレデンシャルは破棄されます。彼らは彼らの目的を果たしました。難読化された資格情報は、セキュリティで保護されたチャネルを介して証明書認証サーバーに送信されます。サーバーは、ログインの有効性を検証するために使用されるデータを生成するために、それらを再度ハッシュします。このように、クライアントはデータベース値と実際に比較されるものを知ることはなく、アプリサーバーは検証のために受け取るものの背後にあるプレーンテキストの資格情報を知ることはなく、データサーバーは検証のために保存するデータがどのように生成されるかを知ることはありません。真ん中は、安全なチャネルが危険にさらされたとしても、ぎこちないものしか見えません。

検証されると、サーバーはチャネルを介してトークンを送り返します。トークンは安全なセッション内でのみ有用であり、ランダムノイズまたはセッション識別子の暗号化された(したがって検証可能な)コピーで構成され、クライアントアプリケーションはリクエストの一部として同じチャネルでこのトークンをサーバーに送信する必要があります何かをするために。クライアントアプリケーションはこれを何度も実行します。これは、金銭、機密データ、またはそれ自体に損害を与える可能性のあるその他の処理を実行できないためです。代わりに、サーバーにこのタスクを実行するように依頼する必要があります。クライアントアプリケーションは、少なくともプレーンテキストではなく、デバイス自体の永続メモリに機密情報を書き込むことはありません。クライアントは、セキュリティで保護されたチャネルを介してサーバーに対称キーを要求し、サーバーが記憶するローカルデータを暗号化できます。後のセッションで、クライアントは、揮発性メモリで使用するデータを復号化するために同じキーをサーバーに要求できます。そのデータだけがコピーになるわけではありません。クライアントが保存するものはすべて、何らかの形でサーバーに送信する必要があります。

明らかに、これによりアプリケーションはインターネットアクセスに大きく依存するようになります。クライアントデバイスは、サーバーへの適切な接続とサーバーによる認証がないと、基本的な機能を実行できません。本当にFacebookと違いはありません。

さて、攻撃者が望んでいるのはあなたのサーバーです。なぜなら、クライアントアプリ/デバイスではなく、攻撃者がお金を稼いだり、他の人に彼の楽しみを苦しめたりする可能性があるからです。それで大丈夫です; すべてのクライアントを保護しようとするよりも、サーバーを保護するためにお金と労力を費やすほうがはるかに大きなメリットがあります。サーバーは、あらゆる種類のファイアウォールやその他の電子セキュリティの背後に置くことができ、さらに、鋼、コンクリート、キーカード/ピンアクセス、および24時間のビデオ監視の背後に物理的に保護することができます。攻撃者は、サーバーへのあらゆる種類のアクセスを直接取得するために、実際に非常に高度である必要があり、すぐにそれを知る必要があります。

攻撃者ができる最善のことは、ユーザーの電話と資格情報を盗み、クライアントの制限された権限でサーバーにログインすることです。これが発生した場合、クレジットカードを紛失した場合と同様に、正当なユーザーは800番に電話するように指示する必要があります(財布、財布、ブリーフケースに入れて持ち歩くカードの裏側ではなく、覚えやすいことが望ましいです。モバイルデバイスと一緒に盗まれた)アクセス可能な任意の電話から、カスタマーサービスに直接接続します。彼らは、電話が盗まれたと述べ、基本的な一意の識別子を提供し、アカウントがロックされ、攻撃者が処理できた可能性のあるすべてのトランザクションがロールバックされ、攻撃者は元の状態に戻ります。

于 2012-12-13T19:39:20.687 に答える
68

 1. Android APK のリバース エンジニアリングを完全に回避するにはどうすればよいですか? これは可能ですか?

これは不可能です

 2. アプリのすべてのリソース、アセット、ソース コードを保護して、ハッカーが APK ファイルをハッキングできないようにするにはどうすればよいですか?

誰かが .apk 拡張子を .zip に変更すると、解凍後にすべてのリソース ( Manifest.xmlを除く) を簡単に取得できますが、APKtoolを使用すると、マニフェスト ファイルの実際のコンテンツも取得できます。繰り返しますが、いいえ。

 3. ハッキングをより困難にする、または不可能にする方法はありますか? APK ファイルのソース コードを保護するには、他に何ができますか?

繰り返しますが、できませんが、ある程度までは防ぐことができます。つまり、

  • Web からリソースをダウンロードし、いくつかの暗号化プロセスを実行します
  • コンパイル済みのネイティブ ライブラリ (C、C++、JNI、NDK) を使用する
  • 常にいくつかのハッシュを実行します ( MD5 / SHAキーまたはその他のロジック)

であってもSmali、人々はあなたのコードで遊ぶことができます。全体として、それは不可能です。

于 2012-12-13T07:11:32.750 に答える
42

Android APK のリバース エンジニアリングを 100% 回避することはできませんが、次の方法を使用して、ソース コード、APK からのアセット、リソースなどのデータをさらに抽出することを回避できます。

  1. ProGuard を使用してアプリケーション コードを難読化する

  2. C および C++を使用してNDKを使用して、アプリケーションのコアとコードのセキュアな部分をファイルに配置します。.so

  3. リソースを保護するために、すべての重要なリソースを APK の assets フォルダーに含めないでください。これらのリソースは、アプリケーションの初回起動時にダウンロードしてください。

于 2012-12-13T07:07:24.350 に答える
37

開発者は次の手順を実行して、APK の盗難を何らかの方法で防ぐことができます。

  • 最も基本的な方法はProGuard、コードを難読化するツールなどを使用することですが、これまで誰かがアプリを逆コンパイルするのを完全に防ぐことは非常に困難でした。

  • また、ツールHoseDex2Jarについて聞いたことがあります。Dex2JarAndroid APK に無害なコードを挿入することで停止し、コードを混乱させて無効Dex2Jarにし、逆コンパイルから保護します。ハッカーが APK を読み取り可能な Java コードに逆コンパイルするのを何とか防ぐことができます。

  • サーバー側アプリケーションを使用して、必要な場合にのみアプリケーションと通信します。重要なデータを防ぐのに役立ちます。

潜在的なハッカーからコードを完全に保護することはできません。どういうわけか、彼らがあなたのコードを逆コンパイルするのを難しくし、少し苛立たしい作業にすることができます. 最も効率的な方法の 1 つは、ネイティブ コード (C/C++) で記述し、コンパイル済みライブラリとして格納することです。

于 2012-12-13T06:55:28.927 に答える
30

試すことができるいくつかの方法を次に示します。

  1. 難読化とProGuardなどのツールを使用します。
  2. ソースコードとデータの一部を暗号化します。
  3. アプリで独自の組み込みチェックサムを使用して、改ざんを検出します。
  4. デバッガーへの読み込みを回避するコードを導入します。つまり、アプリがデバッガーを検出し、デバッガーを終了/強制終了できるようにします。
  5. 認証をオンラインサービスとして分離します。
  6. アプリケーションの多様性を使用する
  7. デバイスを認証する前に、フィンガープリント技術(たとえば、異なるサブシステムからのデバイスのハードウェア署名)を使用します。
于 2013-01-01T15:49:48.367 に答える
25

 1. Android APK のリバース エンジニアリングを完全に回避するにはどうすればよいですか? これは可能ですか?

不可能

 2. ハッカーが APK ファイルをハッキングできないように、アプリのすべてのリソース、アセット、ソース コードを保護するにはどうすればよいですか?

不可能

 3. ハッキングをより困難にする、または不可能にする方法はありますか? APK ファイルのソース コードを保護するには、他に何ができますか?

より厳しい - 可能ですが、実際には、ハッキングガイドをグーグルで検索している平均的なユーザーにとっては、より困難になるでしょう. 誰かがあなたのアプリを本当にハッキングしたい場合、遅かれ早かれハッキングされます。

于 2012-12-13T07:04:17.243 に答える
22

 1. Android APK のリバース エンジニアリングを完全に回避するにはどうすればよいですか? これは可能ですか?

それは不可能です

 2. アプリのすべてのリソース、アセット、ソース コードを保護して、ハッカーが APK ファイルをハッキングできないようにするにはどうすればよいですか?

開発者は、ProGuard などのツールを使用してコードを難読化するなどの対策を講じることができますが、これまで、誰かがアプリを逆コンパイルするのを完全に防ぐことは非常に困難でした。

これは非常に優れたツールであり、コードのフットプリントを縮小しながら、コードを「反転」することの難しさを増すことができます。

統合された ProGuard サポート: ProGuard が SDK ツールにパッケージ化されるようになりました。開発者は、リリース ビルドの統合部分としてコードを難読化できるようになりました。

 3. ハッキングをより困難にする、または不可能にする方法はありますか? APK ファイルのソース コードを保護するには、他に何ができますか?

調べているうちに、 HoseDex2Jarについて知りました。このツールはコードを逆コンパイルから保護しますが、コードを完全に保護することはできないようです。

役立つリンクの一部を参照できます。

于 2012-12-14T05:11:14.480 に答える
21

ここでの主な質問は、dex ファイルを逆コンパイルできるかということです。dedexersmaliなどの逆アセンブラーがあります。

適切に構成されたProGuardは、コードを難読化します。ProGuard の商用拡張バージョンであるDexGuardは、もう少し役立つ可能性があります。ただし、コードを smali に変換することは可能であり、リバース エンジニアリングの経験を持つ開発者は、smali から何を行っているかを理解することができます。

おそらく、適切なライセンスを選択し、可能な限り最善の方法で法律に従って施行してください。

于 2012-12-13T07:11:26.243 に答える
10

1つのモバイル決済アプリケーション(MyCheck)を含む決済プラットフォームで広範囲に取り組んだ人として、私はあなたがこの振る舞いをサーバーに委任する必要があると言うでしょう。支払い処理業者のユーザー名またはパスワード(どちらでも)をモバイルアプリケーションに保存したり、ハードコーディングしたりしないでください。コードを難読化してもソースを理解できるので、これが最後に必要なことです。

また、アプリケーションにクレジットカードや支払いトークンを保存しないでください。ここでも、すべてを構築したサービスに委任する必要があります。また、後でPCIに簡単に準拠できるようになり、クレジットカード会社は(私たちのように)首をかしげることがなくなります。

于 2012-12-16T15:17:44.497 に答える
10

リバース エンジニアリングを (ほぼ) 不可能にしたい場合は、すべての機密情報を内部で実行し、いくつかのプロトコルと通信して、ホスト上で GUI を制御できるようにする、耐タンパー性の高いチップにアプリケーションを配置できます。改ざん防止チップでさえ、100% クラックプルーフではありません。それらは、ソフトウェアの方法よりもはるかに高い基準を設定しただけです。もちろん、これは不便です。アプリケーションには、チップをデバイスに挿入するための小さな USB イボが必要です。

この質問は、このアプリケーションを熱心に保護したいという動機を明らかにするものではありません。

アプリケーションに存在する可能性のあるセキュリティ上の欠陥 (既知またはその他) を隠すことによって支払い方法のセキュリティを向上させることが目的である場合、それは完全に見当違いです。可能であれば、セキュリティに敏感なビットは実際にオープンソースにする必要があります。アプリケーションをレビューするセキュリティ研究者がそれらのビットを見つけてその動作を精査し、あなたに連絡できるようにする必要があります。支払いアプリケーションには、組み込みの証明書を含めないでください。つまり、工場からの固定証明書があるという理由だけでデバイスを信頼するサーバー アプリケーションがあってはなりません。アプリケーション、プラットフォーム、ネットワークなどの信頼を排除する、正しく設計されたエンドツーエンドの認証プロトコルを使用して、ユーザーの資格情報だけで支払いトランザクションを行う必要があります。

その目的がクローン作成を防止することである場合、その改ざん防止チップを除いて、プログラムがリバース エンジニアリングおよびコピーされることから保護するためにできることは何もないため、誰かが互換性のある支払い方法を独自のアプリケーションに組み込み、 「不正なクライアント」に上昇します。無許可のクライアントの開発を困難にする方法があります。1 つは、プログラムの完全な状態 (すべての状態変数) のスナップショットに基づいてチェックサムを作成することです。GUI、ロジック、なんでも。クローン プログラムの内部状態はまったく同じではありません。確かに、これは同様の外部から見える状態遷移 (入力と出力で観察できる) を持つステート マシンですが、内部状態はほとんど同じではありません。サーバー アプリケーションはプログラムに問い合わせることができます。詳細な状態は何ですか? (すなわち すべての内部状態変数のチェックサムを教えてください)。これは、サーバー上で並行して実行され、本物の状態遷移を経るダミーのクライアント コードと比較することができます。サード パーティのクローンは、正しい応答を返すために、正規のプログラムの関連するすべての状態変更を複製する必要があり、これが開発の妨げになります。

于 2012-12-14T00:30:29.580 に答える
9

ここで支持された他の回答は正しいです。別のオプションを提供したいだけです。

重要と思われる特定の機能については、アプリでWebViewコントロールをホストできます。その後、機能が Web サーバーに実装されます。アプリケーションで実行されているように見えます。

于 2012-12-13T19:45:29.223 に答える
7

ここで@Muhammad Saqibに同意: https://stackoverflow.com/a/46183706/2496464

そして@Mumairは良い出発点を提供します: https://stackoverflow.com/a/35411378/474330

ユーザーのデバイスに配布するものはすべて、ユーザーのものであると想定することは常に安全です。簡潔でシンプル。最新のツールと手順を使用して知的財産を暗号化できるかもしれませんが、決定的な人物がシステムを「研究」するのを防ぐ方法はありません。そして、現在のテクノロジーで不要なアクセスを取得することが困難になったとしても、明日、あるいは 1 時間後には簡単な方法が見つかるかもしれません!

したがって、次の式が得られます。

お金に関して言えば、私たちは常にクライアントが信頼されていないと想定しています。

ゲーム内経済のような単純なものでも。(特にゲームでは! そこには「洗練された」ユーザーが多く、抜け穴は数秒で広がります!)

どうすれば安全に過ごせますか?

すべてではないにしても、ほとんどの主要な処理システム (およびもちろんデータベース) はサーバー側にあります。クライアントとサーバーの間には、暗号化された通信や検証などが存在します。これがシン クライアントの考え方です。

于 2018-01-25T10:01:50.827 に答える
5

Protect Software Applications from Attacks をご覧になることをお勧めします。商用サービスですが、友人の会社が使っていて、喜んで使ってくれています。

于 2012-12-13T08:29:14.143 に答える
4

APK ファイルのリバース エンジニアリングを完全に回避する方法はありません。アプリケーション資産、リソースを保護するために、暗号化を使用できます。

  • 暗号化すると、復号化せずに使用することが難しくなります。強力な暗号化アルゴリズムを選択すると、クラッキングが難しくなります。
  • メイン ロジックにスプーフィング コードを追加して、クラッキングを困難にします。
  • 重要なロジックを母国語で書くことができれば、逆コンパイルが確実に難しくなります。
  • Quixxiなどのサードパーティのセキュリティ フレームワークを使用する
于 2016-10-12T04:16:19.717 に答える
4

Android 7.0 (Nougat)の APK 署名スキーム v2

PackageManager クラスは、APK 署名スキーム v2 を使用したアプリの検証をサポートするようになりました。APK 署名スキーム v2 は、検証速度を大幅に改善し、APK ファイルへの不正な変更を検出することで整合性の保証を強化するファイル全体の署名スキームです。

下位互換性を維持するには、v2 署名方式で署名する前に、v1 署名方式 (JAR 署名方式) で APK に署名する必要があります。v2 署名方式では、v2 方式で署名した後に追加の証明書で APK に署名すると、検証が失敗します。

APK 署名スキーム v2 のサポートは、N Developer Preview で後で利用できるようになります。

http://developer.android.com/preview/api-overview.html#apk_signature_v2

于 2016-05-16T11:09:32.580 に答える
3
于 2015-11-26T07:17:01.853 に答える
3

基本的にはできません。それは決して不可能です。しかし、希望はあります。難読化ツールを使用して、次のような一般的な攻撃の実行がはるかに困難になるようにすることができます。

  1. メソッド/クラスの名前を変更する (したがって、逆コンパイラでは のような型を取得しますa.a)
  2. 制御フローの難読化 (そのため、逆コンパイラではコードが非常に読みにくくなります)
  3. 文字列と場合によってはリソースの暗号化

他にもあると思いますが、主なものは以上です。私は PreEmptive Solutions という会社で.NET難読化ツールを扱っています。また、Android で機能する Java 難読化ツールとDashOと呼ばれるものもあります。

ただし、難読化には常に代償が伴います。特に、パフォーマンスは通常より悪く、通常、リリースの前後に余分な時間が必要です。ただし、知的財産があなたにとって非常に重要である場合は、通常、それだけの価値があります。

それ以外の場合、唯一の選択肢は、アプリケーションの実際のロジックをすべてホストするサーバーを Android アプリケーションが通過するようにすることです。これには、ユーザーがアプリを使用するためにインターネットに接続する必要があることを意味するため、独自の問題があります。

また、この問題を抱えているのは Android だけではありません。これは、すべてのアプリ ストアの問題です。パッケージ ファイルにアクセスするのがどれだけ難しいかが問題です (たとえば、iPhone ではそれほど簡単ではないと思いますが、それでも可能です)。

于 2012-12-13T15:31:22.507 に答える
2

トラステッド プラットフォーム モジュール(TPM) チップは、保護されたコードを管理するものではありませんか?

それらは PC (特に Apple PC) で一般的になりつつあり、今日のスマートフォン チップに既に存在している可能性があります。残念ながら、それを利用するための OS API はまだありません。願わくば、Android がこの 1 日でサポートを追加することを願っています。これは、クリーンなコンテンツ DRM (Google がWebMのために取り組んでいる) の鍵でもあります。

于 2013-01-08T13:32:58.633 に答える
2

エンドユーザーの手に渡しても安全なものは何もありませんが、いくつかの一般的な慣行により、攻撃者がデータを盗むのが難しくなる場合があります.

  • メイン ロジック (アルゴリズム) をサーバー側に置きます。
  • サーバーおよびクライアントと通信します。サーバーとクライアント間の通信が SSL または HTTPS で保護されていることを確認します。または、鍵ペア生成アルゴリズム ( ECCおよびRSA )に他の手法を使用します。機密情報がエンドツーエンドで暗号化されたままであることを確認します。
  • セッションを使用し、特定の時間間隔後に期限切れにします。
  • リソースを暗号化し、オンデマンドでサーバーからフェッチします。
  • または 、サーバー上のリソースとコードの保護を介してシステムにアクセスするハイブリッドアプリを作成できます webview

複数のアプローチ; これは、パフォーマンスセキュリティの間で犠牲にしなければならないことは明らかです。

于 2016-02-15T14:02:10.613 に答える
1

アプリのすべてのリソース、アセット、ソース コードを保護して、ハッカーが APK ファイルをハッキングできないようにするにはどうすればよいですか?

APK ファイルはSHA-1アルゴリズムで保護されています。APKのMETA-INFフォルダーにいくつかのファイルが表示されます。APK ファイルを抽出し、その内容を変更して再度圧縮すると、その新しい APK ファイルを Android マシンで実行しても、SHA-1 ハッシュが一致しないため、機能しません。

于 2012-12-19T05:16:36.047 に答える
0

携帯電話にアプリがあれば、アプリのメモリに完全にアクセスできます。したがって、ハッキングされないようにしたい場合は、デバッガーを使用して静的メモリアドレスを直接取得できないようにすることができます。書き込む場所があり、制限がある場合、スタック バッファ オーバーフローが発生する可能性があります。彼らが何かを書くとき、制限が必要な場合、制限よりも多くの文字を送信する場合、(入力>制限)の場合は無視するようにしてください。アセンブリコードをそこに置くことはできません。

于 2015-09-03T09:58:58.240 に答える
-1

上記のすでに良い回答への追加です。

私が知っているもう 1 つのトリックは、貴重なコードを Java ライブラリとして保存することです。次に、そのライブラリを Android プロジェクトに設定します。C .so ファイルとしては適切ですが、Android Lib で十分です。

このようにして、Android ライブラリに保存されているこれらの貴重なコードは、逆コンパイル後に表示されなくなります。

于 2013-04-05T05:44:48.363 に答える
-3

基本的に、APK ファイルを保護するには 5 つの方法があります。

  1. Java プログラムを分離し、
  2. クラスファイルの暗号化、
  3. ネイティブコードに変換、
  4. コードの難読化
  5. オンライン暗号化

安全で便利なオンライン暗号化を使用することをお勧めします。これを達成するために多くの時間を費やす必要はありません。

APK プロテクトなど。これは、APK のオンライン暗号化 Web サイトです。Java コードと C++ コードを保護して、アンチデバッグと逆コンパイルの効果を実現します。操作プロセスはシンプルで簡単です。

于 2013-07-16T07:25:11.907 に答える