(2020.7.6)Android Xposed防护总结

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

(转载公司内部论坛本人文章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);
                }

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值