手机android12 Redmi Note 9 手机已经root
2024年最新版本androidstudio
新建Native C++ 项目
项目结构如下
1.项目查看方式设置为Project模式,以方便查看。然后在 “项目名称/app/src/main/”目录下找到AndroidManifest.xml,双击之,并在指定位置插入以下三段代码:
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="这是一个Xposed例程" />
<meta-data
android:name="xposedminversion"
android:value="53" />
2. MainActivity类:
pacge com.roysue.mhook430; import android.view.View; import androidx.appcompat.app.AppCompatActivity; import android.widget.Button; import android.os.Bundle; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Toast.makeText(MainActivity.this, toastMessage(), Toast.LENGTH_SHORT).show(); } }); } public String toastMessage() { return "我未被劫持"; } }
3 . XposedBridgeApi-89.jar jar包,手动导入到libs目录里
以下地址下载jar包
GitHub - 924587628/XposedBridgeAPI: 可利用Xposed框架实现拦截系统方法
4. 在 “项目名称/app/src/main/”目录下找到build.gradle
compileOnly fileTree('libs/XposedBridgeAPI-89.jar')引入 XposedBridgeApi-89.jar
build.gradle 完整配置: plugins { id 'com.android.application' } android { namespace 'com.roysue.mhook430' compileSdk 34 defaultConfig { applicationId "com.roysue.mhook430" minSdk 31 targetSdk 34 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { //https://github.com/924587628/XposedBridgeAPI // 引用本地jar文件 compileOnly fileTree('libs/XposedBridgeAPI-89.jar') //compileOnly 'de.robv.android.xposed:api:82' // compileOnly 'de.robv.android.xposed:api:82:sources' // implementation files('libs/XposedBridge.jar') implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.11.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }
5. hook类 HookTest
package com.roysue.mhook430; import android.view.View; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; public class HookTest implements IXposedHookLoadPackage { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { if (loadPackageParam.packageName.equals("com.roysue.mhook430")) { XposedBridge.log(" has Hooked!"); Class clazz = loadPackageParam.classLoader.loadClass( "com.roysue.mhook430.MainActivity"); XposedHelpers.findAndHookMethod(clazz, "toastMessage", new XC_MethodHook() { protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); //XposedBridge.log(" has Hooked!"); } protected void afterHookedMethod(MethodHookParam param) throws Throwable { param.setResult("你已被劫持"); } }); } } }
6. xposed入口文件:
右键点击 “main ” 文件夹 , 选择new --> Folder -->Assets Folder,新建assets 文件夹:
然后右键点击 assets文件夹, new--> file,文件名为xposed_init 并在其中写上入口类的完整路径(就是自己编写的那一个Hook类),这样, Xposed框架就能够从这个 xposed_init 读取信息来找到模块的入口,然后进行Hook操作了
com.roysue.mhook430.HookTest
7. 项目打包apk
adb install Mhook430
8. 在手机上打开LSPosed软件 Mhook430未启用前
9. 在手机上打开LSPosed软件 Mhook430启用后
好了,宝子们,教程结束了,我们下期再见!