安卓逆向——AS开发Xposed插件HOOK案例

环境和工具 :

模拟器:雷电 4.0.43版本

安卓版本:7.1.2  x86 

Xposed :xposed-installer-3-1-5

反编译根据:jadx,Android killer

基于上偏文章 继续学习 XP

模拟器 安装 对应的 apk应用,随便输入账号密码,点击登录,提示 “账号错误,请重新输入”

“账号错误,请重新输入” 就从这切入,使用 jadx 打开 apk文件,全局搜索 这个提示文字

可以搜索到结果,同时可以看到 login 的方法 

login(String user, String pwd)   user 是获取输入的账号,pwd 是获取输入的密码

我们写个 XP 插件就获取 自己输入的账号和密码 ,并打印日志

     

 分析找到 逻辑的函数,和我们需要的目标函数后,就开始写 xp 插件(上一篇的demo直接用了)

XposedHelpers.findAndHookMethod  XP框架的api,看名字应该就知道 意思,获取指定hook的方法

根据方法的参数 传入对应的参数即可 

编写一个 简易的 XP hook 插件,指定一个应用,hook 该应用的 login 方法 ,并打印日志

获取指定方法的报名的方式:

# 第一种 :获取 手机展示页面的 活动页面,可以看到包名
adb shell dumpsys activity top

# 第二种:直接模糊搜索 包名 q 是包名包含的字母
adb shell pm list packages | grep q
        // 判断 当前的 启动的模板程序是否是 需要hook的 应用,这里要知道 应用的报名
        // 如果不判断指定 报名 启动 插件的话,打开所有的应用都会 启动插件,就会保存,其他的应用 不一定用这个指定方法
        if(loadPackageParam.packageName.equals("com.qianyu.helloworld")) {

            // hook 方法  普通方法 静态方法
            XposedHelpers.findAndHookMethod(
                    "com.qianyu.helloworld.LoginActivity", // 指定加载类,包名+类名
                    loadPackageParam.classLoader,  // 类加载器
                    "login",           // 指定hook的方法
                    String.class, String.class,    // 指定hook的方法的参数列表,参数类型.class
                    new XC_MethodHook() {
                        @Override  // 执行指定方法之前 要做的操作,就可以在这个方法里面 写逻辑
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            super.beforeHookedMethod(param);
                            // param.args 方法的 传入参数
                            XposedBridge.log("args1: " + param.args[0]);
                            XposedBridge.log("args2: " + param.args[1]);

                        }

                        @Override  // 执行指定方法之后 要做的操作,就可以在这个方法里面 写逻辑
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);

                            // 在 执行 方法之后,获取方法的返回值 param.getResult()
                            XposedBridge.log("result: " + param.getResult());

                        }
                    }
            );
        }

编写完成,运行安装,模拟器会提示 XP插件没有激活,点击 xposed应用,在模块里面勾选并重启

 重启后打开应用,在输出账号密码登录,再去xposed应用的日志去查看,可以看到打印的结果

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.含笑.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值