一、前言

春节过年发个红包本来就是为了讨个喜庆,朋友亲戚之间的关系交流,但是现在随着技术变革,抢红包插件越来越多,导致现在不太愿意发红包了,特别是在一个多人群里,潜水的非常多,但是丢个红包瞬间就没了,感觉真的很不爽呀,然后造成的现象就是你用插件,我也用,结果抢红包就变得没有意思了。在这里我还是觉得尽量不要用这些所谓的抢红包插件。多读些书多好呀!

二、自动抢红包插件分析

本文就来应对那些自动抢红包插件功能的防护功能,我们知道现在自动抢红包主要有着三种方式:

第一种:利用辅助功能和通知栏消息拦截来做到第一时间红包来了提醒用户

第二种:利用Xposed框架进行hook抢红包功能

第三种:直接修改具备抢红包功能app的代码,二次打包安装

但是这三种方式其实目的只有一个:在收到红包之后能够立即提醒用户,核心点就一个字”快”,那么防止这些插件的出发点也就是如何能够得到抢红包的时间,通过这个时间来判断一个人到底有没有用插件。因为我们抢过红包的都知道,正常情况下抢一个红包需要经历:接受红包消息+手动点击红包+红包打开动画,这三个场景。安装平均网速和人的反应速度,抢一个红包消耗的时间大约在4s-5s左右。当然可能会更长,如果更长的时间就不在我们这次讨论范围内了,而这个时间也是我们自己估摸出来的,不是非常准确的。所以我们现在的思路是,如何能够获取一个红包被抢了之后,每个人抢包消耗的时间。

三、寻找Hook入口

先来看看一个红包被抢完之后的详情页面信息:

从这个详情页面可以看到,有一个值就是时间字段,而这个页面应该是个ListView控件,所以这里就是我们的突破口,这里依然使用命令查看当前页面名称:adb shell dumpsys activity top

然后用Jadx打开WX应用,这里我依然用的是6.3.9版本:

这里就阻碍住了,为何找不到这个类呢?在之前的一篇文章中已经踩过这个坑了,就是WX应用进行了拆包技术,就是有多个dex文件,不了解的可以看这篇文章:如何获取WX应用的聊天记录和通讯录信息;他把从dex放在assets目录下:

所以我们可以直接解压这个jar,得到对应的dex文件,然后用jadx打开即可,继续搜索类:

看到了吧,这时候就找到了,点击进入即可:

找到了ListView控件,要想看具体数据肯定要找到他的Adapter值:

这里的代码就非常简单了,大众化的Adapter代码,为了能够看到数据,直接找到数据列表信息:

我们只要hook这个ix方法即可,然后得到他的返回值,在使用反射打印所有字段值:

四、打印红包详情信息

上面就分析完了红包详情页面数据信息,下面可以直接写Xposed模块,来hook这个方法即可,不过这里有一个坑需要注意的:Xposed默认是加载classes.dex主dex中的类。对于从dex中的类,按照以前方式加载的话会提示找不到类信息的,所以这里需要做一个处理,就是先hook系统的Application类的attach方法,然后得到对应的Context的类加载器,然后用这个类加载器去加载指定的类,如果找不到这个类就直接返回,因为无法知道想要加载类是在哪个dex中,而且你也无法知道当前hook的是哪个dex文件。所以只能一次一次进行尝试,一旦加载成功就开始后续的操作了,加载代码非常简单,如下所示:

这里加载com.tencent.mm.plugin.luckymoney.ui.h这个类成功之后,咋们就来hook他的ix方法:

模块编写完成之后,安装重启设备生效,然后在打开一个红包的详情页面,打印值如下:

我们看到这里的eNC字段值应该是一个时间戳,是10位的,注意后面如果要计算时间差得注意13位的时间戳和10位的时间戳问题。而eNc字段代表的是一个id值。暂且认为是当前红包的唯一id值。

五、获取红包id值和时间戳

那么有了这些信息之后,我们应该还需要知道一个信息,那就是接受红包的时间戳和id值,这样我们才能计算每个人抢包的时间值。这个值获取也比较简单了,这个可以直接拦截消息,过滤是红包信息之后,解析xml信息得到对应的值,关于如何拦截消息在之前的一篇关于:如何自动打开公众号文章和链接文章
中已经详细介绍了,这里不再多说,直接上代码:

