关注它,不迷路。

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

1. 需求分析

曾经在某大型网站的参数核心加密代码中全都是类似下面的代码:

var _2$SS = function(_SSz, _1111) {var _l1L1 = [46222, '\x74\x61\x43\x61\x70\x74\x63\x68\x61\x42\x6c\x6f\x62', '\x74', '\x61', '\x73', '\x6c', '\x64', '\x69', .3834417654519915, '\x65\x6e\x63\x72\x79\x70\x74\x4a', '\x73\x6f', '\x6e', 49344];var _2Szs = _l1L1[5] + _l1L1[7] + (_l1L1[4] + _l1L1[2]), _I1il1 = _l1L1[9] + (_l1L1[10] + _l1L1[11]);var _0ooQoO = _l1L1[0];var _$Z22 = _l1L1[12], _2sS2 = _l1L1[8];return _l1L1[6] + _l1L1[3] + _l1L1[1];
};

将字面量拆分,然后放在一个数组里面。当时还不会AST,用正则的方式来替换,为了还原这个代码,前前后后写了将近一个星期的代码,因为正则写的不好,总会有遗漏的地方。

现在学会了AST,不到10分钟就可以全部还原,掌握一门技能是真的非常的重要。

2. 混淆代码

还原前:

var _2$SS = function(_SSz, _1111) {var _l1L1 = [46222, '\x74\x61\x43\x61\x70\x74\x63\x68\x61\x42\x6c\x6f\x62', '\x74', '\x61', '\x73', '\x6c', '\x64', '\x69', .3834417654519915, '\x65\x6e\x63\x72\x79\x70\x74\x4a', '\x73\x6f', '\x6e', 49344];var _2Szs = _l1L1[5] + _l1L1[7] + (_l1L1[4] + _l1L1[2]), _I1il1 = _l1L1[9] + (_l1L1[10] + _l1L1[11]);var _0ooQoO = _l1L1[0];var _$Z22 = _l1L1[12], _2sS2 = _l1L1[8];return _l1L1[6] + _l1L1[3] + _l1L1[1];
};

还原后:

var _2$SS = function (_SSz, _1111) {var _2Szs = '\x6c' + '\x69' + ('\x73' + '\x74'),_I1il1 = '\x65\x6e\x63\x72\x79\x70\x74\x4a' + ('\x73\x6f' + '\x6e');var _0ooQoO = 46222;var _$Z22 = 49344,_2sS2 = .3834417654519915;return '\x64' + '\x61' + '\x74\x61\x43\x61\x70\x74\x63\x68\x61\x42\x6c\x6f\x62';
};

3. 思路

来看看如何将这个这些注释删除。拿到在线解析网站进行解析,发现所有的注释都在这里:

将Array对象还原需要满足如下条件:

  1. Array对象里面的元素(最好)都是字面量

  2. 定义Array对象的变量没有被改变

编写思路:

  • 大部分Array对象都是通过 var、let、const 来定义的。因此,需要遍历 VariableDeclarator 节点,如果其初始化是赋值语句,即没有使用 var 定义,则可以将赋值语句先变成 声明语句(VariableDeclaration)。

  • 通过scope.getBinding来获取引用该Array对象的地方。

  • 因为Array对象取值一般都是MemberExpression表达式,因此找出它的MemberExpression父节点。

  • 判断父节点的property是否为(全部为)字面量(一般为数字,即索引值)。

  • 通过索引值取出对应的Array对象,然后替换这个父节点即可。

4. 插件源码

https://t.zsxq.com/07IufqJqr

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

