android - 如何使用 Xposed 在 Android 中重定向 .so lib 的负载?
问题描述
我有一个包含 lib 的应用程序(例如,“test.so”),我想将该 .so 的负载重定向到另一个由我修改的“test.so”,我尝试使用 Xposed 进行任何操作,例如:
public class xposed implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
if (lpparam.packageName.equals("package")) {
findAndHookMethod("java.lang.System", lpparam.classLoader, "loadLibrary", String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param){
XposedBridge.log("(before) Loaded library: " + param.args[0]);
if (param.args[0].toString().equals("test")){
System.load("/data/data/package/modified_test.so");
}
}
});
}
}
}
该应用程序崩溃了,我在谷歌上搜索并发现了这个:System.loadlibrary hook crash但是当我想像 rovo 一样挂钩运行时时说它什么都不做。有人知道任何解决方案吗?
(请不要告诉我有关将 lib 更改为 .apk 的事情,因为如果我愿意,我没有问这个 xD)。
解决方案
您的代码无法工作,因为您使用了错误的方法。
System.loadlibrary
期望作为参数的库名称没有文件路径,没有前置lib
和没有文件扩展名。因此,如果您将参数替换"/data/data/package/modified_test.so"
为示例中所示的参数,则库加载将不起作用。
我假设如果您将负责将库名称映射到实际库文件的方法挂钩,您可能会更幸运:System.mapLibraryName(String)
. 您可以在Runtime.loadLibrary(String, ClassLoader)中看到它是如何使用的
为此,请使用afterHookedMethod
,检查结果值并使用修改后的库的路径覆盖返回值。
推荐阅读
- c# - 如何配置范围过滤器以对消费者和活动一样工作
- matlab - 不明白 cmd_data(ii) = cell2mat(textscan(char(data{i}(ALL_STRT(ii):(ALL_STRT(ii)+4))),'%f')); 的功能 根本
- sql - Postgres - 仅针对一对多关系获取一行
- javascript - 在 Gatsbyjs 上添加自定义 jQuery 地图
- c++ - C++ 和 QT 线程外部变量不起作用
- flutter - 如何在 Flutter Web 项目中使用 Adobe Fonts?
- mule - 媒体类型=application/json;charset=utf-8 的 MessageBodyReader 未找到
- ruby-on-rails - 在heroku上部署时,rails-react应用程序上的身份验证方法遇到内部服务器错误(500)和类型错误
- html - 无法使用 VBA 在 Web 表单的组合框中设置值
- react-native - 如何在本机反应中使用状态