ホームページ  >  記事  >  運用・保守  >  Android APPの逆解析および保護メカニズムとは何ですか?

Android APPの逆解析および保護メカニズムとは何ですか?

WBOY
WBOY転載
2023-05-20 16:20:351569ブラウズ

Android アプリの一般的な保護方法と、それに対応する逆分析方法を知りたいですか?

この共有では、難読化されたコード、全体的な Dex 強化、分割 Dex 強化、仮想マシンの強化など、Android APP セキュリティの複数の側面について説明します。これらのコンテンツは、近年中国における Android アプリのセキュリティ保護の大きなトレンドとなっています。

1. 難読化されたコード

Java コードは逆コンパイルが非常に簡単で、クロスプラットフォームのインタープリタ型言語として、Java ソース コードは中間の「バイトコード」にコンパイルされ、クラス ファイルに保存されます。クロスプラットフォームである必要があるため、これらのバイトコードには大量のセマンティック情報が含まれており、簡単に Java ソース コードに逆コンパイルできます。開発者は、Java ソース コードの保護を強化するために、コンパイルされたクラス ファイルを難読化することがよくあります。

難読化とは、公開されたプログラムを再編成して処理し、処理されたコードが前処理されたコードと同じ機能を完了するようにすることです。難読化されたコードは逆コンパイルが難しく、逆コンパイルが成功したとしても、非常に困難になります。プログラムの本当のセマンティクスを理解するのは困難です。 ProGuard は、バイトコードを難読化、削減、最適化できるオープンソース プロジェクトです。

Proguard の処理フローチャートを以下に示します。圧縮、最適化、難読化、事前チェックの 4 つの主要なリンクが含まれています。

Android APPの逆解析および保護メカニズムとは何ですか?

圧縮 (縮小): コード内の不要なクラス、フィールド、メソッド、および属性 (属性) を検出して削除します;

最適化 (最適化): バイトコードを最適化し、不要な命令を削除します。コードを最適化します。非エントリ ノード クラスは private/static/final で追加され、未使用のパラメータは削除され、一部のメソッドはインライン コードになる可能性があります。

難読化: a、b、c、d などを使用します。短く無意味な名前、クラス、フィールド、メソッドの名前変更;

プリフライト (Preveirfy): Java プラットフォーム上で処理されたコードをプリフライトして、ロードされたクラス ファイルが実行可能であることを確認します。

共有の中で、Zhong Yaping は、Proguard を使用して Dex2jar を逆コンパイルした後の APK 効果の例を示しました。

Android APPの逆解析および保護メカニズムとは何ですか?
Proguard 処理後

Android APPの逆解析および保護メカニズムとは何ですか?

#Proguard 難読化ツールは、コードを保護するだけでなく、コンパイルされたプログラムのサイズを合理化し、メモリ使用量を削減することもできます。

難読化されたコードの逆解析

Zhong Yaping は、統計的手法を使用してコードを逆コンパイルするための難読化を解除する DEGUADR という外部ツールを共有しました。このツールの精度は 100% ではありませんが、コードの逆コンパイルに部分的には役立ちます。

Android APPの逆解析および保護メカニズムとは何ですか?

DEGUADR を使用して難読化を解除する例:


Android APPの逆解析および保護メカニズムとは何ですか?

com.xxxxx。 common.util.CryptoUtil Web サイトでは、以下に示すように、逆コンパイル サービスも提供しています:

java.lang.String a(byte[]) -> encodeToStringjava.lang.String a(byte[],boolean,java.lang.String) -> a byte[] a(byte[],byte[]) -> encrypt byte[] b(byte[]) -> getKey byte[] b(byte[],byte[]) -> decrypt byte[] d(java.lang.String) -> getKey java.lang.String a(byte,char[]) -> a java.lang.String a(java.io.File) -> getHash java.lang.String a(java.lang.String) -> c java.lang.String b(java.lang.String) -> encode
2. 全体的な Dex 強化

セキュリティ技術の継続的な開発に伴い、新しい「強化技術」が登場しました。 Androidの保護強度を強化します。 DEX 強化とは、DEX ファイルが静的逆コンパイル ツールによってクラックされ、ソース コードが漏洩するのを防ぐために、DEX ファイルをパックして保護することです。最初に登場するのは、全体的な強化テクノロジ ソリューションです。

Android APPの逆解析および保護メカニズムとは何ですか?

全体的な強化テクノロジーの原理は上に示したとおりで、application/classes.dex の置き換え、元のclasses.dex の復号化/動的ロード、元のアプリケーション関連のメソッド。元のアプリケーションのオブジェクト/名前をシステム内の関連する変数に設定します。最も重要な手順は、元のclasses.dexを復号化/動的にロードし、コンパイルされた最終的なdexソースコードファイルを暗号化してから、新しいプロジェクトでのアプリケーションの起動を使用して元のプロジェクトコードを復号化してメモリにロードすることです。その後、現在のプロセスが復号化されたコードに置き換えられます。これにより、ソース コードが適切に隠蔽され、直接の逆コンパイルが防止されます。

