[关闭]
@coder-pig 2018-04-26T16:11:43.000000Z 字数 2507 阅读 2107

抱歉,Xposed真的可以为所欲为——4.猜拳投骰子你能赢算我输

2018


一句话概括本文


引言

关于这节,我是看代码看到头皮发麻,逆向APP并没有想想中的简单,
特别是微信这种,要投入的学习成本好高...而且最近事比较多,怕是
要断更一会儿了,后续闲下来再去研究吧,折腾本节这个简单的东西,
我花了差不多两天,反编译apk,看smail代码,ddms轨迹跟踪方法调用:

打开DDMS选择自己微信进程:com.tencent.mm,点击下这个箭头的图标

弹出个是否跟中的对话框,选中,接着就可以开始跟踪了,

界面上点击下发送猜拳的表情,等随机的结果定格之后再按一次,停止跟踪。

然后find输入搜索的关键字,比如我试过:
click,emoji,gif等,一直试一直试,昨天试了一天,并没有得出个所以
然来,心情巨差...今天下午突发奇想,从另外一个角度去取巧,人品不错
折腾个所以然来了。

Java中的产生随机数的方法基本都是两种:

可以以这个为突破点试试,利用Jadx把dex文件转换为java文件


1.Jadx把dex文件转换为java文件

官方地址https://github.com/skylot/jadx

下载编译源码(最后一步,windows下直接运行gradlew.bat):

  1. git clone https://github.com/skylot/jadx.git
  2. cd jadx
  3. ./gradlew dist

等编译完就能用了,cd到build/jadx/bin目录下,你可以使用下述
两个命令,反编译源码(out是输出文件夹,可自己修改)或者直接查看

  1. jadx -d out xxx.apk
  2. jadx-gui xxx.apk

接着呢,普通的APK可以这样整,但是呢,如果微信apk这样搞,那就恭喜你了
过一会儿就卡死了...我的操作是直接解压的apk,然后把里面六个.dex文件
依次调用jadx -d xxx xxx.dex这样,分别反编译到不同的文件夹,最后
放到一个文件夹里

再接着使用as打开。

再接着就要进行分析了。


2.随缘分析

上面讲了,随机基本就那两种套路,ctrl + shift + f 全局搜索 Math.random\(
这里用了正则~

18个,不算太多,一个个打开猜测一波:

接着好几个看名知意的(最喜欢这种了~)

到此就可能第12个,ChattingAnimFrame 有一定可能是,mark先。

接着全局搜:= new Random\(\),33个,不算多,也不算少,
排除法一一排除,包名,类名,里面的注释,随机是否合理等。

限于篇幅,就不一一列举了,最后定义到这个类:bh.java,然后这个类
里有3个包含Random,依次排除,第一个字符拼接的,肯定不是:

第二个,方法里不加具体整数的话,返回的会是一个随机的整数,排除

那么就剩下第三个了:

综上,随机生成结果的可能就是上面两个地方了。

再接着,再考虑一个问题,猜拳就三种情况,石头剪刀布,这个随机值,
大部分开发都会用0,1,2这样的表示,当然你说float了,再做下向上或者
向下取整,maybe?不过感觉这样的小功能还做取整就有点繁琐了,so,
先试试第二个地方吧。接下来编写一波xposed代码,Hook掉这个方法,
试试Log把这个方法的参数和返回结果都打印出来,如果投骰子的时候
回调了,证明我们的猜想没错。


3.代码试错

简单的Hook下这个方法,然后把参数和结果都打印出来,最担心的是这个
方法没调用...怀着忐忑的心情安装重启

点击猜拳,在看到logcat打印出来的日志后,我不禁泪流满面,这两天的
折腾没有白费,哭哭!!!

试了几次,终于把剪刀石头步都集齐了!!!

第一个参数是固定值2,第二个参数也是固定值0,第三个参数是0,1,2
分别代表:剪刀,石头,布,清理下日志,看看骰子是不是也会调用这
个方法?

日志如我们预想的输出了,棒!

第一个参数是固定的5,第二个是固定的0,第三个参数从0-5,依次对应
骰子的1-6,嗯,反编译的Java代码:

看到这,基本就一清二楚了,利用nextInt()方法,随机生成一个特定范围里
的整数,比如想生成2-10的整数,第一个参数为10,第二个参数为2,
接着nextInt(10-2) + 1= 9,即生成0-9之间(不包括8)的一个整数,接着+1,
范围变成了从0-9,接着在加上2,此时就变成2-11的值。
前面的Assert是断言,如果第二个参数大于第一个参数抛出异常!

到此就弄得明明白白了,接下来改下界面,整理下代码,运行下~


4.运行试试

接着随便


5.顺带调戏下UI妹子310CA51D08C272F63298B5E91C608B20.jpg-1912.4kB

抱歉,小开发仔真的可以为所欲为,顺道用这个模块调戏了一下公司的UI妹子

场景是这样的
猜拳输的吃辣花生的士力架,后面因为怀疑我开挂,就投骰子

你要套路着别人先出,你再后出,
然后偶尔平局,对方不信可以开始视频录制,我真的没有开挂,2333
(顺带消费以下过世主播...)

调戏过程


小结

本节Hook了以下表情里的猜拳和投骰子表情,可以随机出你想要的,
Hook的过程也是头皮发麻,APP逆向真是门技术活,还有耐心,细心,
至少我跟了两天,眼睛都花了,...而且有很多工具还没去尝试,自己瞎
整心累,可能是我一开始就直接拿微信这种大项目来开刀,所以挫败感
满满吧,So,暂时弃坑,哪天突然想整再回来更新吧~抱歉



添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注