android studio xposed教程(含jar下载地址)

20 篇文章 0 订阅
16 篇文章 0 订阅

0x01 什么是xposed?

Xposed是一款可以在不修改APK的情况下影响程序运行的框架服务,基于Xposed能够制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。

xposed是一个框架,可以通过xposed installer安装,具体安装方法我就不在这里详述了,需要的同学请自行搜索。这里我们主要介绍其hook函数的方法。

其api jar包下载地址:api下载地址

0x02 使用api lib

在android studio最新版本中(目前2.1.2),将jar添加到项目中作为lib已经十分简单了,不过这里需要注意几个细节。
新建一个项目,可以没有activity,如果有的话也不影响。

首先将下载jar包放入项目的/app/libs/里边,并在android studio中找到这个jar包,右键点击,选择 add as library。

其次,在android studio中找到app/build.gradle,将里边的compile files(‘libs/XposedBridgeApi-XX.jar’) (此处的XX为版本号)的compile改为provided

注意,第二步如果不改会得到error,信息为:IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

0x03 更改manifest

在AndroidManfest里边,在项中添加如下项

<meta-data
            android:name="xposedmodule"
            android:value="true"/>

        <meta-data
            android:name="xposeddescription"
            android:value="Easy example"/>

        <meta-data
            android:name="xposedminversion"
            android:value="54"/>

其中Easy example为你自己的描述,可以自行根据内容更改,最后一个meta-data里边的54为最少需要xposed的版本,我之前下载的版本为54,所以我设置其为54,可以自行更改。

0x04 java代码

新建一个java class,可以随意命名。(具体写在注释里)

package com.example.root.hook_test;//自己的包名

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
//android studio中可以自动添加import,不需要自己处理
/**
 * Created by Anciety on 7/19/16.
 */
public class Test implements IXposedHookLoadPackage{

    @Override
    public void handleLoadPackage(
            final XC_LoadPackage.LoadPackageParam loadPackageParam)
            throws Throwable {
            //这里是一个hook应用的实例,主要目的是hook com.example.crackme中的check函数,使其返回值为true
        if (!loadPackageParam.packageName.equals("com.example.crackme")) {
         //loadPackageParam为载入的package的参数,其中packageName存了包名,如果包名不一致,不做处理
            return;
        }
        //使用XposedBridge的log来输出载入的app,在tag过滤器中添加Xposed即可读取log
        XposedBridge.log("Loaded app:" + loadPackageParam.packageName);
//这里就是关键了,hook方法(函数)的时候用到这个方法
        XposedHelpers.findAndHookMethod(
                "com.example.crackme.MainActivity",//要hook的类
                loadPackageParam.classLoader,//获取classLoader
                "check",//要hook的方法(函数)
                String.class,//第一个参数
                String.class,//第二个参数
                new XC_MethodHook() {
                //这里是hook回调函数
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    //afterHookedMethod,顾名思义,在被hook的方法之后调用这个函数
                    //param.args作为数组,存了调用函数时的参数,通过getResult得到返回值
                        XposedBridge.log("after hook:" + param.args[0]);
                        XposedBridge.log("after hook 2:" + param.args[1]);
                        XposedBridge.log("result:" + param.getResult());
                        param.setResult(true);//通过setResult更改返回值
                        XposedBridge.log("result(settled):" + param.getResult());
                    }
                });
    }
}

与afterHookedMethod对应,还有beforeHookedMethod,即在之前被调用。

0x05 添加assets/xposed_init

之前的许多教程也是说将xposed_init添加到assets文件夹中,但是android studio和eclipse的文件夹结构不尽相同,在这里花费了一些时间。
这里是在/app/src/main/内新建一个文件夹,assets,然后在该文件夹中新建文本文件,命名为xposed_init,在其中写入完整的包名和用来hook的类名,本例中为com.example.root.hook_test.Test

0x06 安装

将app安装后,在xposed installer中添加上模块,重启,就可以测试了。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值