通过生成语法树(AST),可快速修改代码中的一些混淆处理,从而简化代码,便于后续分析。

本文通过Python来把JS转为AST并进行简单的操作,内容很简单。

比如我们下图中的JS代码,有sum和minus两个函数,一个变量a,两个换行\n,以及一次sum函数的调用,参数为1和2。

通过pyjsparser库将script代码转换成为json-ast格式。

pyjsparser是目前用于 python 的相对便捷和易理解的 JavaScript 解析器。可将JavaScript翻译成Python,即在Python中运行JavaScript代码。

import pyjsparser
js_ast = pyjsparser.parse(script)

转换后用Json格式化工具打开。


在body下的元素有这几种类型:

    函数声明:FunctionDeclaration空语句(\n):EmptyStatement变量声明:VariableDeclaration表达式语句:ExpressionStatement

根据Json可看到FunctionDeclaration中有基本的函数名、参数名、参数类型、块语句和返回语句等。

此外,表达式语句中还有调用表达式(CallExpression)、二元表达式(BinaryExpression)、赋值表达式(AssignmentExpression)等等。

那么我们就可以通过这些Type,以修改Json对象的方式去操作这棵语法树。比如根据是否被调用去删除一些无用的对象,删除未调用的函数,或根据规则去替换一些结构,修改一些节点。

接下来看这段代码

假如这是一段时间长并且难以阅读的代码,我们需要先将其转为AST,然后遍历所有函数,来查找未被调用的方法,然后进行删除,再根据AST转回正常的JS代码。

# 完整代码如下,大家自己试试删除无用变量a吧!
# js2py依赖于pyjsparser,所以安装js2py即可安装pyjsparser
# pip install js2py
script = '''function sum(a,b){  c = minus(2,3)return a+c;};function minus(a2,b2){  return a2-b2;};function dddd(a2,b2){  return a2-b2;};var a = 123;sum(1,2)
'''import pyjsparser
js_ast = pyjsparser.parse(script)
# 获取所有方法
funcList = []
for i in js_ast['body']:if i['type'] =='FunctionDeclaration':name = i['id']['name']funcList.append(name)# 查找未被调用的方法
noCallList = []
for func in funcList:searchStatement = "{'type': 'CallExpression', 'callee': {'type': 'Identifier', 'name': '%s'}"%funcif searchStatement not in str(js_ast):noCallList.append(func)# 删除未调用的方法
for i in js_ast['body']:if i['type'] =='FunctionDeclaration':if i['id']['name'] in noCallList:js_ast['body'].remove(i)#js_ast['body'][0]['id']['name'] = 'pythonlx'  # 修改一个函数名# 用AST重新生成js代码
import js2py.py_node_modules.escodegen as escodegen
escodegen = escodegen.var.get('escodegen')
res = escodegen.get('generate')(js_ast)
print(res.to_python()

执行后,可以发现未被调用的dddd方法已经被删除。

代码很简单,大家试试如何删除无关变量a吧!

本文牛刀小试,更多内容我们后续再见!

Python操作AST解JS混淆相关推荐

  1. Python调用,爬虫JS混淆——数据加密获取步骤和方法

    JS混淆 加密数据是无法通过在后台找到接口进行请求来获取数据 目标网站:https://www.endata.com.cn/BoxOffice/BO/Year/index.html 1. html中无 ...

  2. 利用AST对抗js混淆(一) 基础知识

    准备工作: 1.网站及工具 JavaScript Obfuscator Tool   主要研究对象,主要是研究此网站的各种混淆方法及破解办法. JS NICE: Statistical renamin ...

  3. 利用AST对抗js混淆(三) 控制流平坦化(Control Flow Flattening)的处理

    控制流平坦化 参考:https://security.tencent.com/index.php/blog/msg/112 控制流平坦化,简单来讲就是将代码块之间的关系打断,由一个分发器来控制代码块的 ...

  4. js系列教程7-DOM操作全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  5. js系列教程6-BOM操作全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  6. js系列教程1-数组操作全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  7. 【JS 逆向百例】网洛者反爬练习平台第一题:JS 混淆加密,反 Hook 操作

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 写在前面 逆向目标 绕过无限 debugger Hook 参数 逆向参数 PyCharm 本地联调 完整代码 J ...

  8. python列表切片后得到剩余列表_python列表切片和嵌套列表取值操作详解

    python列表切片和嵌套列表取值操作详解 给出列表切片的格式: [开头元素::步长] # 输出直到最后一个元素,(最后一个冒号和步长可以省略,下同) [开头元素:结尾元素(不含):步长] # 其中, ...

  9. Python爬虫教程-16-破解js加密实例(有道在线翻译)

    python爬虫教程-16-破解js加密实例(有道在线翻译) 在爬虫爬取网站的时候,经常遇到一些反爬虫技术,比如: 加cookie,身份验证UserAgent 图形验证,还有很难破解的滑动验证 js签 ...

最新文章

  1. 第二组视频:MySQL复制
  2. windows和linux主机名,windows和linux下如何远程获取操作系统版本和主机名
  3. 【java】输入球的半径,求出其体积
  4. php+mysql防注入字符串过滤_php 防sql注入过滤代码
  5. tensorflow和keras的关系
  6. 电磁兼容性(EMC)标准EN55032IT设备要求
  7. python gdal 基于栅格shp文件裁剪geotif图
  8. winPE下安装系统ghost恢复系统图文详细教程
  9. .c文件如何一步步变成.exe文件
  10. lua 中pairs 和 ipairs差别
  11. UDP TCP socket EtherCAT都是什么?
  12. java计算机毕业设计图书馆管理系统源码+系统+mysql数据库+LW文档+部署文件
  13. Proteus常用元件对照表
  14. Oracle工具包使用规则整理
  15. 果汁机器人传销_自动果汁售货机怎么样 加盟靠谱吗
  16. 计算机化学博士点,一流大学建设高校各学科博士点一览
  17. 试试54款开源服务器软件
  18. 浙江省计算机二级考试选择判断题库,浙江省计算机等级考试二级判断题和答案...
  19. 分行和支行有什么区别
  20. 独家丨立白推出银发个护品牌,日化巨头如何抢占银发市场?

热门文章

  1. OA系统选型分析之致远OA与华天动力OA
  2. oracle policies失效,复制粘贴功能失效不能用怎么解决?复制粘贴不能用的图文处理方法...
  3. beego 例子_Beego中文文档PDF
  4. linux脚本的数据输出到excel,将CSV数据输出到EXCEL
  5. 解决光影精灵锁win键的问题
  6. Power Pivot(了解power pivot,获取数据,计算字段(度量值)和计算列,按列排序,多表模型关系创建)
  7. 贝叶斯软件genle教程_贝叶斯网络可视化软件GeNIe使用说明
  8. 记生产一次弱引用对象引起的空指针异常
  9. 万物互联的IoT时代,柔性电子会大行其道吗?
  10. 创建ODOO12演示账套