反爬虫AST原理与还原混淆实战(微课视频版)
作者: 李岳阳、卓斌
出版社:清华大学出版社 2021-08-01
简介:AST是目前爬虫领域的热点。本书从AST这一个知识点出发,由浅入深,带领读者掌握反爬虫AST的原理,并帮助读者培养解决实际问题的能力。 本书共11章,分为四部分。部分(第1~4章)介绍开发环境的搭建方法、Web调试的技巧以及爬虫与反爬虫的基本知识;第二部分(第5~6章)讲解混淆JavaScript代码的手工逆向方法与JavaScript代码安全防护的原理;第三部分(第7~8章)讲解AST的原理与API的使用方法;第四部分(第9~11章)以AST为基础,讲解自动化的JavaScript代码防护与还原方案,并带领读者进行实战训练。 本书适合作为计算机培训的教材,也可供安全开发人员、爬虫初学者以及想要在爬虫领域进阶的人员学习。【目录】第1章搭建开发环境1.1Node.js环境搭建1.1.1Node.js安装配置1.1.2Babel安装1.1.3Visual Studio Code安装配置1.2Python环境配置1.2.1Python 3.7安装1.2.2requests请求库安装1.2.3bs4解析库安装1.3Fiddler抓包工具1.4AST Explorer网站在线生成抽象语法树1.5小结1.6习题第2章Web网站的调试与抓包分析2.1Chrome开发者工具2.1.1Elements面板2.1.2Console面板2.1.3Sources面板2.1.4Network面板2.1.5Application面板2.2JS逆向调试技巧2.2.1善用搜索2.2.2查看请求调用堆栈2.2.3XHR请求断点2.2.4Console插桩2.2.5堆内存函数调用2.2.6复制Console面板输出2.3本地覆盖2.3.1Chrome local override2.3.2Fiddler自动响应2.4Ajaxhook2.4.1Ajaxhook源码分析2.4.2Ajaxhook拦截2.5网易易盾滑块验证码调试分析2.6小结2.7习题 第3章爬虫与反爬虫3.1网络爬虫3.1.1网络爬虫原理3.1.2网络爬虫分类3.1.3网络爬虫与搜索引擎3.2编写网络爬虫3.2.1requests请求库的使用3.2.2bs4解析库的使用3.2.3编写简单网络爬虫3.3爬虫与反爬虫的博弈3.4小结3.5习题第4章常规反爬虫技术4.1Headers头部校验4.2IP地址记录4.3Ajax异步加载4.4字体反爬虫4.5验证码反爬虫4.6JS参数加密4.7JS反调试4.8AST混淆反爬虫4.9小结4.10习题第5章混淆JS手动逆向方法5.1混淆脚本分析5.1.1定位加密入口5.1.2混淆特征分析5.1.3加密函数还原5.2小结5.3习题第6章JS代码安全防护原理6.1常量的混淆原理6.1.1对象属性的两种访问方式 6.1.2十六进制字符串 6.1.3unicode字符串6.1.4字符串的ASCII码混淆6.1.5字符串常量加密 6.1.6数值常量加密6.2增加JS逆向者的工作量6.2.1数组混淆 6.2.2数组乱序 6.2.3花指令6.2.4jsfuck6.3代码执行流程的防护原理6.3.1流程平坦化6.3.2逗号表达式混淆6.4其他代码防护方案6.4.1eval加密6.4.2内存爆破6.4.3检测代码是否格式化6.5小结6.6习题第7章AST抽象语法树的原理与实现7.1理解AST抽象语法树7.1.1AST基本概念7.1.2AST在编译中的位置7.1.3AST程序开发7.2词法分析7.2.1词法分析基本原理7.2.2Python编写词法分析器7.3语法分析7.3.1语法分析基本原理7.3.2Python编写语法分析器7.4Babel编译步骤7.4.1Babel的解析7.4.2Babel的转化7.4.3Babel的生成7.5小结7.6习题第8章AST的API详解8.1AST入门8.1.1AST的基本结构8.1.2代码的基本结构8.2Babel中的组件8.2.1parser与generator8.2.2traverse与visitor8.2.3types组件8.3Path对象详解8.3.1Path与Node的区别8.3.2Path中的方法8.3.3父级Path8.3.4同级Path8.4scope详解8.4.1获取标识符作用域8.4.2scope.getBinding8.4.3scope.getOwnBinding8.4.4referencePaths与constantViolations8.4.5遍历作用域8.4.6标识符重命名8.4.7scope的其他方法8.5小结8.6习题第9章AST自动化JS防护方案9.1混淆前的代码处理9.1.1改变对象属性访问方式9.1.2JS标准内置对象的处理9.2常量与标识符的混淆9.2.1实现数值常量加密9.2.2实现字符串常量加密9.2.3实现数组混淆9.2.4实现数组乱序9.2.5实现十六进制字符串9.2.6实现标识符混淆9.2.7标识符的随机生成9.3代码块的混淆9.3.1二项式转函数花指令9.3.2代码的逐行加密9.3.3代码的逐行ASCII码混淆9.4完整的代码与处理后的效果9.5代码执行逻辑的混淆9.5.1实现流程平坦化9.5.2实现逗号表达式混淆9.5小结9.6习题第10章AST自动化JavaScript还原方案10.1常用还原方案10.1.1还原数值常量加密10.1.2还原代码加密与ASCII码混淆10.1.3还原unicode与十六进制字符串10.1.4还原逗号表达式混淆10.2Chrome拓展开发入门10.2.1Chrome拓展程序10.2.2Chrome拓展开发之去除广告插件10.3JS Hook10.3.1JS Hook原理与作用10.3.2JS Hook对象属性10.3.3JS自动注入Hook10.4DOM对象的Hook10.4.1Script自动加载10.4.2Hook DOM10.4.3JS Proxy10.5原型链10.6XHR Hook10.7JS Hook的检测10.8小结10.9习题第11章AST还原JS实战11.1分析网站使用的混淆手段11.1.1协议分析11.1.2数组乱序11.1.3字符串加密11.1.4花指令11.1.5流程平坦化11.2还原代码中的常量11.2.1整体代码结构11.2.2字符串解密与去除数组混淆11.3剔除花指令11.3.1花指令剔除思路11.3.2字符串花指令的剔除11.3.3函数花指令的剔除11.4还原流程平坦化11.4.1获取分发器11.4.2解析switch结构11.4.3复原语句顺序11.4.4协议逆向11.5小结11.6习题