返回列表 发新帖

【已修复闪退】甲壳虫ADB助手1.3.1最新版解锁全部会员功能

  [复制链接]

13

主题

482

回帖

3517

积分

大学生

Rank: 5Rank: 5

金币
1222
好评
21
信誉
100

考神MT论坛最佳新人

QQ
发表于 2024-8-4 14:30:54 | 显示全部楼层 | 阅读模式  来自 重庆
本帖最后由 chenxin 于 2024-8-7 09:02 编辑

【说明】
本贴不仅说明了逆向方法,同时记录了逆向过程,故文字部分较多,想看的需要耐心一点了,也算给大家在破解时提供一些思路。
若不想看过程的话,直接看修改解锁部分的 6、7、10 步即可
【前言】
之前在求助帖看见了有说签名过不了的,于是就用mt的去签试了一下,没有闪退,想着下载下来了于是就打算看看怎么弄掉会员。
本文操作需要的工具和成品我都放在文尾了
【逆向过程】
【阶段1】
1. 在打开这个软件时,看到了设置中的未解锁字样,直接mt搜索 “未解锁”关键词,定位到了SettingsActivity的OnResume()方法。
2. 发现时调用的 m.J方法,于是算法助手一顿拦截修改返回值,直接变成已解锁了。
刚开始以为事情结束了,但当我点击fastBoot功能的时候,还是弹了一个未解锁的框,而且这个框算法助手还定位不到。
【阶段2】
  1. 这个时候我就纳闷了,于是又使用开发者助手定位控件id,发现了弹窗调用的方法是c.c.a.z3.h类,然后用算法助手跟踪,发现是在native方法调用的。
  2. 一看是native,我直接换方向使用ProxyPin去抓使用订单解锁的响应,不过哪个输入框是根据微信的订单号长度来的,如果长度不符合则不会有任何反应,这也是我尝试了几次才发现的。
  3. 造假的订单号后我查看ProxyPin的响应,发现有result_code,我使用请求重写,修改这个值,我改成1是验证失败,这个时候我并没有发现端倪,以为是result_code有其他的值,但是我改成其他的值任何提示都没有,这个时候我觉得这个方法已经不行了。
【阶段三】
1. 既然这种方式不行,那只有看so了,于是我用IDA导入唯一的 "libadbhelper.so",因为上面有一个m.J方法是native方法,所以我就直接先查看的这个函数;然后使用反汇编,发现这里面调用了很多Java中的方法,于是我想查看具体调用的哪些方法,但是它居然对字符串加密了,mt编辑so也不能搜索任何字符值。于是看了看雪的几篇帖子,按着方法操作了但是并没有效果。
  2. 看雪无果后,我搜索so解密方法无果,便换一种思路搜Lsposed dump so插件,便找到了FunELF这个插件,这个工具我放在文尾了。这一次,成功地拿到了字符串解密后的so,于是用UN管理器查看,我尝试使用IDA查看,但是还是不能查看解密后的字符串,便直接使用UN管理器了(无会员版)。
  3. 解密后,我就查看之前的m.J方法,尝试找到判断是否会员的地方,奈何太菜看不懂汇编啊,但发现了有调用getString的地方,那肯定直接猜测是SharedPreferneces本地存储了。
【阶段四】
1. 发现了是SharedPreferences,于是我又把目光聚集到了订单解锁的地方,于是找到了校验订单号的native方法 "c.c.a.i2.run()",我使用UN管理器打开这个函数,直接搜索cmp指令,发现会将result_code 和 1、2比较,2是直接失败的,那么成功校验的就是1了,但是主要的逻辑却看不懂,在翻阅这个函数的汇编代码的时候,解密后的so会显示调用了哪些Java方法,注意到了 "b.s.m.K" 这个方法,这个方法应该是比较两个值,一个是响应中的result中的值,一个是内置的值,可能是算法加密生成的,这个K也是一个native方法,应该是加密验证之类的。
  2. 我直接算法助手暴力返回 true,便能成功解锁了。
