返回列表 发新帖

【实战教程】论坛偶遇js化App,分析困难强如怪物,拼尽全力最终获胜

  [复制链接]

171

主题

3614

回帖

1万

积分

博士生

Steve2280

Rank: 7Rank: 7Rank: 7

金币
92
好评
133
信誉
167

MT论坛最佳新人2018国庆节MT论坛帅哥MT论坛新人MT论坛灌水老大考神MT论坛侠客MT论坛活跃会员

发表于 2024-11-12 22:25:00 来自手机  | 显示全部楼层 | 阅读模式  来自 四川
本帖最后由 Steve2280 于 2024-11-17 02:17 编辑

本次求助帖来源:https://bbs.binmt.cc/thread-141817-1-1.html
在逛论坛的时候发现了这个求助帖,于是下下来进行分析


打开Apk一看,好家伙,dc,io文件夹,然后又看了一下assets文件夹,可以确定了,是js化的App,或者说是web化的App
之前我也解决过一些同类App,于是直接打开app_service.js,想着"会赢的"
js化的app里的汉字部分全部是unicode编码,不过没关系,使用MT的格式化可以在格式化代码的同时将unicode转回汉字
在格式化后我搜索了App里的"未解锁",结果发现找不到
怎么回事呢?往下翻代码的时候才发现居然有一部分代码因为变成了json格式所以其中的unicode没有被格式化!
然后我使用了unicode转化的网站
https://m.bejson.com/convert/unicode_chinese/
直接将未解锁转为了对应的unicode代码,并进行搜索

好消息:有结果
坏消息:找不到谁调用了它
即使搜索musicFail得到的结果也是2个一模一样的json
我想起了之前破解的以观书法App,于是打算直接打个alert在这个json所在的function里,打算通过这种方式查看它的调用堆栈
结果
App白屏了,很明显,软件炸了,也许这个App并不支持alert方法
这下我楞住了
我尝试使用一些可能的关键词,例如lock和unlock,找到了几个可能的方法,但是在尝试后发现没用
到这里我陷入了困境
难不成这次破解要变成"对不起一炷香大人,没让你使出全力"了?
不甘心的我再次打开App反复观看,突然想到了一个切入点:颜色
没错,整个App只有"未解锁"这三个字是红色的!
于是我使用了一个很久都没有使用到的MT功能-屏幕取色
开启取色功能后我移动吸管到文本中心,得到了这么一个颜色hex:#DD524D
接下来我回到Apk,进入assets文件夹,点击搜索并勾选高级搜索,内容为#DD524D
得到了一个搜索结果:

照例使用格式化
进入文件后搜索#DD524D

根据代码里的一些信息,这其实是一个vue或者类似vue构建的App
我们搜索"fail"
在其中一个结果里发现了可疑调用

