Android は、他のアプリケーション コードとメソッド呼び出しのフックを実装します (root なし)

前回はrootを使わずに他のアプリケーションの内部データをコピーする話でしたが、今回はrootを使わずに対象のアプリケーションのプロセスに直接アクセスしてフックする話です このクロスプロセスフックの原理はdexインジェクションとリソースファイルによるものです変更を達成すること。

まず Android Studio でモジュールを作成し、モジュール内でアクティビティを作成し、アクティビティの onCreate メソッドにテスト コードを追加します。例: Toast の現在のパッケージ名:

Toast.makeText(appContext, this.getPackageName(), Toast.LENGTH_SHORT).show();

次に、apk をコンパイルして生成し、winRAR で開き、中の class.dex ファイルをドラッグして、WeChat.apk などのテスト用のホスト アプリケーションを見つけます。winRAR を使用して WeChat.apk を開き、内部の dex ファイルを確認します。複数の dex ファイルがある場合は、dex ファイルの最大数を確認してください。12 の場合は、dex の名前を、最大値に 1 を加えたclasses13.dex に変更し、dex ファイルを WeChat apk にドラッグします。それをWeChatの一部にします。

2 番目のステップは、一時プロジェクトを構築し、それに実行コードを追加することです。まず、arsclib ライブラリをインポートし、次にそのコードを使用して WeChat APK のリソース構成ファイル AndroidManifest を変更し、先ほどモジュールに Activity ステートメントを追加して、 true にエクスポートされました:

<activity android:name="com.plugin.test.TestActivity"
            android:exported="true" />

            
メインのコードは次のとおりです。

ApkModule module = ApkModule.loadApkFile(new File("/sdcard/微信.apk"));
AndroidManifestBlock manifestBlock = module.getAndroidManifestBlock();
ResXmlElement applicationElement = manifestBlock.getApplicationElement();
ResXmlElement activityElement = manifestBlock.getOrCreateActivity("com.plugin.test.TestActivity", false);
ResXmlAttribute exportedAttr = activityElement.getOrCreateAndroidAttribute("exported", android.R.attr.exported);
exportedAttr.setValueAsBoolean(true);

一度だけ起動することを避けるために、launcherMode を singleInstance に設定することができます。singleTask を設定すると、毎回ルート アクティビティが開かれるようになります。

ResXmlAttribute launcherModeAttr = activityElement.getOrCreateAndroidAttribute("launcherMode", android.R.attr.launchMode);
launcherModeAttr.setTypeAndData(ValueType.DEC, 3); //singleInstance


        
最後に、一時プロジェクトでアクティビティを開始するコードを追加します。

Intent intent = new Intent();
intent.setClassName("com.tencent.mm", "com.plugin.test.TestActivity");
startActivity(intent);

上記のコードを実行すると独自のアクティビティが開始されますが、実際には WeChat アプリが開始されるため、出力されるパッケージ名は WeChat パッケージ名になります。このアクティビティでは、WeChat プロセスへのアクセス、その動作の監視、エージェントのセットアップなど、独自のことをいくつか実行できます。ただし、この方法には、モジュールのコードを変更するたびに対象アプリケーションを再パッケージ化し、再署名してインストールする必要があるという欠点があり、この問題を解決する方法がプラグイン モードを使用することです。ターゲット アプリケーションはロード コードをいくつか置くだけで、モジュールは外部に配置されます。同じ原則がターゲット ロード モジュールと WalxPlugin プラグインにも適用されます。具体的な実装方法については
「WalxPlugin Root-free Frameworkの使い方の詳細解説とサンプルコード」の記事をご覧ください。

以下は、WeChat メイン インターフェイス コントロールの取得されたリストです。

 

おすすめ

転載: blog.csdn.net/zzmzzff/article/details/131553201