【修改解锁】
  • 经过上面的分析,发现关键的地方是 订单号满足长度->发送请求->验证响应中的result_code->将result值和内置的一个值加密比较->成功后向SharedPreferences中putString两个字符串,一个是sign值、一个是verify_code、一个是payment这个是缓存订单号的。
  • 有了这样的流程,便想在app第一次启动的时候,调用SharedPreferences类强行加入sign和verify_code,因为在上面的步骤中我已经解锁成功了,有正确的这样的值
  • 发现甲壳虫在启动的时候会弹窗用户协议,那么直接在弹窗这些写逻辑就行了,只会在第一次启动的时候插入SP。
  • 根据弹窗定位,找到了这个方法 -》 "b.b.c.i$a.h",那么直接在这里完成就可以了。
  • 想使用SP,那么必须获取Context和对应的SP,在上面分析的过程中,发现了工具类 b.s.j的静态方法a,传入Context就可获取
  • 要插入的 smali代码 “b.s.j”类
    1. # 声明Context成员变量
    2. .field public final context:Landroid/content/Context;

    3. # 构造器对定义的Conext类型变量赋值 <init>方法中

    4. iput-object p1, p0, Lb/b/c/i$a;->context:Landroid/content/Context;


    5. # 在h方法体开始时插入(456行)
    6. # 注意修改寄存器的数量
    7. .registers 8
    8. const-string v1, "sign"

    9. const-string v2, "verify_code"

    10. const-string v3, "CNQzr9CPhMwyW9kxfL3N-A"

    11. const-string v4, "rymrvt"

    12. iget-object v5, p0, Lb/b/c/i$a;->context:Landroid/content/Context;

    13. invoke-static {v5}, Lb/s/j;->a(Landroid/content/Context;)Landroid/content/SharedPreferences;

    14. move-result-object v5

    15. invoke-interface {v5}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    16. move-result-object v5

    17. invoke-interface {v5, v1, v3}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    18. invoke-interface {v5, v2, v4}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    19. const-string v3, "payment"

    20. const-string v4, "0000000000000000000000000"

    21. invoke-interface {v5, v3, v4}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    22. const-string v3, "server_url"

    23. const-string v4, "https://124.221.36.17/adbhelper/pro"

    24. invoke-interface {v5, v3, v4}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    25. invoke-interface {v5}, Landroid/content/SharedPreferences$Editor;->apply()V
    复制代码

  • 然后修改上面说的校验加密验证的K方法,直接将native方法改为 Java方法,smali修改如下:
    1. # 直接将 b.s.m.J方法替换成如下:
    2. .method public static K(Ljava/lang/String;Ljava/lang/String;)Z
    3.     .registers 3

    4.     const v0, 0x1

    5.     return v0
    6. .end method
    复制代码

  • 这样Java层的就修改完成了,我以为这样就可以了,但还是不行,怀疑可能是在验证的时候有其他的存储手段做验证,具体就不知道怎么处理了。
  • 上面这种方法显然不行,那就只有第一次进软件的时候进行手动解锁了,这便需要修改so了。
  • 使用UN管理器加载原始的so文件,找到 "Java_c_c_a_r2_run"函数,过滤指令 "#1" ,找到 cmp 那一行 ,点击,将#1改为#2。然后保存编辑,然后替换重新签名即可

【总结】
  1. 其实上面的h()方法在修改的时候,我们只需要放入 payment这个key到SharedPreferences就可以了,反正其他的都没啥用,大家可以直接删掉无用的smali代码。
  2. 暂时还未找到直接修改解锁版的地方,需要手动解锁,大家若有更好的方法欢迎评论区讨论交流。
  3. 需要的工具和最后的修改包我放在后面了
  4. 使用成品时需要到解锁页面手动点击解锁即可
【使用的工具】
【成品】



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
已有7人评分好评 金币 理由
smmyou + 1 + 1 很给力!
wmee + 1 + 1 很给力!
小石头1028 + 1 + 1
DK9527 + 1 + 1 赞一个!
安乐 + 1
hixanny-MT + 1 + 1 赞一个!
AcE77505 + 1 + 1

查看全部评分 总评分:好评 +6  金币 +7 

回复

使用道具 举报

50

主题

728

回帖

4678

积分

大学生

Rank: 5Rank: 5

金币
2481
好评
1
信誉
100

MT论坛帅哥考神

发表于 2024-8-4 14:39:01 来自手机  | 显示全部楼层  来自 四川
感谢分享  不过打开3秒 闪退
回复

使用道具 举报

13

主题

482

回帖

3517

积分

大学生

Rank: 5Rank: 5

