如何使用 Xposed 重定向 Android 中的 .so lib 的负载?
How to redirect the load of .so lib in Android using Xposed?
我有一个包含库的应用程序(例如,"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");
}
}
});
}
}
}
应用程序崩溃,我在 Google 上搜索并找到了这个: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
,检查结果值并用您修改后的库的路径覆盖 return 值。
我有一个包含库的应用程序(例如,"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");
}
}
});
}
}
}
应用程序崩溃,我在 Google 上搜索并找到了这个: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
,检查结果值并用您修改后的库的路径覆盖 return 值。