我们可以看到当发送一个红包之后的消息xml格式如下:

我们看到这个paymsgid值和上面的eNc字段值非常类似,不过不是一致的,但是可以作为唯一id值来处理,这里我们用这个id值的倒数13位开始截断作为Map存储结构的key值。这样就把当前红包的id值和时间戳保存下来了,然后在查看红包详情信息的时候在计算时间差信息即可。

这里为了更好的在界面上看到每个人抢包时间,我们需要在修改列表信息,这时候我们可能需要去hook信息列表的getView方法了,我们知道每次展示item的时候都会调用getView方法的,看看getView方法的实现逻辑:

这里的代码也是非常大众化的,没难度,我们找到界面中展示时间的TextView控件,将其内容改成抢包时间差信息,这里找的方法也比较简单,直接计算id值转化成16进制,然后去public.xml文件中找到对应的id名称,查看布局文件即可。首先我们找到item的布局文件,将上面的2131362602十进制转化成16进制,然后去public.xml中查看:

找到布局文件是v6.xml,打开这个文件:

看到这里的布局层次是外层LinearLayout,然后内层第二个子View是LinearLayout,然后内部多个子TextView展示信息的,下面继续找到展示时间的TextView,这个也比较简单,因为从上面打印字段信息可以知道eNC这个值就是时间戳信息,可以查看代码:eRq就是展示时间戳信息的

把十进制:2131167693转化成16进制,查看public.xml内容:

然后在上面的布局文件中找到b45这个id控件:

看到这个是位于子LinearLayout的第4个子TextView控件,这里一定要注意子控件的顺序和索引值,后面会根据这个索引值来找到对应的TextView控件,下面直接来看代码实现吧:

代码实现比较简单了,主要分为三步:

第一步:hook住getView方法得到列表的item索引值,利用反射调用之前的ix方法得到对应item的数据信息,包括时间戳和id值。

第二步:利用红包的id值去全局的Map结构中检索到红包发送的时间戳值,计算抢包时间差。

第三步:通过方法的返回值View,来检索原来展示时间信息的TextView,这里一定要注意getChildAt这个方法的调用必须依赖于子控件的索引值。

模块编写完成之后,咋们就安装重启设备生效,然后打开一个红包详情页面,看看效果图:

看到了,在这个群里果然有很多挂逼,尽然在2s之内就可以抢到红包,不是挂逼是啥!

六、总结技巧

到这里我们就讲解完了防止自动抢红包插件原理,下面来总结一下本次操作的技巧知识点:

1、对于多dex应用进行hook的时候,会出现找不到类的错误,可以先hook住系统的Application的attach方法,得到Context之后,利用其ClassLoader进行加载类即可。

2、在进行hook的时候想修改界面数据的时候,大致思路是先找到指定的展示控件,一般都是通过id值去public.xml中查找布局文件即可。当然也有些布局可能是代码编写的。那样更容易查找了。然后在利用布局的层级关系找到指定的控件即可。

严重声明:本文的目的只有一个,通过一个案例来分析现在应用逆向分析技巧,如果有人利用本文内容进行任何商业目的和非法牟利,带来的任何法律责任将由操作者本人承担,和本文作者没有任何关系,所以还是由衷的希望大家秉着技术学习的目的阅读此文,非常感谢!

七、总结

本文主要通过WX应用防止抢红包插件的功能作为案例,来介绍了利用Xposed进行hook的时候遇到的一些问题,以及解决方案,在说到抢红包本文的案例解决方法很简单,就是通过抢包时间来判断,但是这个不是百分百的准确,因为有很多不确定因素在里面,比如网速等,都可能决定一个红包被抢的时间。但是在一定抢包时间内我们可以断定是否使用了自动抢包功能插件,如果希望做的更智能,最好是采样多个红包被抢信息来进行简单的数据分析来判定某个人是否真的的确用了自动抢包插件。

