AST(抽象语法树)实战入门:js逆向中滑块加密if语句转化_网虫Spider的博客-程序员宅基地_ast js

技术标签: 网虫-Spider  node.js  webpack  前端  javascript  

概述:AST 抽象语法树 实战 入门 案例 js逆向 js滑块 js加密 极验 瑞数 阿里滑块 5秒盾

​引言:

AST算得上是高端技能。如果把爬虫技能分为初中高三个阶段的话。常规的JS逆向找找参数,扣扣代码只能属于中级技能,而通过使用AST先对目标代码进行修复,最终转化为方便我们调试的代码,则属于高级技能。

其实AST也没有想象的那么难,懂得了基本原理,然后多练习,多思考,就可以了。

该系列文章将会循序渐进、深入浅出的给大家分享AST的知识和我学习AST的心路历程。希望大家跟着文章一点一点的去了解,去掌握。这东西我都能学会,那么你也肯定能学会!

废话不多说,我们直接开始吧~~

效果展示:

概要:

说白了就是把if...else...语句中的大括号去掉,单纯的看这个示例可能大家觉得没啥用处,但是其实这是一套复杂混淆中的一步。这个操作作为一种元操作。

转换前:

if(a){
     a = 9}else{
     b =9}

转换后:

if (a) a = 9;else b = 9;

思路分析:

如果consequent,alternate中只有一条语句的话,是可以不加大括号的,直接将consequent和alternate的body中的元素提取出来

插件代码:

const visitor = {
     IfStatement(path){
       let {test, consequent, alternate} = path.node;    if(types.isBlockStatement(consequent) && consequent.body.length == 1){
         path.node.consequent = consequent.body[0]    }    if(types.isBlockStatement(alternate) && alternate.body.length == 1){
         path.node.alternate = alternate.body[0]    }  }}

HISTORY/往期推荐

看雪·第五届安全开发者峰会 PPT与私密资料

js逆向:B0SS弯聘的登录接口以及某验的点选验证w参数

js逆向:手撕某手的滑块 一

Android逆向:破解一个APP的搜索接口 一

分享爬虫进阶知识,包括但不限于JS逆向,Android逆向,知名爬虫工具源码分析等

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43471909/article/details/121113324

智能推荐

JAVA设计模式初探之组合模式_anzhan38161的博客-程序员宅基地

先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。” 就拿剪发办卡的事情来分析一下吧。首先,一张卡可以在总部,分店,加盟店使用,那么总部可以刷卡,分店也可以刷卡,加盟店也可以刷卡,这个属性结构的店面层级关系就明确啦。那么,总店刷卡消费与分店刷卡消费是一样的道理,那么总店与分店对会...

恶毒评论分类报告_火鸡哥的博客-程序员宅基地

恶毒评论分类报告一、问题的定义1.1、项目概述    讨论你关心的事情是很困难的。网络上的虐待和骚扰的威胁意味着许多人停止表达自己,放弃寻求不同的意见。平台很难有效地促进对话,导致许多社区限制或完全关闭用户评论。    对话人工智能团队是Jigsaw和谷歌(都是Alphabet的一部分)共同发起的一个研究项目,目前正致力于开发帮助改善在线对话的工具。一个重点领域是对负面网络行为的研究,比如...

Hello Kafka(九)——C客户端_天山老妖的博客-程序员宅基地_c++ kafka客户端

一、Librdkafka简介1、librdkafka简介librdkafka是C语言实现的ApacheKafka的高性能客户端,提供C++接口。librdkafka专为现代硬件而设计,尝试将内存复制保持在最小,可以让用户决定是需要高吞吐量还是低延迟的服务,当前可支持每秒超过100万的消息生产和300万每秒的消息消费。Github地址:https://github.com/edenhill/librdkafka2、librdkafka安装yum install librdkafka.

二维基本图形生成之直线生成以及VC++代码实现_丽贝卡家的小狮子的博客-程序员宅基地

