AST还原实战|第二届猿人学js逆向比赛第三题混淆还原详解

关注它,不迷路。       

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

1. 目标地址

https://match2023.yuanrenxue.cn/topic/3

其加密参数token的核心代码被混淆了,地址:

https://download.python-spider.com/match2023/corejs/match3.js

2. 还原分析

1.打开文件后,看到的是一个for混淆,里面有很多的 if - else 语句:

cd1a8343d8825742c3badbc2b0b48eb0.png

所以,又是一个控制流平坦化的混淆。在去控制流之前,先要做一些常规的还原操作。

  1. 给 if - else 加上 {} ,统一格式,可以使用星球里的这个插件:

https://t.zsxq.com/11c86qE3u

2.改写 if - else语句,使之变成 switch语句,思路在 AST反混淆实战|某数4代VM混淆代码还原详解 讲过,不再此赘述,代码可以参考这里

https://t.zsxq.com/0e7Eecr47

修改后,还原后的部分代码如下:

619c47b897f0a3a40146b0dfca3f41d7.png

3.接下来就是把指向下一个执行的case的值改成直接赋值 = ,而不是 +=,即将:

case 57:
  o += 69;
  break;

还原成:

case 57:
  o = 126;
  break;

这样的目的是可以使用星球里的九大节点合并算法继续处理。效果图:

7623f94ab4d28108b546dde602ebca4a.png

4.同样,为了适配 星球里的九大节点合并算法,需要将下面的代码进行修改,即:

case 23:
   if (105 == j) {
     o = 98;
   } else {
     o = 130;
   }
   break;

修改为:

case 23:
   o = 105 == j ? 98 : 130;
   break;

5.接下来就是使用星球里的 节点合并算法将其还原了,运行后,还剩 13 个case:

3066d2933104660ce8f51675c9e0b9c9.png

6.既然只剩这么点case,就不写代码了,直接手动合并节点,看到这个case:

case 173:
  return;
  break;

它只包含一个return语句,比较简单,因此,在一些指向 173 的case进行改写,比如:

case 169:
  n.t.pop();
  o = 173;
  break;

改写成:

case 169:
  n.t.pop();
  return;
  break;

需要注意的是,像这种:

case 139:
   var p, v, g, m, d, y, w, F, b, C, j, x, E, R, S, k, q, z, A, B, D, G, H, I, J, K, L, M, N, O, P, Q, T, U, V, W, X, Y, Z, $, _, ee, ie, le, se, fe, ne, te, re, ae, ue, oe, ce, he, pe, ve, ge, me, de, ye, we, Fe, be, Ce, je, xe, Ee, Re, Se;
    o = this.constructor != i ? 122 : 173;
    break;

改写起来比较麻烦,还不如不动。同理上面的 case 169同样可以进行改写。

改写完毕后,再使用 节点合并算法将其还原,最后还剩 2个case:

f69198a552744b04b6cc879532326225.png

这里的case 180 ,它指向了它本身,因此是一个 while(true)的循环节点,在此不再合并。

接下来的工作就是还原vmp了,由于本人能力有限,vmp的还原还在学习中,后续给出还原思路。

3. 还原源码

地址:

https://t.zsxq.com/126Wf6CHu

今天的文章就分享到这里,后续分享更多的技巧,敬请期待。

d0bc113199845dab043dff98d981e9de.jpeg

欢迎加入知识星球,学习更多AST和爬虫技巧。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ast混淆JS还原工具是一种强大的工具,可以帮助程序员和安全研究人员解决混淆的JavaScript问。该工具的原理是通过解析抽象语法树(AST)来还原混淆的JavaScript代码,从而让代码恢复其原有的结构和逻辑。 AST混淆JS还原工具的优点是可以解决常见的混淆技术,如变量名替换、函数名替换、控制流混淆等。同时,该工具还支持多种JavaScript框架和库,可以有效避免由于第三方库混淆而导致的代码不可读性问。 但是,需要注意的是,AST混淆JS还原工具并不能完全解决所有的混淆。在某些情况下,可能需要手动修改代码或使用其他工具进行修复。此外,该工具也可能会导致一些性能问,特别是在处理大型JavaScript代码时。 总的来说,AST混淆JS还原工具是一种非常有用的工具,可以帮助开发人员和安全研究人员节省大量时间和精力。但是,使用该工具还需要仔细考虑其适用性和局限性。 ### 回答2: AST混淆JS还原工具是一种专门用于还原JavaScript代码的工具。AST是抽象语法树的缩写,它是一种能够把代码转换成树形结构的工具。在JavaScript中,所有的代码都是由AST表示的。因此,混淆代码实际上是对AST进行混淆,而反混淆工具就是通过分析混淆后的AST还原出原始代码。 AST混淆JS还原工具有很多种,它们主要使用了一些静态和动态分析技术。静态分析就是直接分析混淆的代码,从中找到解密算法和加密密钥等关键信息,并使用这些信息来解密代码。动态分析则是通过模拟代码的运行环境来解密代码,在代码运行时注入一些代码片段,以便找到解密算法和密钥。 无论是静态分析还是动态分析,AST混淆JS还原工具都需要在很多方面投入时间和精力。首先,它们需要分析混淆代码的结构,找出其中的规律,并将其还原AST中。其次,它们需要处理各种类型的混淆,包括命名混淆、结构混淆、代码段混淆等。最后,它们需要使用一些优化技巧来提高还原的效率和准确性。 总之,AST混淆JS还原工具是一种强大的反混淆技术,它可以用于提高代码的安全性和保护知识产权。但需要注意的是,还原工具不应该被用于不道德的行为,如盗版或攻击等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值