Xposed Hook 魔趣列表动画 xuimod

当年感觉魔趣的列表动画挺有意思,后来发现xuimod这个xposed模块,玩过一阵,现在已经这么些年没更新了,既然没人,那我就自己尝试写写吧。

少废话,先看成品

CoolApk

还有个京东APP的图传不上,CSDN不允许外链,强制上传到他们的服务器。

代码:github

基础方法

注意点

ClassCastException

尝试将一个变量强转为想要的类型时,例如我强转hook来的obj类型的变量为RecyclerView,这个obj虽然是这个类型,但是它是由宿主APP进程加载完成的,classLoader假设称为com.a.b.c.loader,而这个强转代码是写在我们插件APP中的,classLoader可能为com.d.f.e.loader,而不同loader是不能强转的。

一篇好文供参考Tips for writing Xposed Module to Hook Android App’s Methods

但是Java基础类型和String类以及Android基础类能豁免(至少View没问题)。

XposedBridge的一些常用方法

[图片上传失败…(image-211888-1609148847130)]

XposedHelper的主要方法

[图片上传失败…(image-d6a56e-1609148847130)]

示例

// 注入到TextView的setTextColor方法
XposedHelpers.findAndHookMethod(textViewClass, "setTextColor", Int::class.java, object : XC_MethodHook() {
   
    override fun beforeHookedMethod(param: MethodHookParam?) {
   
        // 会在第一行代码执行前调用
    }
    override fun afterHookedMethod(param: MethodHookParam?) {
   
         // 会在最后一行代码执行前调用
    }
})

class的获取

有两种方法(以TextView为例)

  • 直接 TextView::class.java

    这种可能会遇到ClassLoader问题,见注意点1

  • 使用 辅助方法

    [图片上传失败…(image-7e9d9d-1609148847130)]

    当然,传个那么长的className也太累了,可以直接传入TextView::class.java.name
    classLoader就是handleLoadPackage这个方法的参数,每个APP,不对,应该说每个进程启动都会回调这个方法,因为发现有些比如:pushservice启动它也会回调。

方法的Hook

示例中是理想情况,因为这个方法的参数恰好是基础类型,假如不是呢?

  • 想办法获取到对应类型的对象,再用其class作为参数调用这个方法

  • 使用XposedBridgehookAllMethods

    XposedBridge.hookAllMethods(recyclerViewClass, "setAdapter", object : XC_MethodHook() {
         
      override fun beforeHookedMethod(param: MethodHookParam?) {
         
        // WRITE YOUR CODE HERE
      }
    })
    

类或者方法被混淆

Android四大组件和View相关的类不会被混淆,所以我们发挥的空间其实很大,但是谷歌的代码越来越封闭,一发现能往View外抽,就独立成一个内部类,然后这个内部类就被混淆了。

获取混淆类

  • 通过View相关的类的全局变量实例获取

尝试过程

尝试1 将APP原有的Adapter塞入自定义的AnimationAdapter中

由于ClassLoader的问题告终。但正是这里学到了ClassLoader的相关知识。

尝试2 在setAdapterHook onBindViewHolder


val adapterClazz = XposedHelpers.findClass(RecyclerView.Adapter::class.java.name,lpparam)
// hook setAdapter方法
XposedHelpers.findAndHookMethod(recyclerViewClazz, "setAdapter",adapterClazz, object : XC_MethodHook() {
   
    overr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Xposed Hook 是一种 Android 应用程序开发技术,它允许开发人员在不修改应用程序源代码的情况下,在运行时修改应用程序的行为。这是通过在系统运行时加载一个模块来实现的,该模块可以修改应用程序的 Java 方法。Xposed Hook 是一种高级技术,适用于高级 Android 开发人员。 ### 回答2: Xposed Hook是针对Android操作系统的一种插件框架,可以通过它来实现对系统和应用程序的修改和增强。这种框架可以修改应用程序的行为、功能和外观,也可以增加一些新功能,使得应用程序更加强大、灵活和个性化,更能满足用户的需求。 Xposed Hook使用的是Java语言,需要在Android设备上安装特定的模块,然后通过Xposed框架来实现对Android系统和应用程序的Hook。通过Hook技术,可以拦截Android系统和应用程序中的方法调用,从而实现对它们的修改和增强。 Xposed Hook可以实现的功能包括但不限于:界面美化,垃圾清理,定制化ROM,增强应用程序的功能,添加新功能,反禁止操作等等。通过这些功能,用户可以轻松地定制自己的Android设备,使它更加适合自己的使用习惯。 Xposed Hook需要注意的是,由于其操作会修改系统和应用程序的行为,存在风险,需要谨慎操作。此外,在某些设备上安装Xposed Hook可能会导致系统不稳定或无法正常启动,因此使用前需要对其风险有充分的了解和准备,以避免出现意外情况。 总之,Xposed Hook是一种非常有用的技术,对于那些想要个性化定制自己的Android设备的用户来说,是一个非常好的选择。但是,在使用Xposed Hook的过程中要格外谨慎,避免出现不必要的问题。 ### 回答3: Xposed hook是一种基于Xposed框架进行开发的模块,它通过劫持Android系统的核心模块,在不需修改系统源码的情况下实现对系统的修改和扩展。 Xposed框架是一个在安卓系统上的插件框架,它可以通过在系统加载应用前,加载修改器模块的方式来实现对系统的修改。而Xposed hook就是在这个框架的基础上,将底层系统API的使用权转换给修改器模块,从而实现对系统行为的定制化。 Xposed hook的实现方式是通过钩子(Hook)技术实现的,即通过在API调用点上添加Hook代码,以监听并修改系统行为。这种方式不仅可以在不修改系统源码的情况下扩展和修改系统行为,而且可以在运行时实时修改,不需要重新编译代码。 使用Xposed hook可以实现很多有趣有用的功能,比如修改应用行为、禁止广告、增加新功能等等。Xposed hook也可以帮助开发者更方便地进行调试和代码编写,减少工作量和提高效率。 然而,Xposed hook并非完美无缺,它也存在着一些安全问题,比如恶意软件可以借助这个技术实现对用户的监控、篡改、盗取等行为。因此,用户需要谨慎选择和使用Xposed hook模块,并且需要注意安全风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值