Xpose 初探

Xpose 初探

github地址:https://github.com/rovo89/XposedInstaller

1:新建项目

新建工程XposeTest .修改manifest.xml

``

复制代码
<meta-data android:name="xposedmodule" android:value="true"></meta-data>
<meta-data android:name="xposeddescription" android:value="我是个test111"></meta-data>
<meta-data android:name="xposedminversion" android:value="30"></meta-data>

2:添加依赖

``

复制代码
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'

注意:这里不要使用implementation。

3:添加测试代码

``

复制代码
public class MainActivity extends AppCompatActivity {
    private TextView tvDesc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvDesc=findViewById(R.id.tv_desc);
        tvDesc.setText("我是test");
    }
}

4:编写hook代码

新建HookModule类,继承IXposedHookLoadPackage,实现 handleLoadPackage方法。

测试实现效果:找到对应的按钮,替换文案。

``

复制代码
public class HookModule implements IXposedHookLoadPackage {

    public static final String TAG = "HookModule";

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        Log.e(TAG, "handleLoadPackage");
        XposedHelpers.findAndHookMethod("com.zh.xpose.MainActivity", lpparam.classLoader, "onCreate", Bundle.class, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                Log.e(TAG, "handleLoadPackage beforeHookedMethod ");
            }

            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                Log.e(TAG, "handleLoadPackage afterHookedMethod ");
                Class<?> aClass = lpparam.classLoader.loadClass("com.zh.xpose.MainActivity");
                Field field = aClass.getDeclaredField("tvDesc");
                field.setAccessible(true);
                TextView tvDesc = (TextView) field.get(param.thisObject);
                tvDesc.setText("我是hook后的test");
            }
        });
    }
}

5:运行

安装成功后会提示Xpose未激活,点击激活Xpose,选择某个应用,强制停止后重启该应用,会发现demo中的文案已经被替换了。

相关推荐
mmsx30 分钟前
Android 新闻资讯客户端实战:从零搭建一个完整的新闻 App
android·app·源码
三8442 小时前
PHP 绕过污点追踪构造 Webshell:反序列化引用复用与 Trait 可变函数 RCE
android
石头猫灯2 小时前
WordPress wp2shell漏洞断点逐过程到注入点
android·学习
Android打工仔3 小时前
Kotlin 协程源码解析(五):BaseContinuationImpl.resumeWith() —— Continuation 链是如何被展开的?
android·kotlin
存在morning4 小时前
【PySpark 学习笔记 三】DataFrame API 入门
android·java·数据库
YSoup4 小时前
2026 安卓面试助手APP(安卓八股、题库)
android·面试·职场和发展
xcyxiner4 小时前
flutter 运行到模拟器上
android·前端·flutter
Android-Flutter4 小时前
android Glide 源码流程分析
android·kotlin
Android-Flutter5 小时前
android Glide 使用详解
android·kotlin
恋猫de小郭5 小时前
Dart 3.13 的到底改了什么?为什么很重要?有什么坑?
android·前端·flutter