I.はじめに
Android のリバース分析中に、署名アルゴリズムがネイティブ層にある場合がありますが、署名アルゴリズムを呼び出したい場合は、次の 3 つの方法を使用できます。
(1)フック関連機能: フックはリバース エンジニアリングで最も一般的に使用されますが、コンピューター側では仮想マシン全体に対応するアプリをインストールする必要があり、大量のメモリを消費し、場合によってはアプリがクラッシュすることがあります。 、携帯電話側でもアプリをインストールする必要があり、複数のソフトをひっかける必要があるとメモリも大変です。
(2) so ファイルを反転する: IDA を使用して so ファイルを反転するには、暗号化関数を見つけ、アセンブリと C コードを理解する必要があり、作業負荷が非常に高くなります。
(3) so ファイルの呼び出し:逆コンパイル技術を通じて署名関数を見つけ、ネイティブ メソッドを定義するクラスを見つけ、使用する so ファイルを決定し、so ファイルを自分のプロジェクトに移植し、いつでも呼び出して、複数の so ファイルを統合します。ファイル、メモリ占有量が少なく、安定性が高いです。
2. テキスト
このチュートリアルでは、so ファイルを呼び出す方法を紹介します。次の 2 つの方法があります。
1.Androidアプリ
逆コンパイル ツール jadx を使用して署名関数を検索して見つけ、ネイティブ メソッドを定義するクラスの検索を続け、使用される so ファイルを特定し、いつでも呼び出すことができる独自のアプリに so ファイルを移植します。
(1) 対象のアプリを解凍し、lib フォルダーで対象の so ファイルを見つけ、その so ファイルをアプリ プロジェクトの libs ディレクトリにコピーします。
(2) App プロジェクトにシグネチャ クラスを作成します(特定のネイティブメソッド定義は逆コンパイル テクノロジを通じて取得されます)。パッケージ名とクラス名は元の App と一致している必要があり、そうでない場合は呼び出されないことに注意してください。たとえば、libNativeHelper.soを呼び出すクラスは次のように定義されます。
package com.xxxxx.helpers;
public class AppNativeHelper {
public static native int applyPatch(String str, String str2, String str3);
public static final native String desCbcDecrypt(String str);
public static final native String desCbcEncrypt(String str);
public static final native String getDailySignApi(String str);
public static final native String getFileMd5(String str);
public static final native String getMd5(String str);
public static final native String getServerApi(String str);
public static native int makePatch(String str, String str2, String str3);
public static final native String tokenDecrypt(String str);
public static final native String tokenEncrypt(String str);
public static native void uninstall(String str, int i, String str2, boolean z);
static {
try {
System.loadLibrary("NativeHelper");
} catch (Exception e) {
e.printStackTrace();
}
}
}
(3) 必要に応じて関連者を直接呼び出すだけです
String sign = AppNativeHelper.getServerApi("123456");
利点:複数の so ファイルを独自の APP に統合できるため、占有メモリ量が少なく安定性が高く、LAN 内のユーザー向けのシンプルな署名サービスを構築できます。
短所:アプリを開発するには Android Studio の開発経験が必要です。
2.jarパッケージ
(1) JDK 環境で署名クラスを作成し、最後にそれを jar パッケージにパッケージ化します。
(2) so ファイルをシステムの lib または lib64 ファイルの下に置きます。
(3) jar パッケージ内のクラスを呼び出すだけです。
利点: Linux カーネルシステム上で実行でき、他のプログラミング言語も呼び出すことができ、高い汎用性を備えています。
欠点:一部のアプリはARMアーキテクチャの so ファイルのみを提供しており、 x86アーキテクチャの PC では呼び出すことができません。
3. 結論
上記のチュートリアルは、検証メカニズムのない so ファイルを対象としています。一部の so ファイルは、アプリのパッケージ名と署名を検証します。検証が失敗した場合、呼び出されません。時間があるときに、so ファイルの署名検証チュートリアルを作成してください。
このチュートリアルは、あなた自身のニーズと経験に基づいて書かれています。参照と学習のみを目的としています。不備がある場合は修正してください。一緒に議論し、交換するパートナーを歓迎します。