質問: apkファイルのリバースエンジニアリングを回避する方法 android用に支払い処理アプリケーションを開発しています。ハッカーが _ apk _ ファイルからリソース、アセット、またはソースコードにアクセスできないようにします。 。誰かが.apk拡張子を.zipに変更すると、それを解凍してアプリケーションのすべてのリソースとアセットに簡単にアクセスでき、 dex2jar とjavaデコンパイラを使用してソースコードにもアクセスできます。 android apkファイルをリバースエンジニアリングするのは非常に簡単です。詳細については、stack overflow questionを参照してください。 apkファイルからプロジェクトへのリバースエンジニアリング 。android sdkに付属のproguardツールを使用しました。署名付きキーストアとproguardを使用して生成されたapkファイルをリバースエンジニアリングすると、難読化されたコードが生成されます。ただし、androidコンポーネントの名前は変更されておらず、アプリで使用されているkey-valueなどのコードも変更されていません。 proguardのドキュメントによると、このツールはマニフェストファイルに記載されているコンポーネントを難読化することはできません。今私の質問は次のとおりです。 どうすればandroid apkのリバースエンジニアリングを完全に防ぐことができますか?これは可能ですか? ハッカーがapkファイルをハッキングできないように、アプリのすべてのリソース、アセット、およびソースコードを保護するにはどうすればよいですか。 ハッキングをさらに困難に、または不可能にさえする方法はありますか?apkファイルのソースコードを保護するために、さらに何ができますか?
回答: 私の知るところでは、/ resディレクトリ内のファイルは、現在保護されている以上に保護することはできません。しかしながら、あなたのソースコードを保護するためにあなたが取ることができるステップ、または少なくともそれがすべてではないにしても何ができるかがあります。 proguardなどのツールを使用してください。不可能ではないにしても、これらはあなたのコードを難読化し、逆コンパイル時に読みにくくします。 サービスの最も重要な部分をアプリの外に移動し、phpのようなサーバー側の言語の背後に隠れているwebサービスに移動します。例えば、あなたが書くのにあなたが百万ドルを要するアルゴリズムを持っているならば。あなたは明らかに他の人があなたのアプリからそれを盗んで欲しくはありません。アルゴリズムを移動してリモートサーバー上のデータを処理し、アプリを使用してデータを単純に提供します。あるいは、ndkを使用してネイティブに.soファイルに書き込むこともできます。これは、apksよりも逆コンパイルされる可能性がはるかに低いです。私は、.soファイル用のデコンパイラーが今のところ存在しているとは思わない(そして、たとえそれが存在したとしても、それはjavaデコンパイラーほどには良くない)。さらに、コメントで@nikolayが述べたように、サーバーとデバイス間でやり取りするときはsslを使用する必要があります。 デバイスに値を保存するときは、生のフォーマットで保存しないでください。たとえば、あなたがゲームを持っていて、ユーザーが持っている金額をゲーム通貨でsharedpreferencesに保存しているとします。それが10000コインだと仮定しましょう。直接10000を保存する代わりに、((currency*2)+1)/13のようなアルゴリズムを使用して保存してください。そのため、10000の代わりに、1538.53846154をsharedpreferencesに保存します。しかし、上の例は完璧ではありません、そして丸め誤差などに通貨を失うことのない方程式を考え出すためにあなたは努力しなければなりません。 サーバーサイドのタスクについても同様のことができます。例として、実際にあなたの支払い処理アプリを取りましょう。ユーザーが$200の支払いをしなければならないとしましょう。生の$200値をサーバーに送信する代わりに、合計で$200になる一連の小さい事前定義済みの値を送信します。たとえば、サーバー上にファイルとテーブルを配置して、単語と値を同じものにします。 charlieは$47に、johnは$3にそれぞれ対応するとしましょう。そのため、$200を送信する代わりに、charlieを4回、johnを4回送信することができます。サーバー上で、それらが意味するものを解釈し、それを合計します。これは、どのwordがどの値に対応しているのかわからないため、ハッカーがサーバーに任意の値を送信するのを防ぎます。追加のセキュリティ対策として、これについてもポイント3と同様の式を使用し、n日数ごとにキーワードを変更できます。 最後に、ハッカーが干し草の山の中で針を探しているように、ランダムな無駄なソースコードをアプリに挿入することができます。インターネットからの断片を含むランダムなクラスを挿入するか、あるいはフィボナッチ数列のようなランダムなものを計算するための関数だけを挿入します。これらのクラスがコンパイルされていることを確認してください。ただし、アプリの実際の機能では使用されません。これらの偽のクラスを十分に追加すると、ハッカーはあなたの本当のコードを見つけるのに苦労するでしょう。 全体として、アプリを100%保護する方法はありません。難しくすることはできますが、不可能ではありません。あなたのwebサーバは危険にさらされるかもしれません、ハッカーは複数の取引金額とあなたがそれのために送るキーワードを監視することによってあなたのキーワードを見つけることができます.あなただけが反撃することができますが、決して勝つことはできません。