工具:JEB ,apkiller,AS,smaliIDE(动态调试)

BuildProp Enhancer 是一个Xposed软件,可以让apk在不开启debugable的时候进行动态调试

在你无从下手的时候我使用DDMS中的traceView工具来帮助我们减少工作量。
打开微信界面

打开DDMS,在divices对应的启动应用列表中选择腾讯微信对应包名(com.tencent.mm

如果列表太多,可以使用adb shell dumpsys activity top 查看当前android手机最前面的界面的pid和一些信息

然后在回到ddms顺着pid查找即可

如果在这里看不到应用,是因为app没有在清单文件打开debugable=true,在这里你可以选择以下两种方式。

1 使用apktools反编译 修改清单文件 在装回去(微信没有加壳,就算加了估计大家也可以在网上找到对应退壳教程)

2 使用 BuildProp Enhancer ,装载xposed开启后,在其启动界面勾选和配置如下

记得重启手机

3 刷机修改android系统源码中的 ro.debugable=1ro.secure=1(不推荐)

正式开始使用traceView工具(我发现很多人居然不知道这个工具的名字= =但却使用过。)

鼠标点击Start Method Profiling(开始方法性能分析,对应上图红色箭头按钮)。
然后弹出一个界面,这个界面就是要问你要不要设置采样率(每隔多少毫秒进行一次方法堆栈记录(就是记录方法的使用过程时间信息)统计)

然后点击微信界面摇塞子

再次点击右上角按钮

完成后

我们这里点击了一个塞子对吧?那必然触发android点击事件回调。关于事件分发机制这里不做过多讲解 ,我们在界面最下方的filter 输入click

然后发现其Children有两个分别 是self********performItemClick(Landroid/view/View;IJ)Z**

根据分析只能是第二个选项然后点击********performItemClick(Landroid/view/View;IJ)Z**

我们发现有两个函数 占用cpu时间,所以我们需要跳去两个函数的父函数进行静态分析。

这里我们用jeb2.2进行反编译成java源文件导入Android Studio( 后续下文简称AS)

如果提示 JAVA heap 之类的错误 修改jeb目录下 bin/jeb.ini

jeb3.0+请修改批处理文件xxx.bat

然后导入AS

接下来再回过头来看看我们要跳到父函数()

按下CTRL+SHIFT+N 输入对应类文件即可


在这里可以查看类结构。我们这里选择前面分析父函数

可不看部分:方法前面有个synthetic注释 。内部类私有属性或者方法被外部类访问时会成成synthetic类或者synthetic方法。比如你会看access$001等。
如何证明? 反射机制就有这个相关api
Method method;
method.isSynthetic()

为什么圈出两个函数?因为我们前面tracView不是说显示两个函数占用Cpu时间之和为100%嘛(肯定有喷子说不是还有其他函数调用吗为什么没有显示占用CPU?答不在采样频率窗口期)。

又因为后一个函数要使用前面一个的返回值,所以很用可能前面才是关键。
所以我们这里跳转到实现c函数处,在AS双击c函数只会跳转到接口或者抽象类

((c) g.n(c.class)).getProvider().c(emojiInfo);

实现类可以在tracview看到了

如法炮制跳转到c函数实现

在Traceview攻击点击这个函数继续向下分析

同理有三个子函数分别占用cpu时间比,那么在AS跳转到父函数 ****emoji.e.g.c*****

先分析第一个方法返回Cursor对象,这个对象大家在做撸码DAO层的时候应该不陌生把?很明显跟这个没关系,第二个方法同理Du.getCount(),那么我们最后肯定落在第三个方法上

第一个方法:

   Cursor Du = i.aEA().igx.Du(bi.getInt(emojiInfo.getContent(), 0));

第二个方法

Du.getCount()

第三个方法

 int eF = bi.eF(Du.getCount() - 1, 0);

点击进入eF函数

分析到这里发现一个断言和一个用于生成随机数的函数。我们假设是不是用这里随机函数生成塞子点数呢?我们继续返回****emoji.e.g.c*****这个函数回头看看

如何证明我们说的呢?
我们在eF函数加入两个函数,一个log,和一个打印方法堆栈函数

  public static int eF(int i, int i2) {Thread.dumpStack();Assert.assertTrue(i > i2);int rel = new Random(System.currentTimeMillis()).nextInt((i - i2) + 1) + i2;Log.d("FMY", "eF() called with: i = [" + i + "], i2 = [" + i2 + "] ,rel =["+rel+"]" );return rel;}

然后反编译回去,在安装到手机点击塞子查看日志(log)
当然如果能直接操作java代码在回编译改多好,上面对应smali代码(使用java2smali)

.method public static eF(II)I.registers 6.param p0, "i"    # I.param p1, "i2"    # I.prologue.line 17invoke-static {}, Ljava/lang/Thread;->dumpStack()V.line 19if-le p0, p1, :cond_4fconst/4 v1, 0x1:goto_6invoke-static {v1}, Ljunit/framework/Assert;->assertTrue(Z)V.line 20new-instance v1, Ljava/util/Random;invoke-static {}, Ljava/lang/System;->currentTimeMillis()Jmove-result-wide v2invoke-direct {v1, v2, v3}, Ljava/util/Random;-><init>(J)Vsub-int v2, p0, p1add-int/lit8 v2, v2, 0x1invoke-virtual {v1, v2}, Ljava/util/Random;->nextInt(I)Imove-result v1add-int v0, v1, p1.line 22.local v0, "rel":Iconst-string v1, "FMY"new-instance v2, Ljava/lang/StringBuilder;invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()Vconst-string v3, "eF() called with: i = ["invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v2invoke-virtual {v2, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v2const-string v3, "], i2 = ["invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v2invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v2const-string v3, "] ,rel =["invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v2invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v2const-string v3, "]"invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v2invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v2invoke-static {v1, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I.line 23#删除 其他line同理 全部删除return v0.line 19#删除 其他line同理 全部删除.end local v0    # "rel":I:cond_4fconst/4 v1, 0x0goto :goto_6
.end method

删除所有java2smali工具生成的行号 就的.line xxx

这里我用apkkiller修改反编译回去即可。

然后在安装回手机点击 查看日志

在这里打log是为了大家后面方便改塞子和猜拳代码的观察和修改

最后大家生活愉快。

另一种思路:全局搜索 Ramdom 关键字然后逐个分析,但是我不推荐,前提是你知道他们开发者使用了这个函数用来生成塞子关键代码

微信6.6.7版本摇塞子破解思路(居多图)相关推荐

  1. 非Xposed版 修改微信摇塞子

    本文继续上篇文章 微信6.6.7版本摇塞子破解思路(居多图) 本文不再粘贴java转smali语法详细过程,只是讲诉下思路 ​ Xposed版本 不是所有手机环境都支持,所以我才想试试直接反编译代码写 ...

  2. php微信二维码签到墙互动,微久信微信墙2017全新版本教程第二篇:微信签到/扫码3D签到/微信手绘签到...

    微久信微信墙这回给大家带来的是全新的微信扫码签到教程: 可以实现多种签到墙效果: 1.普通微信签到:签到墙上显示扫码签到的客户头像和昵称/姓名: 2.微信3D签到:签到头像可以组成文字.LOGO.图形 ...

  3. android最新版本9.1,微信9.1.0版本

    微信9.1.0版本是微信的最新版本,这个版本新增了超多全新的实用功能,让用户朋友们的聊天更加便捷,语音输入更加准确,轻轻松松畅快聊天,提高你的生活质量,如今,微信已经融入了用户朋友们的生活,微信也在不 ...

  4. 微信5.0 Android版飞机大战破解无敌模式手记

    微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...

  5. 摇骰子小程序源码_喝酒聚会怕冷场,就找摇塞子小程序!

    现在的生活,总少不了要大大小小的聚会,聚餐.以前聚会大家划拳摇骰子,气氛好.主要以前手机没那么发达,玩不了什么.但是现在就不一样了,走到哪大家都跟低头族一样,捧着自己的手机,看这个玩那个.连聚会大家也 ...

  6. iOS13Beta6发布,更流畅?/微信8.8智慧生活摇免单/1元充10元话费,以上为今日内容...

    1 iOS13beta6 今天凌晨,苹果推送了 iOS 13 beta 6 开发者版本,公测版尚未推送,本次开发者预览版beta 6更新更新包大小为 505.1MB,(机型不同更新包大小略有差异)与b ...

  7. 微信小程序(应用号)调试工具内测破解方法

    摘要: 微信小程序如果个人的话.没有内测和申请的条件.就可以使用测试的. 官网提供的认证http://wxopen.notedown.cn/product/renzheng.html#%E4%B8%8 ...

  8. jeewx 微信管家 - 举办商业版本免费试用活动

    jeewx 微信管家 举办商业版本免费试用活动 1,关注微信账号:jeecg_scott 2,输入:"jeewx商业版本试用活动: 你的邮箱(例如:zhangsan@11.com)" ...

  9. 苹果4s手机装 java微信_苹果4s版本过低不能下载微信怎么安装旧版本的

    苹果4s版本过低不能下载微信怎么安装旧版本的以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 没越狱的话就只能连接itun ...

最新文章

  1. SQL 基礎語句-case
  2. 位操作符:位与、|位或、^异或、~求反、左移位、带符号右移位、无符号右移位...
  3. 备份oracle中的大表
  4. 机器学习笔记:FLOPs
  5. tcpwrapper的使用方法
  6. MySQL substring()函数
  7. 计算机网络——链路层之PPP协议和HDLC协议
  8. WinCE5.0下直接写屏操作与函数 CreateDIBSection() 的使用(转)
  9. 构建官方CoreOS COSA 镜像并构建 CoreOS
  10. java js 解析器_graphqljs具有多个参数的解析器
  11. Smarty中直接加JS代码和将JS代码写在literal标签里
  12. 工具开发:勿以善小而不为
  13. 飘云阁(PYG)番茄插件 弹窗清除
  14. android icon换不掉图标文件夹,如何替换android系统中的文件夹图标
  15. STM32标准库与HAL库全系列下载地址
  16. ch340t电路_USB转串口CH340各封装官方原理图、PCB参考电路图下载2018-3-23
  17. js复制图片文字图文分享到微信/QQ,插件clipboard.js的应用案例
  18. T-SNE可视化高维数据,亮瞎审稿人
  19. 搭建完整的开发环境--Linux下的开发
  20. 浅谈802.15.4协议

热门文章

  1. 运维工程师需要掌握什么技能?有哪些要求?
  2. win10总显示打印机未连接服务器,win10安装打印机一直未响应。。。
  3. 基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率
  4. app inventor 2022离线版下载使用教程
  5. Python爬取2万条相亲数据!看看中国单身男女都在挑什么
  6. 币圈炒币只有四种人能赚到钱其中之一是使用炒币机器人的玩家
  7. 数据库sql课后总结
  8. P2006 赵神牛的游戏
  9. 企业简介和公司介绍快闪PPT模板
  10. 设计师必看的十部电影