(转载公司内部论坛本人文章2020.7.6)
xposed原理
Android系统中,Zygote进程在启动的过程中,会创建一个Dalvik虚拟机实例,同时将Java运行时库加载到进程中来,以及注册一些Android核心类的JNI方法到Dalvik虚拟机实例中去。
而我们知道,系统其它所有进程都是由Zygote进程孵化的。Zygote在启动新的app进程时,都会将自身的Dalvik虚拟机实例复制到该App进程里,形成该App独立的Dalvik虚拟机实例,同时还会与Zygote进程一起共享Java运行时库。所以Xposed通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,也进而使XposedBridge.jar加载到了每一个Android app进程里。
Xposed可以实现在不修改APK源码的情况下,hook app里的任意java方法,实现方法的修改和替换。
Xposed简单使用教程
手机可以通过 Xposed Installer 安装Xposed服务,但是需要ROOT权限。如果不想ROOT手机,也可以通过安装一个自带Xposed的虚拟系统,效果也是一样的。
想要hook apk的方法,首先要知道apk内该方法的具体路径,这个涉及到 apk反编译 的过程,这里不做细说。
通过Xposed Hook方法主要运用到 XposedHelpers.findAndHookMethod() 方法,demo代码如下:
public class Hooktest implements IXposedHookLoadPackage {
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if (loadPackageParam.packageName.equals("想要hook apk的包名")) {
Class clazz = loadPackageParam.classLoader.loadClass("想要hook的类名");
XposedHelpers.findAndHookMethod(clazz, "想要hook的方法名", new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}

本文详细介绍了Android中的Xposed框架工作原理,包括其如何在Zygote进程中加载XposedBridge.jar以实现方法hook。同时,分享了Xposed的简单使用教程,以及如何在Java层和Native层检测Xposed的存在,以进行防护措施。文章强调,由于Xposed的hook特性,单纯Java层的防护不足以抵挡攻击,并提出将检测代码置于Native层以提高安全性。
最低0.47元/天 解锁文章
4430

被折叠的 条评论
为什么被折叠?



