关于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。
创建自己的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,体验。