二维基本图形生成二维基本图形生成过程直线段的扫描转化DDA算法二维基本图形生成过程图元的生成也就是指图元的参数形式到点阵形式的转换,参数形式可理解为数学上所学的代数表达式,而点阵形式则用于计算机显示,光栅图形显示器可以看成是一个像素的矩阵。由上图我们可以看出来二维基本图形生成的大致流程。基本图元经过二维裁剪再经过扫描转化即可进行显示。在这篇文章当中,会介绍直线,圆和椭圆的二维图形扫描转化算法。直线段的扫描转化首先我们要明确如何来提高算法效率,这里可以用到的提高算法效率的方法:将乘法转化为加法

百度地图开发(二)之添加覆盖物 地理编码和反地理编码_阳光男孩joe的博客-程序员宅基地

转载请注明出处: http://blog.csdn.net/crazy1235/article/details/43377545之前写过一篇关于百度地图开发的blog,主要介绍了百度地图的基本地图的显示。详见: Android百度地图开发(一)之初体验下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码。添加覆盖物在地图上添加覆盖物,一般需要以下几个步骤

随便推点

path css 发光,css3的clip-path属性介绍_墨墨daisy的博客-程序员宅基地

css3的clip-pathclip-path之所以没有很普及,是因为其浏览器兼容问题。很多IE浏览器对齐属性不是很支持。我们看下他的浏览器兼容:我们看到IE是完全不支持,尽量使用webkit内核,需要加上内核前缀-webkit-例子:看这个效果,对这个DIV进行了裁剪。代码如下:.haorooms-small {background-size: cover;width: 300px;height...

操作系统学习笔记三(进程的创建)_郑鹏川的博客-程序员宅基地

1. 进程的四种状态 创建、阻塞、唤醒、终止2. 创建 2.1 什么情况下需要创建新进程? 用户登录、作业调度、提供服务、应用请求 2.2 如何创建新进程?创建新进程的步骤? 1)申请空白的PCB 2)为新进程分配资源 3)初始化进程控制块 4)将新进程插入到就绪队列 2.3 新进程被创建时的两种执行可能 1)父进程与子进程并发执行 2)父进程等待,直到某个或全部子进程执行...

domodal返回值问题_LaugustusJ的博客-程序员宅基地_domodal返回值

转自:https://blog.csdn.net/shuilan0066/article/details/5775383查了很多资料,都说DoModal()返回值为OK或CANCEL键的ID, 其实,这种说法是错误的,只不过是因为大部分关闭方法是通过OK与CANCLE关闭的MSDN是这样说明其返回值的If successful, the value of the nRetCode paramete...

java调用labview,Java call LabView compiled DLL by JNI_纳仁菜菜的博客-程序员宅基地

This document will show you how to call LabViewcompiled DLL by Java with JNI.JAVA Version: jdk1.7.0_79 32bitLabView Version: 2014Visual Studio Version: 2015Notice:You need change the file/folder path ...

javascript中使字符串当做js代码来执行_IT和尚的博客-程序员宅基地_js 执行字符串

在javascript中有多种方法可以让一段字符串当做一段js代码来执行:使用eval("要执行的字符串") 使用new Function("要执行的字符串") setTimeOut("要执行的字符串",500) setInterval("要执行的字符串",500) 当然根据javascript最佳实践,我们是不推荐上面的任何一种方式的,当然eval()在处理JSON串时还是必须使...

复选框选中状态判断_seFei_Q的博客-程序员宅基地_判断复选框是否为选中状态

关于复选框选中状态的判断1.checked的选中状态不设置checked是默认不选被选中的,一旦设置checked="false"或者checked = false或者checked="true"或者checked = true或者不设置任何值,都会被解释为选中。<input type="checkbox" name="test" id="test1"/> //未被选中&amp

推荐文章

热门文章

相关标签