并且在其上下文发现了更加可疑的musicFail,在搜索musicFail后发现它没啥用
那么就关注一下这个调用的附近的代码
最后发现了nowMusic这种东西

  1.      }, [e._v(e._s(e.t("choose.musicSuccess")))])])] : [e.isIos() ? n("view", [1 == e.vip || e.imageAdHave(t.url) ? n("view", {
  2.                     staticClass: ["item"],
  3.                     class: [A == e.nowMusic ? "active" : "nactive"]
  4.                 }, [n("u-text", {
  5.                     staticClass: ["name"],
  6.                     appendAsTree: !0,
  7.                     attrs: {
  8.                         append: "tree"
  9.                     }
  10.                 }, [e._v(e._s(t.name))]), n("u-text", {
  11.                     staticClass: ["success"],
  12.                     appendAsTree: !0,
  13.                     attrs: {
  14.                         append: "tree"
  15.                     }
  16.                 }, [e._v(e._s(e.t("choose.musicSuccess")))])]) : n("view", {
  17.                     staticClass: ["item"],
  18.                     class: [A == e.nowMusic ? "active" : "nactive"],
  19.                     attrs: {
  20.                         mode: "aspectFit"
  21.                     }
  22.                 }, [n("u-text", {
  23.                     staticClass: ["name"],
  24.                     appendAsTree: !0,
  25.                     attrs: {
  26.                         append: "tree"
  27.                     }
  28.                 }, [e._v(e._s(t.name))]), n("u-text", {
  29.                     staticClass: ["fail"],
  30.                     appendAsTree: !0,
  31.                     attrs: {
  32.                         append: "tree"
  33.                     }
  34.                 }, [e._v(e._s(e.t("choose.musicFail")))])])]) : n("view", [e.imageAdHave(t.url) ? n("view", {
  35.                     staticClass: ["item"],
  36.                     class: [A == e.nowMusic ? "active" : "nactive"]
  37.                 }, [n("u-text", {
  38.                     staticClass: ["name"],
  39.                     appendAsTree: !0,
  40.                     attrs: {
  41.                         append: "tree"
  42.                     }
  43.                 }, [e._v(e._s(t.name))]), n("u-text", {
  44.                     staticClass: ["success"],
  45.                     appendAsTree: !0,
  46.                     attrs: {
  47.                         append: "tree"
  48.                     }
  49.                 }, [e._v(e._s(e.t("choose.musicSuccess")))])]) : n("view", {
  50.                     staticClass: ["item"],
  51.                     class: [A == e.nowMusic ? "active" : "nactive"],
  52.                     attrs: {
  53.                         mode: "aspectFit"
  54.                     }
  55.                 }, [n("u-text", {
  56.                     staticClass: ["name"],
  57.                     appendAsTree: !0,
  58.                     attrs: {
  59.                         append: "tree"
  60.                     }
  61.                 }, [e._v(e._s(t.name))]), n("u-text", {
  62.                     staticClass: ["fail"],
  63.                     appendAsTree: !0,
  64.                     attrs: {
  65.                         append: "tree"
  66.                     }
  67.                 }, [e._v(e._s(e.t("choose.musicFail")))])])])])])
  68.             })), 0), n("view", {
  69.                 staticClass: ["title"]
  70.             }, [e.isIos() ? n("u-text", {
  71.                 staticClass: ["text"],
  72.                 appendAsTree: !0,
  73.                 attrs: {
  74.                     append: "tree"
  75.                 }
  76.             }, [e._v(e._s(e.t("choose.unlock1")) + e._s(e.t("choose.smoke")))]) : n("u-text", {
  77.                 staticClass: ["text"],
  78.                 appendAsTree: !0,
  79.                 attrs: {
  80.                     append: "tree"
  81.                 }
  82.             }, [e._v(e._s(e.t("choose.unlock2")) + e._s(e.t("choose.smoke")))])]), n("view", {
  83.                 staticClass: ["choose-smoke"]
  84.             }, e._l(e.flys, (function(t, A) {
  85.                 return n("view", {
  86.                     staticClass: ["smoke"],
  87.                     on: {
  88.                         click: function(t) {
  89.                             e.choose(A, 2)
  90.                         }
  91.                     }
  92.                 }, [0 == A ? n("view", [n("u-image", {
  93.                     staticClass: ["img"],
  94.                     class: [A == e.nowSmoke ? "active" : "nactive"],
  95.                     attrs: {
  96.                         mode: "aspectFit",
  97.                         src: t
  98.                     }
复制代码

既然有nowMusic,那么假设当我点击音乐并更改成功后肯定这个nowMusic会发生变动
再结合切换完成后的提示:"更换成功"

结合后可以定位到这个方法

接下来我们搜索以下这个change方法有谁在调用
  1. change(
复制代码

找到了这个方法

  1. choose: function(e, t) {
  2.                         var n;
  3.                         switch (t) {
  4.                             case 1:
  5.                                 if (this.nowMusic = e, n = this.musics[this.nowMusic], 0 != e && !(this.imageAdHave(n.url) || this.vip && this.isIos())) return void this.chooseMenu(t);
  6.                                 break;
  7.                             case 2:
  8.                                 if (this.nowSmoke = e, n = this.flys[this.nowSmoke], 0 != e && !(this.imageAdHave(n) || this.vip && this.isIos())) return void this.chooseMenu(t)
  9.                         }
  10.                         this.change(t)
  11.                     },
复制代码

很明显,当t的值为1和2并且满足一定条件时才会执行我们的change方法,因为对应的条件分析复杂,所以我们直接删除这个switch,仅保留this.change(t)
此时App的功能已经可用,就是显示的不可用

接下来让我们搞一下这个布局部分
在assets文件夹里找了一番,发现问号图标是0.png
我们搜索一下0.png

虽然很复杂,但这个其实类似a==b?xxx:xxxx
所以我们直接把
0 == A
改为
0==0
不直接赋值A是怕会损坏选择逻辑
Music同理

编译打包安装,破解成功
(我顺便改了一些字)
至此,教程结束

本帖子中包含更多资源

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

x
已有9人评分好评 金币 理由
ningyh + 1 纽币
wwb66668 + 1 + 1 很给力!
lyrong5000 + 1 太厉害了!
xuti + 1 很给力!
逗比_滑稽 + 1
龙一 + 1 赞一个!
紫檀 + 1 + 1
redblack25 + 1 + 1
苇草 + 1 + 1

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

回复

使用道具 举报

20

主题

890

回帖

4908

积分

大学生

Rank: 5Rank: 5

金币
1109
好评
0
信誉
89
发表于 2024-11-12 22:26:54 来自手机  | 显示全部楼层  来自 重庆
精彩的教程
回复

使用道具 举报

3

主题

4430

回帖

1万

积分

博士生

https://0818.neocities.org/

Rank: 7Rank: 7Rank: 7

金币
1873
好评
6
信誉
102
发表于 2024-11-12 22:28:21 来自手机  | 显示全部楼层  来自 新疆
看看
回复

使用道具 举报

4

主题

1922

回帖

6410

积分

硕士生

Rank: 6Rank: 6

金币
4441
好评
1
信誉
102

考神MT论坛最佳新人

QQ
发表于 2024-11-12 22:30:03 来自手机  | 显示全部楼层  来自 广东
看看
回复

使用道具 举报

20

主题

529

回帖

2293

积分

大学生

Rank: 5Rank: 5

金币
1016
好评
0
信誉
88
发表于 2024-11-12 22:35:18 来自手机  | 显示全部楼层  来自 陕西
楼主像星空一缕温暖的月光
回复

使用道具 举报

2

主题

5600

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
2069
好评
6
信誉
88
发表于 2024-11-12 22:35:27 来自手机  | 显示全部楼层  来自 广东
看看教程,学习一下
回复

使用道具 举报

124

主题

4804

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1194
好评
19
信誉
149

MT论坛最佳新人考神

发表于 2024-11-12 22:35:31 来自手机  | 显示全部楼层  来自 山东
学习一下
回复

使用道具 举报

34

主题

4624

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
7116
好评
8
信誉
100

考神

发表于 2024-11-12 22:35:56 来自手机  | 显示全部楼层  来自 上海
点个赞!
回复

使用道具 举报

9

主题

1063

回帖

2921

积分

大学生

Rank: 5Rank: 5

金币
1221
好评
0
信誉
98
发表于 2024-11-12 22:36:24 来自手机  | 显示全部楼层  来自 广东
路过看看
回复

使用道具 举报

2

主题

8668

回帖

2万

积分

博士后

小白

Rank: 8Rank: 8

金币
10385
好评
1
信誉
147

考神MT论坛新人

发表于 2024-11-12 22:36:58 来自手机  | 显示全部楼层  来自 河南
感谢分享
回复

使用道具 举报

13

主题

2334

回帖

9142

积分

硕士生

Rank: 6Rank: 6

金币
1516
好评
24
信誉
110
发表于 2024-11-12 22:38:03 | 显示全部楼层  来自 河北
看看是什么
回复

使用道具 举报

16

主题

1778

回帖

1万

积分

博士生

阿巴阿巴

Rank: 7Rank: 7Rank: 7

金币
2219
好评
244
信誉
190
发表于 2024-11-12 22:38:38 来自手机  | 显示全部楼层  来自 贵州
看看你的
回复

使用道具 举报

134

主题

3461

回帖

1万

积分

博士生

无敌最俊朗

Rank: 7Rank: 7Rank: 7

金币
3014
好评
49
信誉
105
发表于 2024-11-12 22:40:30 来自手机  | 显示全部楼层  来自 四川
学习学习
回复

使用道具 举报

19

主题

1545

回帖

6423

积分

硕士生

Rank: 6Rank: 6

金币
3554
好评
6
信誉
100

MT论坛帅哥MT论坛新人考神

发表于 2024-11-12 22:40:36 来自手机  | 显示全部楼层  来自 浙江
感谢分享!
回复

使用道具 举报

10

主题

1646

回帖

7998

积分

硕士生

Rank: 6Rank: 6

金币
259
好评
10
信誉
120
发表于 2024-11-12 22:40:41 来自手机  | 显示全部楼层  来自 四川
学习!
回复

使用道具 举报

发表回复

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

本版积分规则

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