Xposed框架动态调试第三方APP—实战演示

关于Xposed是什么及原理,这里不多说,网上一搜一大把。这里只讲干货。
下面讲的适用于有一定Android开发经验的开发人员。
仅用于开发学习用,严禁挪作他用!

注:后附demo apk安装包。

素材准备:
1、root后的Android机一台;
2、下载XposedInstaller.apk,安装到root后的手机,用于作为动态调试容器。之后开发出来的xposed hook插件要添加进这个容器后才能hook第三方应用。下载地址:链接:https://pan.baidu.com/s/1EAGoAbJo8nRFJZwXqsip3A 密码:gszz
3、准备XposedBridgeApi.jar包,可以从官网下载:
[XposedBridgeApi-54官方下载地址]https://forum.xda-developers.com/attachment.php?s=5903ce1b3edb1032faba7292b21e1801&attachmentid=2748878&d=1400342298
或在下面自己写的XposedDemo工程中的build.gradle文件中引入xposed依赖包,如下图:
4、Android开发环境及工具。这里使用Android studio。provided 'de.robv.android.xposed:api:82'
创建自己的XposeDemo框架工程,步骤如下:
1、创建空项目,名叫XposedDemo
2、在build.gradle中添加核心依赖包:provided ‘de.robv.android.xposed:api:82’
3、编写hook类,hook第三方应用的功能方法,更该请求参数、响应值等实现动态调试。前提是事先确定好第三方应用的包名——类名——方法名,例如:我的要hook的第三方应用代码如下:
在这里插入图片描述
下面进入重点——编写动态调试代码,实现对goLogin的篡改,不管输入pwd为何止,使goLogin永远返回true,从而越过第三方应用的登录密码校验。
4、hook代码类如下:

public class HookLogin implements IXposedHookLoadPackage {
    private static final String PACKAGE_NAME = "com.mscf.finance";

    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        Log.i(Contants.TAG, "xposeddemo--进入我的hook-----~~");

        if (lpparam.packageName.equals(PACKAGE_NAME)) {
            Log.i(Contants.TAG, "包名存在!");
        } else {
            Log.i(Contants.TAG, "com.mscf.finance--包名不存在!");
            return;
        }
        //固定格式
        findAndHookMethod(
                "com.mscf.finance.activity.Aty_Login",  //要hook的包名+类名
                lpparam.classLoader,                   //classLoader固定
                "goLogin",                         //要hook的方法名
//                int.class,//方法参数 没有就不填
                new XC_MethodHook() {
                    @Override
                    //此函数在执行被hook函数前调用,用来修改入参
                    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                        Log.i(Contants.TAG, "进入beforeHookedMethod---");
                    }

                    //方法执行后执行,改方法的返回值一定要在方法执行完毕后更改
                    protected void afterHookedMethod(MethodHookParam param)
                            throws Throwable {
                        Log.i(Contants.TAG, "进入afterHookedMethod---");

                        //修改返回值为true,越过登录密码验证
                        param.setResult(true);
                        String result = param.getResult() + "";
                        Log.i(Contants.TAG, "afterHood输出结果---" + result);
                    }
                }
        );

    }
}

5、配置hook启动入口:在工程目录的main/assets/下新建文件xposed_init 复制以下内容到文件:

com.zp.xposeddemo.HookLogin

注意该目录即自己的包名+hook类名。

6、运行功能XposedDemo到root后的手机上,桌面多了一个名叫MyXposeDemo的应用。如此一个动态调试登录事件的hook插件开发出来了。
7、将MyXposeDemo添加进XposedInstaller容器中。

  • 打开XposedInstaller容器,先进行激活。网上搜 xposedInstaller激活教程一大把。这里不做重点讲。
  • 激活后如下图:
  • 在这里插入图片描述
  • 点击左侧菜单,选择模块,勾选我们的XposedDemo,然后重启手机设备。
    在这里插入图片描述
  • 重启后后,点击被hook的第三方APP,执行登录,输入任何值,都提示“登录成功”。完活!

总结:
最后回顾整个流程,其实主要就是基于Xposed依赖包开发了一个篡改登录功能的插件。在afterHookedMethod方法中修改被hook住的方法名,篡改其返回值,实现登录功能越过。
在这里插入图片描述
附上实战体验demo:下载链接:https://pan.baidu.com/s/1-fdOgNQfTSPJ8hLVIjMcRA 密码:9fcb
切记:手机需要root后再安装上述demo,体验。

猜你喜欢

转载自blog.csdn.net/u011084603/article/details/96307099