专栏首页BestSDK反编译apk,让微信丢骰子永远只出“6”

反编译apk,让微信丢骰子永远只出“6”

准备工作

需要一台已经root并且安装了Hook神奇Xposed框架。在Hook过程中最重要的一点就是要找到Hook点这也是最难的部分。找到Hook点之后编写Xposed模块就比较简单了。

本次实验使用的weixin版本是6513.

猜想假设

我们先猜测微信摇色子是怎么实现的。如果有简单编程经验的朋友肯定会猜测是random函数。

逆向分析 反编译apk

进行简单的准备工作:使用apktool反编译apk。使用Jadx打开微信的apk。微信较大,打开会比较慢。

找到色子对应控件的id

这一步可以借助AndroidSDK提供的一个工具:uiautomatorviewer.bat。可以看到下面的界面。

可以看到色子控件对应的id是cph。然后在public.xml中找到cph对应的值为0x7f100d28。

最后用这个值去R类里面找到真正使用的名称为bfq

查找Hook点

最难的部分就是查找hook点。在jadx中全局搜索bqf。显然这个findViewById()才是我们要找的东西,双击点进去看代码。如果有多个需要一个一个看。

上下查看这个类包含的内容。可以知道这是一个baseAdapter类。但是getView方法中没有设置点击事件。

全局搜索调用这个函数的地方进行查找。

双击进入代码查看,看到是SmileyGrid类型的控件。查看SmileyGrid定义。

对onItemClick中的方法一个一个分析,最后发现红框中才是我们要找的方法。

查看a函数代码,可以看到最下面两个是toast,显然不是。接下来就需要对剩下的分支进行查看。

查看之后我们知道是第一个也就是c c = ((com.tencent.mm.plugin.emoji.b.c) h.j(com.tencent.mm.plugin.emoji.b.c.class)).getEmojiMgr().c(cVar);

根据导入的包信息我们可以知道是com.tencent.mm.kernel.h并且类型是com.tencent.mm.plugin.emoji.b.c继续看这几处的代码进行分析。

下面是h.j的代码,返回是j。

下面是emoji.b.c的代码,我们可以知道是一个接口。

在做到这里的时候卡了好久没什么思路了,然后写了一个简单的xposed模块hook了com.tencent.mm.kernel.h的j函数看看返回的类型是什么。

将模块装安装重启后,打开weixin清空logcat然后点击色子,看到了下面的输出,可以知道输入参数的类型是com.tencent.mm.plugin.emoji.b.c返回的类型是com.tencent.mm.plugin.emoji.PluginEmoji。然后看看PluginEmoji的代码。

看到PluginEmoji包含了getEmojiMgr方法,重点看这个方法。

有了前面的经验,这里就在前面的那个模块也hook了这个方法看看返回的具体是什么。点击之后在上面的提示出现了另一行。返回的具体是com.tencent.mm.plugin.emoji.e.g再去看emoji.e.g的代码。

重点当然是分析emoji.e.g的c方法。代码如下。通过yH.movToPosition(dM)知道dM才是关键,继续追踪bf.dM的代码。通过导入的包可以知道来自com.tencent.mm.sdk.platformtools.bf。

看到这个Random函数还真是有点小激动啊。估摸应该是这里了。同样hook看一下输入参数和返回的参数是什么。

输入的参数都是5和0,输出的正好和点数相对应,3对应4点,1对应2点,1对应0点.

编写模块

找到随机数的返回点,接下来写hook模块就简单了。还有一点要注意的是,石头剪刀布也是用的这个随机函数。所以写的时候要注意一下。

最后体验一下效果如何。

这下终于不用拿外卖了。

总结

1. 找id:对于控件的点击事件可以用uiautomatorviewer定位到控件的id,然后通过public.xml和R类找到真正使用的类名和十六进制id。

2. 定位到关键代码:接下来最难的就是定位到关键代码,通常要花很多时间,多练习能够提高速度。

3. 编写xposed模块:找到关键函数以后,编写模块就比较简单了。有些app有分包的时候要注意一下。

本文分享自微信公众号 - BestSDK(bestsdk)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Audioburst:开放API,助力开发者调用AI音频搜索引擎

    这款基于浏览器的新搜索引擎只是Audioburst技术的最新界面。公司还提供独立的音频转录服务,以及一个API——可以让应用程序开发人员将Audioburst的...

    BestSDK
  • 声网SDK开发者数量超10万,发起全球首个RTC生态圈Agora Plus

    全栈实时通信云服务商声网Agora.io(以下简称声网)在RTC 2017实时互联网大会上宣布,声网SDK服务全球超过10万+开发者,触达终端数10亿+,日通话...

    BestSDK
  • 声音那么多,总有你不想听的。智能耳机推出杂音过滤系统

    image.png 耳机现在已经成为人们的常用设备之一,但是如何在上班的路上听到无杂音的声音一直都是很多用户所期待的。不过这个问题近日被HereActiveLi...

    BestSDK
  • 如何让微信丢骰子永远只出“666”

    每次宅寝室一起点外卖谁下去拿都是个大问题,小编寝室一般选择微信色子谁小谁去拿,但是小编运气不太好 总是输,所以寻思着能不能每次都让色子是6点,皇天不负有心人,果...

    FB客服
  • 前端-纯前端实现人脸识别-提取-合成

    最近火爆朋友圈的军装照H5大家一定还记忆犹新,其原理是先提取出照片中的面部,然后与模板进行合成,官方的合成处理据说由天天P图提供技术支持,后端合成后返回给前端展...

    grain先森
  • 面试java后端面经_3

    你答:你知道吗,我听说过一个这样的故事,讲的就是有一个小女孩和一个男孩在一起,小男孩呢很不幸是位聋哑人,虽然如此,但是他们的日子过得特别的美满。有一天小女孩因...

    用户6055494
  • 面试问题

    是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的...

    大学里的混子
  • 嘉年华专访 | 国际上智能运维研究

    张圣林,南开大学助理教授,于2017年7月获清华大学工学博士学位(计算机科学与技术专业)并获得清华大学优秀博士学位论文,导师是刘莹老师和裴丹老师。

    数据和云
  • Spring的数据访问:Spring Data和JPA | 云原生应用开发系列2

    在本实验中,将进行Spring Data与JPA一起使用来检索数据并将其保存到数据存储区。

    魏新宇
  • Netty 系列九(支持UDP协议).

    1、无连接协议,没有持久化连接; 2、每个 UDP 数据报都是一个单独的传输单元; 3、一定的数据报丢失; 4、没有重传机制,也不管数据报是否可达; 5、速度比...

    JMCui

扫码关注云+社区

领取腾讯云代金券