一、关于js逆向的一些知识点总结

  1. javascript-数据类型中,null,undefinded都表示没有东西
  2. 普通函数,匿名函数,构造函数,一般常见的是匿名函数
  3. 函数可以当成字符串看待,可以看成参数传到别的函数里
  4. 变量名提升:如果使用赋值语句定义函数,则没有办法使用变量提升,因为变量名只能提升到声明这一步,没有办法提升到赋值那一步
  5. 函数的作用域在定义函数的区域,而不在调用函数的区域
  6. arguments-对象,包含了函数运行时的所有参数,通过索引传递多个参数
  7. 立即调用的函数表达式,将函数放在一个圆括号里直接调用,如果开头是function的话,会被认为是定义函数,不调用。所以不要让function开头,就可以实现马上调用的功能
  8. eval可以把字符串当成命令来执行
  9. 本质上,数组属于一种特殊的对象,可以将其看做是下标有固定规律的字典
  10. 首字母大写的函数可以看做是构造函数,但本质上和首字母小写的没有啥本质上的区别
  11. 原型:构造函数创建的过程中系统自动创建出来的和构造函数相关联的一个空的对象
  12. constructor是原型对象的属性,指向构造函数
  13. __proto__:通过这个可以经过子类修改父类即原型链上的值
  14. prototype:可以构造原型对象,可以指向原型对象

二、浏览器插件注入——

  1. indexOf:判断某一个键在不在对象里,如果在就停在这里,如果没有就继续走下去,最后获取的值存储在变量里
  2. cookie在一个网页里可能有很多个cookie。
  3. typeof:检测数据类型
  4. 打断点,从栈里找cookie的出路,上一步是设置cookie的动作
  5. 这里只是找了一个起点,剩下的东西还需要自己处理
  6. run_at:触发时机

三、AST抽象语法树

作用: 主要作用是为了防止js混淆的,一定程度上还原混淆,让代码的可读性提高。而在使用的过程中,我们就不可避免的用到了这个在线解析网站。AST explorerAn online AST explorer.https://astexplorer.net/为什么要用AST抽象语法树?

首先,我们在很多网站的源代码中,不可避免的会遇到类似于var a = "\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054";这样的代码,很少有人能看得懂,但是将其加载到AST中就会变得好看一些。

经过替换,一长串的字符变成了"hello,AST"

换一种编码试一试——

可以看到,上面就是一个个的节点,这也是我们再熟悉不过的JSON结构的数据,上图中红色下划线处就是它的path类型,说穿了就是路径。

那么,这两者有什么不一样的地方?

光是从上下级就可以看到,VariableDeclaration 是  VariableDeclarator 的祖先节点。

在这里将代码修改一下,再次观察:

这样就明白了。原来 一个 VariableDeclarator 只对应一个变量的定义 。

当前路径所对应的源代码,使用的是toString这个方法,在我解混淆的时候会经常的用到,是比较重要的,示例代码如下:

const visitor = {VariableDeclaration(path){console.log(path.toString());},}

若是要判断path是什么type,使用path.isXXX 这个方法,比如我们需要判断路径是否为 StringLiteral 类型:

