练习向:Xposed安装和使用的踩坑

1.Xposed简介

Xposed是一款优秀的android java层 hook 框架。它允许你在不修改apk源码的情况下,通过编写自己的模块来改变apk的行为。它的优点是采用了插件机制,模块能够适用不同版本的框架和rom。模块改变apk行为的操作发生在内存中,对源apk不进行任何修改。你只需要安装编写的模块并重启相应的设备即可

2.相关资源

注意:下载地址里有这么句话:For Android 5.0 or higher (Lollipop/Marshmallow), these versions don't work! Use this instead: http://forum.xda-developers.com/showthread.php?t=3034811,所以安卓5.0以上的就去这个网址下吧,不然会用不起的。github地址也在上面,同时提供了许多模块的下载


CSDN jar包和apk下载链接: 下载

3.安装踩坑

3.1 配置入口,assets的坑

使用IDEA来练习的,生成新的安卓项目没有assets文件夹,网上找了半天也没找到,只好一个目录一个目录的试,最终结果如图

3.2 jar包使用踩坑

jar包下载地址里有这么句话:Here you can also download the API jar file that you need to reference from your project. Make sure you read the development tutorial to understand how it works. Especially make sure that the classes are not included in your APK, but only referenced.意思就是让jar包只参与引用,不参与编译。
我现在采用的解决办法是:在gradle文件里,在依赖部分使用provide关键字对jar包进行声明


这个最简单了,把原来的compile变成provided就行了

3.3 配置文件踩坑


4.API说明

IXposedHookLoadPackage。java
方法: handleLoadPackage,这个方法用于在加载应用程序的包的时候执行用户的操作(就是在这里把内存里原有的代码替换了)
参数说明: final LoadPackageParam lpparam 这个参数包含了加载的应用程序的一些基本信息

XposedHelpers.java
方法: findAndHookMethod,这是一个辅助方法,可以通过静态导入使用
参数说明: findAndHookMethod(
Class<?> clazz, //需要 Hook 的类名ClassLoader,
ClassLoader classLoader,//类加载器,常设为loadPackageParam.classLoader
String methodName, //需要 Hook 的方法名 
Object… parameterTypesAndCallback)  //由1.Hook 的目标方法的参数,譬如:String.class,Integer.class  加上2.回调方法:a.XC_MethodHook 或者b.XC_MethodReplacement组成(从名字上讲就是要你提供函数参数的类型以及一个回调接口)

XposedBridge.java
无参方法: log,该方法可以将 log 信息以及 Throwable 抛出的异常信息输出到标准的logcat 以及/data/xposed/debug.log 这个文件中
无参方法: hookAllMethods/hookAllConstructors,该方法可以用来 hook 某个类中的所有方法或者构造函数,但是不同的Rom(非Android原生 Rom)会有不同的变种。

5.使用踩坑

首先来把决定要hook的函数写好。后面通过hook login函数,得到不同的结果

4.1 hook函数的返回值

设置返回值通过methodHookParam.setResult()执行,参数为object类型,在java的自动包装机制下,你传什么都可以
因为只设置返回值,所以只需要用XC_MethodHook接口



前后都设置了返回值的话,则以后一个为准



4.2 直接替换函数

直接替换函数我们使用XC_MethodHookedMethod()函数

替换后则不等于“123”的才能返回成功

4.3 更改函数的传入参数

param.args是一个object数组,里面保存了这个函数传入的参数的引用,直接更改即可,同时也因为是object类型,所以可以改成任何类型的值

则无论输入什么,最后都会成功

4.4 Hook内调用该函数的其他方法

通过XposedHelpers.callMethod()函数进行调用,因为返回值为object,所以也能够返回任何类型
先增加一个login2函数,执行与login相反的逻辑


再调用,下面会逻辑会让任何输入值都返回false



注:callMethod有两个重载
public static Object callMethod(Object obj, String methodName, Object... args)//这个函数会根据你后面传入的参数值自动对照类型输入
public static Object callMethod(Object obj, String methodName, Class<?>[] parameterTypes, Object... args)//这个就免了上面的对照类型这一步,但是我使用的时候发现并不能使用,会让程序自动退出,错误为:NoSuchMethod,真是奇怪,明明是最新的啊—— ——。。。

5.参考

Xposed如何实现类中函数的调用: http://blog.csdn.net/omnispace/article/details/50816740


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值