Lsposed模块原理详解

Lsposed 是一个基于 Riru 框架的 Xposed 兼容实现,它允许在 Android 设备上动态修改应用程序的行为,而无需直接修改 APK 文件或系统文件。Lsposed 通过 Hook 目标应用的 Java 层方法,使开发者能够在不影响系统稳定性的情况下对应用程序进行修改。


目录

Lsposed 的工作原理

1. 依赖于 Riru 实现进程内 Hook

2. Xposed 兼容性

Lsposed 的核心组件

1. Riru 框架

2. Lsposed Manager

3. Xposed API

Lsposed Hook 过程

Lsposed 的优势

Lsposed 与传统 Xposed 的区别

Lsposed 示例代码

如何使用

结论



 

Lsposed 的工作原理

1. 依赖于 Riru 实现进程内 Hook

Lsposed 依赖于 Riru,它是一个 Magisk 模块,允许修改 Android 进程的 Zygote 进程。

  • Zygote 是 Android 进程的父进程,所有应用进程都是从 Zygote fork 出来的。
  • Riru 允许 Lsposed 在 Zygote 进程中执行 Hook 代码,进而影响所有应用进程。

2. Xposed 兼容性

Lsposed 兼容 Xposed API,并提供了更好的模块管理机制,使得开发者可以使用 Xposed 模块而不影响系统稳定性。

  • 传统 Xposed 框架是通过修改 app_process 直接 Hook Zygote 进程,但这种方法会影响系统稳定性,并且容易触发 SafetyNet 检测。
  • Lsposed 通过 Riru 以更安全的方式插入 Hook 代码,不修改 app_process,从而规避了一些安全检测。

Lsposed 的核心组件

1. Riru 框架

Riru 负责在 Zygote 进程启动时加载 Lsposed 代码,并提供 Hook 机制。

2. Lsposed Manager

Lsposed Manager 是一个管理应用,用户可以在其中:

  • 启用或禁用 Hook 模块
  • 选择哪些应用程序被 Hook
  • 查看 Hook 记录和日志

3. Xposed API

Lsposed 复用了 Xposed API,允许模块开发者使用:

  • findAndHookMethod():Hook 目标方法
  • beforeHookedMethod():修改方法执行前的参数
  • afterHookedMethod():修改方法返回值

Lsposed Hook 过程

  1. Zygote 进程启动
    • Riru 在 Zygote 启动时加载 Lsposed 代码,并在 app_process 运行时插入 Hook。
  2. 应用进程 Fork
    • Zygote 进程 Fork 出应用进程,并加载 Lsposed 插件。
  3. Hook 目标方法
    • Lsposed 通过 findAndHookMethod Hook 目标应用的方法,并在执行前后修改参数或返回值。

Lsposed 的优势

  • 模块化管理:可以对指定的应用进行 Hook,而不会影响系统其他进程。
  • 高兼容性:兼容 Xposed API,支持大多数 Xposed 模块。
  • 更安全:不修改 app_process,规避 SafetyNet 检测,提高系统稳定性。
  • 支持 Android 8+:Lsposed 支持 Android 8 及以上版本,并能适配更高版本的 Android 系统。

Lsposed 与传统 Xposed 的区别

特性传统 XposedLsposed
Hook 方式修改 app_process使用 Riru 进程内 Hook
影响范围影响整个系统仅影响指定应用
兼容性兼容性较差兼容性更高
检测规避容易被检测 (SafetyNet)难以检测
适用系统Android 4.4 - 7.1Android 8+

Lsposed 示例代码

假设我们要 Hook android.telephony.TelephonyManager#getDeviceId 以返回一个固定的 IMEI,我们可以使用 Lsposed 进行 Hook:

package com.example.hookmodule;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;

public class HookMain implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if (!lpparam.packageName.equals("com.target.app")) {
            return; // 只 Hook 目标应用
        }

        XposedHelpers.findAndHookMethod(
            "android.telephony.TelephonyManager", 
            lpparam.classLoader, 
            "getDeviceId", 
            new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    param.setResult("123456789012345"); // 伪造 IMEI
                }
            }
        );
    }
}

如何使用

  1. 在 Android Studio 中编写 Xposed 模块,并使用 XposedBridge API 进行 Hook。
  2. 将模块打包为 APK,并使用 Lsposed Manager 启用该模块。
  3. 启动目标应用,Hook 生效。

结论

Lsposed 是当前 Android 设备上最稳定、兼容性最高的 Xposed Hook 方案。它基于 Riru,在不修改 app_process 的情况下,实现了 Xposed 模块的管理和应用进程 Hook,可以用于修改应用行为、添加新功能或进行安全测试。

 

 

Lsposed是在Edposed的基础上进行改良的新框架,它接管了Xposed的API并且可以很好地兼容Xposed的API。因此,Lsposed模块的开发工作是基于Xposed的API进行的,并且可以利用Lsposed的优秀特性来提升用户的体验。在开发Lsposed模块时,可以通过在AndroidManifest.xml中添加xposedmodule标签告诉xposed框架这是一个xposed模块,并使用xposeddescription标签为模块添加描述,以及使用xposedminversion标签表示支持的最低xposed版本。此外,在处理依赖关系时,尽量避免使用implementation关键字,以防止出现奇怪的问题和报错。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [android studio2021.3.1 最新xposed模块编写指南](https://blog.csdn.net/scrawman/article/details/127187151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Lsposed 技术原理探讨 && 基本安装使用](https://blog.csdn.net/u010559109/article/details/127095405)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王景程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值