全体的な Dex 強化逆分析

全体的な Dex 強化逆分析には 2 つの一般的に使用される方法があります。 1 つは、メモリ内で dex\n035 を激しく検索してダンプすることです。以下は、32 ビット システムでの影響の例です。

Android APPの逆解析および保護メカニズムとは何ですか?

もう 1 つの方法は、HookdvmDexFileOpenPartial(void* addr, int len, DvmDex**) を使用することです。 。

3. Split Dex の強化

ビジネス規模がある程度大きくなると、新しい機能や新しいクラスライブラリがどんどん追加され、コードが急速に拡大する一方で、対応する apk パッケージのサイズも大きくなります。急速な増加に伴い、単純な全体補強ソリューションではセキュリティ要件を十分に満たすことができなくなり、全体補強ソリューションに加えて、分割補強技術ソリューションが登場しました。

Android APPの逆解析および保護メカニズムとは何ですか?

ただし、上で示したように、dex ファイルが強化されると、欠落しているデータの一部が復号化されたデータに置き換えられます。不正確なデータにつながります。どのタイプのデータを分割するかを決定するには、dex ファイルのデータ構造を理解する必要があります。

Dex ファイルの構造は非常に複雑です。次の図は、より重要な内容を抜粋したものです。実際、dex ファイルはクラスを核として組み立てられたファイルです。最も重要な部分は、独自のインターフェイスと命令データを持つクラスデータとクラスコードです。この 2 つの部分を分割することを選択すると、たとえ分割したとしても、クラスデータやバイトコードデータが漏洩することはなく、逆コンパイルも完了しないため、セキュリティが高いです。

Android APPの逆解析および保護メカニズムとは何ですか?

Dex分割強化の逆解析

Dex分割強化の逆解析は、以下のようにclassdataに置き換えてアセンブルすることができます。新しい dex ファイルは元の dex ファイルと完全に一致するわけではありませんが、分割されたデータの外観もある程度復元されます。

Android APPの逆解析および保護メカニズムとは何ですか?

#可能な場合は使用を避けてみてください。必要な場合でも、このクラスが使用されている場合にのみ復元してみてください。

さらに、dexhunter と呼ばれる下位レベルのツールがあります。このツールはより前衛的ですが、いくつかの制限もあります。たとえば、一部の命令データが最適化され、その結果のコード インターフェイスは次のようになります。あまり美しくないなど。

仮想マシンの強化の硬化。以下は、仮想マシンによって強化された従来の Android システム コードです。Android APPの逆解析および保護メカニズムとは何ですか?

、 mul-int v0、v1、v2 を実行して強化コンパイルを実行します。データは復元され、追加されません-int v0、v1、v2、sub-int 3 つの命令 v0、v1、v2、mul-int v0、v1、v2 が置き換えられ、強化されてコンパイルされます。置き換えたデータを復元する場合、以前のバイトコードに変換されないため、安全率が高くなります。

仮想マシン強化逆分析 - HOOK JNI インターフェイス

この方法での逆分析は、一方では HOOK JNI インターフェイスを通じて実装でき、実装方法は 2 つあります。

Android APPの逆解析および保護メカニズムとは何ですか?1 つは、クラス メンバー/静的変数の操作に関連するインターフェイスです。例:

GetStaticDoubleFieldSetStaticDoubleField GetDoubleField SetDoubleField …

(byte, object, int,long…) )

2 つ目は、次のような呼び出しクラス メソッドを反映することです。

CallVoidMethodACallBooleanMethodA CallShortMethodA CallObjectMethodA…

CallStaticVoidMethodACallStaticBooleanMethodA CallStaticShortMethodA CallStaticObjectMethodA…

(byte, int, long, double …)

CallObjectMethodA(JNIEnv* env, jobject オブジェクト, jmethoID メソッド, …)

仮想マシンの実現HOOKJNI インターフェイスによるリバース エンジニアリングの強化 分析

HOOK JNI インターフェイスを使用すると、基礎となるリバース エンジニアリングを必要とせずに、APP の一般的な呼び出しプロセスを理解できます。ただし、複雑な呼び出しプロセスの場合、または多数の仮想化メソッドがある場合、この逆分析方法はわかりにくいように見えます。算術演算や論理演算など、実行のために Java 層に反映する必要がない命令の場合、監視できません。

仮想マシンの強化逆分析 - 命令オペコード マッピングの分析

一方、命令オペコード マッピングを分析することによって逆分析を実行することもできます。同じ強化バージョンまたはマッピング関係を使用する場合は、次の方法を使用できます:

Android APPの逆解析および保護メカニズムとは何ですか?


Android APPの逆解析および保護メカニズムとは何ですか?## オペレーティング コードに依存しないこのマッピング関係は、仮想マシンの構造にのみ関連するため、次のことを確立する必要があります。オフセット関係に基づいてマッピング関係を作成し、逆解析を実行します。


以上がAndroid APPの逆解析および保護メカニズムとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。