金币
1222
好评
21
信誉
100

考神MT论坛最佳新人

QQ
发表于 2024-8-4 14:39:50 来自手机  | 显示全部楼层  来自 重庆
kjkuang 发表于 2024-8-4 14:39
感谢分享  不过打开3秒 闪退

你是安卓几呢,我Android14正常打开诶
回复

使用道具 举报

67

主题

3622

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1927
好评
1
信誉
100
发表于 2024-8-4 14:40:09 来自手机  | 显示全部楼层  来自 广东
感谢分享!
回复

使用道具 举报

50

主题

728

回帖

4678

积分

大学生

Rank: 5Rank: 5

金币
2481
好评
1
信誉
100

MT论坛帅哥考神

发表于 2024-8-4 14:40:40 来自手机  | 显示全部楼层  来自 四川
chenxin 发表于 2024-8-4 14:39
你是安卓几呢,我Android14正常打开诶

Android12  小米12s
回复

使用道具 举报

0

主题

507

回帖

6668

积分

硕士生

Rank: 6Rank: 6

金币
2647
好评
19
信誉
98
发表于 2024-8-4 14:42:01 来自手机  | 显示全部楼层  来自 广东
感谢分享!
回复

使用道具 举报

13

主题

482

回帖

3517

积分

大学生

Rank: 5Rank: 5

金币
1222
好评
21
信誉
100

考神MT论坛最佳新人

QQ
发表于 2024-8-4 14:42:16 来自手机  | 显示全部楼层  来自 重庆
kjkuang 发表于 2024-8-4 14:40
Android12  小米12s

还真是,我用虚拟机也闪了,我看看咋回事,有可能真是签名
回复

使用道具 举报

34

主题

7772

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4233
好评
24
信誉
143

考神

发表于 2024-8-4 14:42:17 来自手机  | 显示全部楼层  来自 山东
感谢分享
回复

使用道具 举报

12

主题

2990

回帖

9149

积分

硕士生

Rank: 6Rank: 6

金币
182
好评
4
信誉
82
发表于 2024-8-4 14:44:44 来自手机  | 显示全部楼层  来自 广东
看看隐藏
回复

使用道具 举报

40

主题

4743

回帖

1万

积分

博士生

备考

Rank: 7Rank: 7Rank: 7

金币
6469
好评
8
信誉
98
QQ
发表于 2024-8-4 14:45:35 来自手机  | 显示全部楼层  来自 山东
谢谢大佬,我试了试安卓14不闪退。之前我也有问过别的大佬可不可以破解这个,他们说验证在so层,而且有好多暗坑就没有破解了,你是第一个破解出来的
回复

使用道具 举报

34

主题

4623

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
7113
好评
8
信誉
100

考神

发表于 2024-8-4 14:47:05 来自手机  | 显示全部楼层  来自 上海
点个赞再说...
回复

使用道具 举报

38

主题

3182

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
649
好评
3
信誉
100
发表于 2024-8-4 14:49:10 来自手机  | 显示全部楼层  来自 江苏
看看隐藏
回复

使用道具 举报

0

主题

2014

回帖

8385

积分

硕士生

Rank: 6Rank: 6

金币
5276
好评
0
信誉
105

MT论坛新人考神MT论坛最佳新人

发表于 2024-8-4 14:49:44 | 显示全部楼层  来自 广东
感谢分享!
回复

使用道具 举报

13

主题

482

回帖

3517

积分

大学生

Rank: 5Rank: 5

金币
1222
好评
21
信誉
100

考神MT论坛最佳新人

QQ
发表于 2024-8-4 14:49:55 来自手机  | 显示全部楼层  来自 重庆
迟暮归故里 发表于 2024-8-4 14:45
谢谢大佬,我试了试安卓14不闪退。之前我也有问过别的大佬可不可以破解这个,他们说验证在so层,而且有好多 ...

好的,谢谢告知,不过好像其他Android版本会有问题,有时间我用虚拟机抓一下看怎么回事
回复

使用道具 举报

13

主题

482

回帖

3517

积分

大学生

Rank: 5Rank: 5

金币
1222
好评
21
信誉
100

考神MT论坛最佳新人

QQ
发表于 2024-8-4 14:50:50 | 显示全部楼层  来自 重庆

哪里来的隐藏
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表