android黑科技系列——防自动抢红包外挂原理解析的更多相关文章

  1. android黑科技系列——微信抢红包插件原理解析和开发实现

    一.前言 自从几年前微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导 ...

  2. android黑科技系列——应用市场省流量更新(增量升级)原理解析

    一.前言 最近在看热修复相关的框架,之前我们已经看过了阿里的Dexposed和AndFix这两个框架了,不了解的同学可以点击这里进行查看:Dexposed框架原理解析 和 AndFix热修复框架原理解 ...

  3. android黑科技系列——修改锁屏密码和恶意锁机样本原理分析

    一.Android中加密算法 上一篇文章已经介绍了Android中系统锁屏密码算法原理,这里在来总结说一下: 第一种:输入密码算法 将输入的明文密码+设备的salt值,然后操作MD5和SHA1之后在转 ...

  4. android黑科技系列——Apk的加固(加壳)原理解析和实现

    一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk, ...

  5. android黑科技系列——自动注入代码工具icodetools

    一.前言 在前面已经介绍完了 自动给apk中注入日志代码工具icodetools原理了,在那里我们曾经说过其实离真正的可使用价值有点距离,本篇就对这个工具进行一些优化,让其真正意义上开始能工作量产.当 ...

  6. android黑科技系列——解析公众号文章消息和链接文章消息自动打开原理

    一.辅助功能方案分析 关于WX的各种功能插件已经非常普遍了,而现在的插件都是依赖于Xposed框架进行的,所以个人觉得WX应该在这方便应对Xposed框架的使用防护,防止插件满天飞的现象,本文来介绍一 ...

  7. android黑科技系列——Xposed框架实现拦截系统方法详解

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

  8. android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如 ...

  9. android黑科技系列——Android中新型安全防护策略

    一.前言 最近有一个同学,发给我一个设备流量访问检测工具,但是奇怪的是,他从GP上下载下来之后安装就没有数据了,而在GP上直接安装就可以.二次打包也会有问题.所以这里就可以判断这个app应该是有签名校 ...

随机推荐

  1. 浏览器控制之 selenium,phantomJs谷无头浏览器

    目录 浏览器控制之 selenium,phantomJs谷无头浏览器 selenium phantomJs 需求是尽可能多的爬取豆瓣网中的电影信息 谷歌无头浏览器 浏览器控制之 selenium,ph ...

  2. SCU Travel

    Travel The country frog lives in has n towns which are conveniently numbered by 1,2,…,n . Among n(n− ...

  3. 清北学堂模拟赛d2t1 一道图论神题(god)

    题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有点权. LYK想把这个图删干净,它的方法是这样的.每次选择一个点,将它删掉,但删这个点是需要代价的.假 ...

  4. ZooKeeper环境搭建(单机/集群)(转)

    前提: 配置文件主要是在$ZOOKEEPER_HOME/conf/zoo.cfg,刚解压时为zoo_sample.cfg,重命名zoo.cfg即可. 配置文件常用项参考:http://www.cnbl ...

  5. Spring MVC-视图解析器(View Resolverr)-内部资源视图解析器(Internal Resource View Resolver)示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_internalresourceviewresolver.htm 说明:示例基于S ...

  6. [转]十五天精通WCF——第十二天 说说wcf中的那几种序列化

    我们都知道wcf是由信道栈组成的,在我们传输的参数走到传输信道层之前,先需要经过序列化的过程,也就是将参数序列化为message,这篇 我们就来说说这里的序列化,蛮有意思的,可能初学者也明白,在wcf ...

  7. HDU 3167 KMP

    很久之前做的一题,忽然想起来,依然觉得思路巧妙. //这道题,确实是一道好题.但如何应用KMP,确实大大超出了意料中. //这道题匹配的是某元素在子串中的名次,也就是在子串中排第几小.我想了整整一天, ...

  8. [PWA] Check Online Status by using the NavigatorOnLine API

    Even if you have your application fully cached, you couldn’t perform any external request without in ...

  9. android weight(权重)的详细分析

    首先要明确权重分配的是那些空间? 权重是依照比例分配屏幕的剩余空间 对这句话不理解的能够看下图 假如我们希望剩余的空间平分给空间1 和空间2 , 我们分别在2个控件的设置android:layout_ ...

  10. 一个基于cocos2d-x 3.0和Box2d的demo小程序

    p图demo小应用.想怎么p就怎么p 本文參考于http://blog.csdn.net/xiaominghimi/article/details/6776096和http://www.cnblogs ...