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

简介: 利用Xposed Hook掉微信猜拳和投骰子

引言



关于这节,反编译apk,看smail代码,ddms轨迹跟踪方法调用: 打开DDMS选择自己微信进程:com.tencent.mm,点击下这个箭头的图标



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



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



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


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


  • Math.random()


  • new Random()


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


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


官方地址github.com/skylot/jadx


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


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


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


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


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



再接着使用as打开。



再接着就要进行分析了。


2.随缘分析


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



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


  • 第1个,排除了,生成0到100的整数,而且这里有个Xfermode东西,猜测是进度条渐进加载的东西。



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


  • 第2个,updater排除


  • 第3个,mapsdk排除


  • 第4,5个,offline排除


  • 第7个,*一个这样的数字,不是正常的值...排除


  • 第8个,ShakeEggAnimFrame,直译,摇蛋动画Frame,猜测是摇一摇那个页面的东西..



  • 第9,10,11,因为名字关系,同样排除。


  • 第12个,ChattingAnimFrame,名字有点感觉,聊天动画Frame,方法也有点像,待定。


  • 第13,14 进去看看就知道不是了


  • 第15,16个,点进去看到包名,luckmoney,跟发红包相关的,排除;



  • 第17个,mapsdk包名,应该和腾讯地图有关,排除


  • 第18个,BallonImageView,Ballon翻译毛玻璃,排除。


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


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



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



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



那么就剩下第三个了:



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


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


相关文章
|
图形学
Unity小游戏——使被砍中的怪物四处飞散
Unity小游戏——使被砍中的怪物四处飞散
|
Java
Java福尔摩斯的约会大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了
Java福尔摩斯的约会大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了
135 0
Java福尔摩斯的约会大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了
|
存储
妈,旧电脑连加法都算错了,我要换新的
妈,旧电脑连加法都算错了,我要换新的
|
监控 中间件 Unix
对不起,学会这些知识后我飘了(四)
我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了。在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远,而计算机基础知识又是重中之重。下面,跟随我的脚步,为你介绍一下计算机底层知识。
90 0
对不起,学会这些知识后我飘了(四)
|
存储 编解码 算法
对不起,学会这些知识后我飘了(三)
我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了。在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远,而计算机基础知识又是重中之重。下面,跟随我的脚步,为你介绍一下计算机底层知识。
120 0
对不起,学会这些知识后我飘了(三)
|
存储 缓存 程序员
对不起,学会这些知识后我飘了(二)
我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了。在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远,而计算机基础知识又是重中之重。下面,跟随我的脚步,为你介绍一下计算机底层知识。
128 0
对不起,学会这些知识后我飘了(二)
|
存储 算法 安全
对不起,学会这些知识后我飘了(五)
我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了。在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远,而计算机基础知识又是重中之重。下面,跟随我的脚步,为你介绍一下计算机底层知识。
82 0
对不起,学会这些知识后我飘了(五)
|
存储 缓存 小程序
对不起,学会这些知识后我飘了(一)
我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了。在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远,而计算机基础知识又是重中之重。下面,跟随我的脚步,为你介绍一下计算机底层知识。
78 0
对不起,学会这些知识后我飘了(一)
|
数据库 Android开发