一句话概括本文

人品大法利用Xposed Hook掉微信猜拳和投骰子,让你无需再担忧拿外卖和搞卫生。


引言

关于这节,我是看代码看到头皮发麻,逆向APP并没有想想中的简单, 特别是微信这种,要投入的学习成本好高...而且最近事比较多,怕是 要断更一会儿了,后续闲下来再去研究吧,折腾本节这个简单的东西, 我花了差不多两天,反编译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把这个方法的参数和返回结果都打印出来,如果投骰子的时候 回调了,证明我们的猜想没错。


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小姐姐

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

场景是这样的:猜拳输的吃辣花生的士力架,后面因为怀疑我开挂,就投骰子 结果肯定是稳赢啊。套路别人先出就好,偶尔平局,让对方没那么怀疑,实在不信 的可以录一波屏,我卢某真的没有开挂,2333(顺带消费以下过世主播...)

调戏过程


小结


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


附:Hook部分代码(都可以在:github.com/coder-pig/C… 找到):

                val c2 = XposedHelpers.findClass("com.tencent.mm.sdk.platformtools.bh",lpparam.classLoader)XposedHelpers.findAndHookMethod(c2, "eE", Int::class.java, Int::class.java, object : XC_MethodHook() {@Throwsoverride fun afterHookedMethod(param: MethodHookParam) {xsp.reload()when(param.args[0]) {2 -> {if(xsp.getBoolean(Constants.IS_CQ_OPEN, false)) {val cq = xsp.getInt(Constants.CUR_CQ_NUM, 0)param.result = cq}}5 -> {if(xsp.getBoolean(Constants.IS_TZ_OPEN, false)) {val tz = xsp.getInt(Constants.CUR_TZ_NUM, 0)param.result = tz}}}Log.e("TTZ", "" + param.args[0] + "~" + param.args[1] + "~" +param.result)super.afterHookedMethod(param)}
复制代码

原文链接: https://juejin.im/post/5ae1fe0e518825672a02a248

抱歉,Xposed真的可以为所欲为——4.猜拳投骰子你能赢算我输(转载)相关推荐

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

    抱歉,Xposed真的可以为所欲为--4.猜拳投骰子你能赢算我输 标签: 2018 一句话概括本文 人品大法利用Xposed Hook掉微信猜拳和投骰子,让你无需再担忧拿外卖和搞卫生. 引言 关于这节 ...

  2. 抱歉,Xposed真的可以为所欲为——2.改为OV机型流畅玩耍高帧率王者农药

    抱歉,Xposed真的可以为所欲为--2.改为OV机型流畅玩耍高帧率王者农药 标签:2018 一句话概括本文: 只需20行代码,利用Xposed Hook掉王者农药王者获取手机系统机型的方法, 改成O ...

  3. 抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位

    抱歉,Xposed真的可以为所欲为--3.微信运动占领封面出售广告位 标签: 2018 一句话概括本文 简单的二十行代码,利用Xposed Hook掉计步传感器,以此达到刷步数的目的. 引言 现在的年 ...

  4. 抱歉,Xposed真的可以为所欲为——6.你的表白撤不回了

    抱歉,Xposed真的可以为所欲为--6.你的表白撤不回了 标签: 2018 一句话概括本文 一步步Hook微信,实现微信消息防撤回. 引言 上周六下班,与往常一样,和公司同事去吃个饭,然后打个球,在 ...

  5. 抱歉,Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用

    抱歉,Xposed真的可以为所欲为--5.我自己刷的Xposed凭什么不给我用 标签: 2018 一句话概括本文 分析定位排查下厨房APP检测手机是否安装了Xposed框架的方法,然后一步步 Hook ...

  6. 抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位(转载)

    一句话概括本文 简单的二十行代码,利用Xposed Hook掉计步传感器,以此达到刷步数的目的. 引言 现在的年轻都喜欢用各种各样的计步APP来记录每天的步数,微信自带的 微信运动因为用户群体基数大, ...

  7. 抱歉,Xposed真的可以为所欲为——6.你的表白撤不回了(转载)

    一句话概括本文 一步步Hook微信,实现微信消息防撤回. 引言 上周六下班,与往常一样,和公司同事去吃个饭,然后打个球,在支付的时候突然却意外发现我的微信号 被封了,出现了一个这样的页面(别人的截图, ...

  8. python 广告牌_抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位...

    一句话概括本文 简单的二十行代码,利用Xposed Hook掉计步传感器,以此达到刷步数的目的. 引言 现在的年轻都喜欢用各种各样的计步APP来记录每天的步数,微信自带的 微信运动因为用户群体基数大, ...

  9. 抱歉,Xposed真的可以为所欲为——1.基础知识储备(转载)

    一句话概括本文: 本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法. 引言: 前面用Python利用itchat库撸了篇: 小猪的Python学习 ...

最新文章

  1. 业务层面缓存穿透的解决方案
  2. lisp 线性标注自动避让_自动化数据增强:实践、理论和新方向
  3. 定位技术GPS/A-GPS/LBS/WIFI定位介绍
  4. python中打印二维列表数据
  5. iptables限制最大连接数_性能调优,让你的服务器更强大!增加TCP连接最大限制...
  6. 美团开源 Logan Web:前端日志在 Web 端的实现
  7. 异常捕获,返回错误码code给前端
  8. Linux 命令 - curl: transfer a URL
  9. Bailian2871 Bailian3682 整数奇偶排序【排序】
  10. android gradle NDK简介
  11. pimple学习:源码解读
  12. AWS 云产品和云计算基础知识详解
  13. Python制作PPT
  14. 教程 | 扁平物体的摄影测量重建方案
  15. node.js的下载安装详细步骤(还有安装配套的express、淘宝镜像、webpack、Vue)
  16. linux 之top命令详解
  17. 修改谷歌和火狐浏览器滚动条的样式
  18. 【苹果推送】imessage软件安装iPhoneDeveloper家庭组建
  19. 作业十一:安装关系型数据库MySQL
  20. mysql时间加10分钟_将MySQL日期时间格式添加10分钟?

热门文章

  1. 微信小程序-酒店、餐厅订座系统源代码,酒店、餐厅预约系统源代码,含详细安装使用手册
  2. linux服务器安全-软件包安装
  3. 设计模式 06 适配器模式
  4. 专利快速审查通道流程
  5. 《开源硬件创客——15个酷应用玩转树莓派》——1.2 树莓派基本介绍
  6. js截图保存俩种方式
  7. 微软抵御至今最强DDoS攻击、美国联合30余个国家打击全球勒索组织|10月14日全球网络安全热点
  8. 哪些行业需要服务器支撑
  9. docker安装OSSRS流媒体直播服务器
  10. 计算器html js php代码,javascript如何实现计算器功能