【Android逆向】修改RecyclerView的itemView逻辑

RecyclerView有2个特征类,是没办法混淆的
RecyclerView.ViewHolder
RecyclerView.Adapter

以我代码为例,进入rv源码,定位setAdatper寻找adapter的实现类

定位出adapter已经改为叫2s4

找到核心的方法,核心的方法不会改变特别大,最多这个onBIndViewHolder名字混淆了,但是入参的格式不会变,我还遇到过连这个名字都没,比如

    /**
     * 在lzd的q方法增加逻辑
     *
     * @param obj
     * @param position
     */
    public static void q(Object obj, int position) {
            //对应onBindViewHolder

    }

 onBindViewHolder的入参是ViewHolder,我们先去挟持2ax获取调用栈信息

 static class XXX extends RecyclerView.ViewHolder {

        public BB(View itemView) {
            super(itemView);
            XXXX.XXXX(this, itemView);
        }
    }

正常ViewHolder的构造函数,是没办法改变的,所以在这个增加我们的切入点代码

得到栈的信息,我们可以反推对应的adapter代码,在adapter的bindViewHolder添加自己的逻辑

public static void getStack(Object obj, View view) {
        Log.i("Go00000000xx", "-----------" + view.getClass());
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        for (StackTraceElement stackTraceElement : stackTrace) {
            @SuppressLint("DefaultLocale") String re = String.format(
                    "getClassName:%s,getMethodName:%s,getLineNumber:%s",
                    stackTraceElement.getClassName(),
                    stackTraceElement.getMethodName(),
                    String.valueOf(stackTraceElement.getLineNumber()));
            Log.i("Go00000000xx", re);
        }
    }

输出的日志例如

2023-02-27 21:53:05.353 2227-2227/? I/Go00000000xx: getClassName:dalvik.system.VMStack,getMethodName:getThreadStackTrace,getLineNumber:-2
2023-02-27 21:53:05.353 2227-2227/? I/Go00000000xx: getClassName:java.lang.Thread,getMethodName:getStackTrace,getLineNumber:1724
2023-02-27 21:53:05.353 2227-2227/? I/Go00000000xx: getClassName:com.xxx.mainactivity.RVFixGG,getMethodName:sFix,getLineNumber:48
2023-02-27 21:53:05.353 2227-2227/? I/Go00000000xx: getClassName:X.2ax,getMethodName:<init>,getLineNumber:0
2023-02-27 21:53:05.354 2227-2227/? I/Go00000000xx: getClassName:X.2aw,getMethodName:<init>,getLineNumber:0
2023-02-27 21:53:05.354 2227-2227/? I/Go00000000xx: getClassName:X.1tH,getMethodName:onCreateViewHolder,getLineNumber:72
2023-02-27 21:53:05.354 2227-2227/? I/Go00000000xx: getClassName:X.1tH,getMethodName:onCreateViewHolder,getLineNumber:268435456
2023-02-27 21:53:05.354 2227-2227/? I/Go00000000xx: getClassName:X.2s4,getMethodName:createViewHolder,getLineNumber:15

大致可以猜到那个是adapter,往前推,不是init的就是adapter类了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

落后程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值