私の会社の成功したアプリの 1 つが torjan として再パッケージ化され、サードパーティの市場 (Google Play 以外) に配布されたようです。将来、このような問題からアプリを保護する堅牢なソリューションを探しています。
これまでのところ、私は見てきました:
しかし、どちらも包括的なソリューションを提供しているようには見えません。
アイデアはありますか?
私の会社の成功したアプリの 1 つが torjan として再パッケージ化され、サードパーティの市場 (Google Play 以外) に配布されたようです。将来、このような問題からアプリを保護する堅牢なソリューションを探しています。
これまでのところ、私は見てきました:
しかし、どちらも包括的なソリューションを提供しているようには見えません。
アイデアはありますか?
あなたはそれを間違った視点から見ていると思います。正確なケースについてはわかりませんが、通常、再パッケージ化されたアプリは「リバースエンジニアリング」されていません。つまり、マルウェアの男はアプリの内部についてほとんど心配していません。トロイの木馬は、アプリケーションのエントリポイントに追加するだけで済みます。その場合、トロイの木馬が実行され、アプリケーションの実行に進みます。このような場合、難読化はアプリケーションの速度を低下させる以外には何もしません。
基本的に、APK をクラッキング/リバース/再パッケージから保護する方法は 5 つあります。
1.Java プログラムの分離
最も簡単な方法は、ユーザーが Java クラス プログラムにアクセスできないようにすることです。これは最も基本的な方法であり、これを実現するためのさまざまな具体的な方法があります。たとえば、開発者はキー Java クラスをサーバーに配置できます。クライアントは、クラス ファイルに直接アクセスするのではなく、サーバーの関連するインターフェイスにアクセスしてサービスを取得します。そのため、ハッカーがクラス ファイルを逆コンパイルする方法はありません。現在、HTTP、Web サービス、RPC などのインターフェースを介して提供される標準およびプロトコル サービスがますます増えています。しかし、多くのアプリケーションはこの保護に適していません。たとえば、スタンドアロン プログラムの Java プログラムは分離できません。
2.クラスファイルの暗号化
クラス ファイルが直接逆コンパイルされるのを防ぐために、多くの開発者は、登録番号、シリアル番号管理、およびその他の関連クラスなど、いくつかの重要なクラス ファイルを暗号化します。これらの暗号化されたクラスを使用する前に、プログラムはまずこれらのクラスを復号化し、次にこれらのクラスを JVM にロードする必要があります。これらのクラスは、ハードウェアまたはソフトウェアで復号化できます。
開発者は、カスタム化された ClassLoader クラスを介して暗号化クラスをロードすることがよくあります (アプレットは、セキュリティ上の理由からカスタム化された ClassLoader をサポートしていません)。Customed ClassLoader は、最初に暗号化クラスを見つけてから復号化します。最後に、復号化されたクラスを JVM にロードします。Customed ClassLoader は、この保護メソッドで非常に重要なクラスです。それ自体は暗号化されていないため、ハッカーの最初の標的になる可能性があります。関連する復号化キーとアルゴリズムが克服された場合、暗号化されたクラスは簡単に復号化できます。
3.ネイティブコードに変換
プログラムをネイティブ コードに変換することも、逆コンパイルを防ぐ効果的な方法です。ネイティブ コードは逆コンパイルが難しいことが多いためです。開発者は、アプリケーション全体をネイティブ コードに変換することも、主要なモジュールのみを変換することもできます。モジュールの重要な部分だけを変換すると、Java プログラムがこれらのモジュールを使用するときに呼び出す JNI テクノロジが必要になります。この方法を使用して Java プログラムを保護する場合、Java のクロスプラットフォーム機能を放棄しました。異なるプラットフォームでは、異なるバージョンのネイティブ コードを維持する必要があります。これにより、ソフトウェア サポートとメンテナンスの作業負荷が増加します。ただし、一部の主要なモジュールでは、このソリューションが必要になることがよくあります。これらのネイティブ コードが変更または置換されないことを保証するために、開発者は多くの場合、これらのコードにデジタル署名する必要があります。これらのネイティブ コードを使用する前に、開発者は、多くの場合、これらのローカル コードを認証して、これらのコードがハッカーによって変更されていないことを確認する必要があります。署名チェックに合格すると、開発者は関連する JNI メソッドを呼び出すことができます。
4.コードの難読化
コードの難読化とは、Class ファイルを再編成して処理し、処理されたコードが処理されていないコードと同じ機能 (セマンティクス) を達成するようにすることです。しかし、難読化されたコードは逆コンパイルが困難です。つまり、逆コンパイルされたコードは非常に理解しにくいため、逆コンパイル スタッフは実際のセマンティクスを理解するのが困難です。理論的には、ハッカーに十分な時間があれば、難読化されたコードもクラックされる可能性があります。難読化解除ツールを開発している人もいます。しかし、実際の状況から、難読化の多様な開発、難読化理論の成熟により、難読化された Java コードは逆コンパイルを十分に防ぐことができます。
5.オンライン暗号化
APK プロテクト ( http://www.apkprotect.com/ ) は、APK のオンライン暗号化 Web サイトです。Java コードと C++ コードを保護して、アンチデバッグと逆コンパイル効果を実現します。操作プロセスはシンプルで簡単です。
時間を節約できるので、この最後の方法を使用することをお勧めします。私はもう試した。操作はとても簡単で、時間もかかりません。