AST反混淆插件|如何还原Array对象里的元素相关推荐

  1. AST反混淆实战-高级难度

    Ast实战:反混淆解析高级难度ob混淆网站 https://obfuscator.io/ 一.混淆demo生成 二.混淆demo说明 步骤相同-不在冗余 详情参考:AST反混淆实战-中等难度 http ...

  2. AST反混淆实战-经典ob混淆

    Ast实战:反混淆解析经典ob混淆 一.混淆demo获取 ob混淆源码 来自猿人学14题 https://match.yuanrenxue.com/api/match/14/m demo.js //为 ...

  3. AST反混淆实战-中等难度

    Ast实战:反混淆解析中等难度ob混淆网站 https://obfuscator.io/ 一.混淆demo生成 二.混淆demo生成 三.混淆demo整理 demo.js //TODO 这里对混淆de ...

  4. AST反混淆之路——babel基本知识及常用转换操作

    本文章是学习AST反混淆的笔记,包括AST介绍.babel介绍(重点!!!).以及部分AST反混淆实验代码 参照Babel插件开发助手(官方):https://blog.csdn.net/weixin ...

  5. AST反混淆实战:猿人学爬虫比赛第二题详细题解

    缘起 应星友要求,写下此文,哎,有钱能使鬼推磨. 实战地址: http://match.yuanrenxue.com/match/2 抓包分析 由于谷歌浏览器某些请求不会显示,建议使用火狐浏览器来抓包 ...

  6. JavaScript反混淆插件九:删除垃圾代码(花指令)

    在经过一些AST处理后的混淆代码,会有一些变量或者函数显得多余,因为还原后,没有其他的代码来使用它们.作为一个有代码洁癖的人,怎么能容忍这样的垃圾代码横行霸道,显得格外刺眼.因此,除之而后快. 删! ...

  7. JS逆向、破解、反混淆、反浏览器指纹——JS补环境框架

    JS逆向的主要思路一般有这几种 1,利用AST反混淆,因为用的就是AST混淆的,所以理论上应该都能用AST再返回去.但是实际操作好像不容易. 2,跟值,一步一步找到加密方法和密钥.现在很多混淆方法,把 ...

  8. JavaScript中的Array对象

    1.创建Array对象 创建Array对象的语法 var 数组名 = new Array(); 定义数组之后.就须要向数组中加入元素.格式例如以下 数组名[<下标>]=值: 2.Array ...

  9. JavaScript中Array 对象相关的几个方法

    好记性不如烂笔头 push 方法 将新元素添加到一个数组中,并返回数组的新长度值. arrayObj.push([item1 [item2 [. . . [itemN ]]]]) 参数 arrayOb ...

最新文章

  1. 给开源编译器插入后门
  2. Docker Review - dockerfile 入门篇
  3. mysql 联合索 B 树_MySQL 索引与 B+ 树
  4. 视频 + PPT | 用户中台建设实践解析
  5. 训练技巧 | 功守道:NLP中的对抗训练 + PyTorch实现
  6. 批量kill掉包含某个nginx的进程
  7. RT-Flash imxrt 系列rt1052 rt1060量产神器宣传
  8. mysql 代理 a_Keepalived+Mysql+Haproxy
  9. Web API系列之三 基本功能实现
  10. 一张图搞懂VLAN中的标签
  11. 弹出启动windows安全中心服务器,Win10每次开机都弹出启用Windows安全中心服务怎么办?...
  12. Windows快捷键盘
  13. win10专业版有必要吗_Win10专业版和家庭版系统有什么不同?
  14. python sin_Python入门之三角函数sin()函数实例详解
  15. Navigator的教程
  16. 逻辑函数的公式化减法
  17. Pooling Revisited: Your Receptive Field is Suboptimal 论文解读和感想
  18. maven阿里镜像下载jar包报错
  19. NRF51822-QFAC/NRF51822-QFAA/NRF51822-QFAB
  20. 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。

热门文章

  1. SpringBoot--SpringBoot 读取Properties文件(结合JDBC)
  2. C++内存管理:内存池实现
  3. python的金融计算器_货币的时间价值 —— 带着Python玩金融(1)
  4. js 时间戳和时间的处理
  5. 沐圣moolsun:做真正的民族品牌
  6. OJ1343——First Blood
  7. Scrapy爬取新浪微博用户信息、用户微博及其微博评论转发
  8. verilog study-初级
  9. 【SSH连接服务器老是断】client_loop: send disconnect: Broken pipe
  10. uni-app自定义相机