if(path.isStringLiteral()){//do something;}

若想要获取path的上一级路径,你可以像这样来获取:


let parent = path.parentPath;

获取path的子路径,你可以是使用 get方法,比如定义了如下变量:

var a = 123;

当前访问的是  VariableDeclarator ,其结构如下:

现在需要访问 id 这个路径,你可以这么操作:

path.get('id');

删除path,使用remove方法,当你觉得你访问的路径已经完成了改完成的事,对代码已经没什么作用了,可以将其删除,

path.remove()

替换path,单路径可以使用replaceWith方法,多路径则使用replaceWithMultiple方法,比如你想将 1 + 2 替换成 3,你可以像下面这样的代码进行替换:

方法一:
path.replaceWith({type:"NumericLiteral",value:3});
方法二:
const type = require("@babel/types")
path.replaceWith(type.NumericLiteral(3));

注意,这里的3是个人口算出来的,在实际操作过程中,是需要获取 "+" 两边的值并计算其结果的。

基于Python的JS逆向和AST抽象语法树相关推荐

  1. python树代码_浅析AST抽象语法树及Python代码实现

    在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码.树上的每个 ...

  2. python 抽象语法树_用python演示一个简单的AST(抽象语法树)

    假设对'a + 3 * b'进行解释,其中a=2,b=5 代码很简单,就不再进行详细的解释了. Num = lambda env, n: n Var = lambda env, x: env[x] A ...

  3. Js逆向教程22-AST 抽象语法树babel安装

    作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!

  4. python抽象语法树_Python AST –抽象语法树

    python抽象语法树 Abstract Syntax Tree is a very strong features in Python. Python AST module allows us to ...

  5. 详解AST抽象语法树

    浅谈 AST 先来看一下把一个简单的函数转换成AST之后的样子. // 简单函数 function square(n) {return n * n; }// 转换后的AST {type: " ...

  6. 抽象语法树 c语言,AST抽象语法树

    AST抽象语法树 why主流项目插件的用途: javascript转译.代码压缩.css预处理.eslint.prettier等都建立在AST的基础上. whataccording to the gr ...

  7. 超级详细AST抽象语法树Javascript

    AST 抽象语法树 Program 程序(开始) interface Program <: Node {type: "Program";body: [ Statement ] ...

  8. php ast 抽象语法树,AST抽象语法树的基本思想

    AST抽象语法树的基本思想 前言 AST概述 AST结构 AST解析 转换 生成 前言 在阅读java ORM框架spring data jpa的源码时,发现Hibernate(spring data ...

  9. python ast_python AST 抽象语法树

    Abstract Sytax Tree 暂时用到的原因:在模型量化中,需要量化某些操作符带来的运算效果,比如 '+', '-','*', '/' 等等,这些就需要对源代码进行查询,因此就要需要将pyt ...

最新文章

  1. 黑马程序员 oc对象的方法成员变量
  2. coeforces 665D D. Simple Subset(最大团orsb题)
  3. SonarQube 代码扫描任务集成
  4. 关于笔记本安装parrot和kali的一些问题(花屏,息屏,屏幕不能休眠)
  5. h5禁用浏览器下载视频_【必备】 一键视频下载器插件,非常好用的浏览器插件!...
  6. Hadoop 系列之 HDFS
  7. java samphore 连接池_ADOConnection数据库连接池
  8. Perl语言的常用符号
  9. 记事本怎么运行c语言代码,如何让记事本里的代码运行
  10. 获取URL中的一级域名
  11. python 实时打印控制台输出信息
  12. 支付机构备付金管理过程
  13. elasticsearch 分片(Shards)的理解
  14. 基于支持向量机的谐波分析研究与实现
  15. 解决思科 Cisco Packet Tracer 7.3登录问题
  16. 基于WIN10搭建ES伪集群的实践
  17. 《找对英语学习方法的第一本书》
  18. xwiki部署_xwiki8.2.1安装部署
  19. MD5是什么?及其它的特点
  20. Seasonal Hybrid ESD笔记

热门文章

  1. 划重点 iOS15正式发布, 全新的通知推送系统,你必须要知道
  2. 在一个内部群里,我围观了微信最流行的诱导吸粉活动
  3. C语言中在常数后面加U、L、F的功能(转)
  4. 常用眼底图像数据集简介及下载--糖尿病视网膜病变(Eyepacs,APTOS2019,Messdior,Messdior-2,STARE数据集)
  5. LCP 63 弹珠游戏
  6. finally、catch和return,你真的会用吗?
  7. 广东移动至2020年数据中心机柜规模将近10万架
  8. 费希尔控制器知识讲解
  9. Agile EC3010 MCAD UserGuide-1
  10. 【Windows】Windows装机软件