Android”挂逼”修炼之行—微信摇骰子和猜拳作弊器原理解析


、猜想假设

本文就借助之前的Xposed框架来介绍如何编写微信的一个外挂功能,这个功能就是微信摇色子和剪刀石头布的作弊器,我们用过微信这个功能都知道,是一个比较常用的功能,因为在一个群聊中会很无聊就来这种简单的比赛,谁输了发红吧啥的。那么这个功能肯定伴有随机性,而且我们应该相信这个随机方法肯定是在微信代码中的某个地方,所以如果我们找到这个方法了,那么就可以进行Hook他,然后拦截返回最大的数值即可,也就是我们想要得数值。

三、准备工作

上面大致分析了这个功能的原理使用,下面咋们就不多说了,直接进行操作,本文用了一个微信的老版本做测试的:微信6.3.9.apk ;那么第一步咋们得逆向微信,需要做两个工作:

第一先使用apktools反编译apk,这个不用多说了,微信没有对应用进行加固,所以反编译过程很正常。

第二需要借助可视化反编译工具Jadx来打开微信apk,因为微信应用很大,所以得慢慢等待一会才可以打开。

四、逆向分析

下面在来冷静分析一下如何我们该怎么入手?上面反编译成功了之后,还得寻求入口,这个入口也很简单的,因为我们想得到这个随机函数,那么在我们能看到的效果是色子,我们可以选择一个微信聊天对话框,然后点击一个色子功能:


看到了,我们点击色子之后肯定会调用这个随机函数获取随机值,那么这里就是我们的入口,所以第一步肯定先找到这个点击事件,如果要找到点击事件,那么就得先找到这个控件的定义,那么问题来了,如果能够快速的找到这个控件的定义呢?这个技术在我之前的一篇文章中已经介绍了,就是 微信的自动抢红包功能 当时因为要找到那个红包的点击事件,所以就用同样的方法来得到那个红包的控件定义的地方,而这个方法就是借助AndroidSDK提供的一个工具:uiautomatorviewer.bat 这个工具位于SDK目录的tools目录下,我们可以点击运行,然后就可以看到这个界面了:


我们把设备停在聊天对话框中,然后使用这个工具,点击左上角那个按钮,可以进行当前桌面的界面布局分析,分析结果我们可以看到,这个色子是一个自定义控件:com.tencent.mm.ui.MMImageView,然后他的id是ae7,而这个值非常关键,后面就是用这个值来进行一步一步的跟踪,这里我们再多看一眼,就是这个表情区域的详细布局:


猜也猜到了,表情区域外面应该是一个ViewPager控件可以进行滑动切换,然后是每一页的控件用的是GridView进行卡片分割,那么这里就会给我们一个提醒了:后面的点击事件要么是在GridView的适配器类的getView方法中对view进行setOnClickListener添加的,要么是对GridView添加onItemClick事件的。

好了下面继续跟踪,因为有了那个色子控件的id了,下面咋们可以直接用这个id去全局搜索这个值了,不过这里有个问题就是微信其实本身做了资源的混淆,而这个混淆一方面是加大安全工作,一方面是减小包的大小功能,我们可以使用解压工具简单的查看他的apk文件中的res目录,会发现全是字母文件夹。而且从上面的id命名也可以看到,我相信微信工程师不可能会傻逼的把一个id命名成ae7了吧?到这里我们又要借助一个知识点了,而这个知识点在我之前的一篇文章中介绍了:Android中的应用攻防之战 在这篇文章中介绍了,我们在反编译apk之后,其实apk所有的资源id值都会保存在一个public.xml文件中,而这个文件是放在values目录下的,这个文件主要存放的就是资源的id值和name,type之间的对应关系,而反编译之后的代码中一般不会用R.id.xxx这种样式来访问控件,而是用转化之后的id值,这个值是十进制的,所以我们得先用上面那个ae7的id值去public.xml文件中找到对应的十六进制值:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ios and Android

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

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

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

打赏作者

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

抵扣说明:

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

余额充值