爬虫从入门到精通(14) | JS中常见的混淆
文章目录
- 一、最简单的混淆举例
- 二、常见的混淆
- 1.eval混淆
- 2. AAEncode混淆(表情包加密)
- 3.JJEncode混淆
- 4.jsfuck混淆
- 5.ob混淆
一、最简单的混淆举例
最初级混淆,变量定义
// 定义目标值
var obj={};
obj.A=1;
obj.B=2;
obj.C=3;//将目标值得键值定义给另一个值
var xxx='A'console.log(obj[xxx]) // 1
若多个量的时候,我们可以定义成一个数组,然后通过索引获取值
// 定义目标值
var obj={};
obj.A=1;
obj.B=2;
obj.C=3;//将目标值得键值放到一个数组
var arr=['A','B','C'];console.log(obj[arr[1]]) // 2
但是列表中的值还是会直接暴露,因此我们写个方法将列表的值加密,例如使用浏览器自带的base64加密( btoa(val)加密,atob(val)解密)
// 定义目标值
var obj={};
obj.A=1;
obj.B=2;
obj.C=3;//将目标值得键值进行base64加密
var arr=['QQ==','Qg==','Qw=='];var jiemi=function(val){return atob(val)
}console.log(obj[jiemi(arr[1])]) // 2
为了安全,我们也可将值进行加密。
二、常见的混淆
1.eval混淆
定义: eval(string) ,可计算某个字符串,并执行其中的的 JavaScript 代码。 有返回值
使用举例:
// eval()函数使用举例 a=eval('(function xxx(){return "hello world"})()'); console.log(a) // hello world// 将上边的eval字体进行base64加密 xxx=btoa('(function xxx(){return "hello world"})()'); console.log(xxx) // KGZ1bmN0aW9uIHh4eCgpe3JldHVybiAiaGVsbG8gd29ybGQifSkoKQ==// 然后混淆的时候,可能就会放入加密的东西 console.log(eval(atob('KGZ1bmN0aW9uIHh4eCgpe3JldHVybiAiaGVsbG8gd29ybGQifSkoKQ==\n')));
缺点:想要运行字符串的值,只能通过明文的eval()函数执行,然后里面的字符串可能是多层加密的,我们通常在eval处下断点。
2. AAEncode混淆(表情包加密)
js支持Unicode,因此支持Unicode里收录的所有国家语言,如果我们有的语言和我们定义的变量长得很相似(例如0和o),那么因此有了这种混淆。
进入网址:https://www.sojson.com/aaencode.html
示例:console.log("hello world!");
解决方法:
- 控制台,增删代码,让其报错,即可在虚拟机(VM)处看见源码
- 在线调试,在 AAEncode 代码第一行下断点,然后一步一步执行,最终也会在虚拟机(VM)里看到源码
3.JJEncode混淆
进入https://www.sojson.com/jjencode.html网址
示例:console.log("hello world!");
解决办法:
- 控制台,增删代码,让其报错,即可在虚拟机处看见源码
- 在线调试,在 JJEncode 代码第一行下断点,然后一步一步执行,最终也会在虚拟机(VM)里看到源码
4.jsfuck混淆
- 网址:http://www.jsfuck.com/
- 思想: jsfuck源于一门编程语言brainfuck,其主要的思想就是只使用8种特定的符号来编写代码。而jsfuck也是沿用了这个思想,它仅仅使用6种符号来编写代码。它们分别是
(、)、+、[、]、!
示例:
解决方法:
- 如果是非虚拟机的数字/字符串加密使用解密工具:https://www.sojson.com/jsfuck.html
- 上述解决不了只能一段一段手动控制台复制得结果
- 如果是虚拟机加密,让其强制报错
当加密内容是虚拟机的加密
这类想要破解的时候,我们可以使其强制报错(例如在结尾最后让其加个'1'
),可以直接看到源码
5.ob混淆
ob混淆具有以下特征:
- 具有大数组的情况
- 数组移位(有内存泄露风险、建议不格式化),自执行函数,进行移位操作,有明显的 push、shift 关键字
- 解密函数(有内存泄露风险、建议不格式化)------可能有定时器--------(看加密的开关开启数量)
- 实际代码+控制流平坦化(整体ob的强度几乎完全取决于这段的代码强度,这里面是加密前的逻辑)
- 控制流平坦化+无限debugger自执行函数+死代码注入。一般情况下不会有业务逻辑所以不要问,ob、sojson如何破解。这些东西只是一层壳,破解强度完全取决于第四段代码,也就是其他网站作者写的代码强度!
- 函数名和变量名通常以 _0x 或者 0x 开头,后接 1~6 位数字或字母组合;
爬虫从入门到精通(14) | JS中常见的混淆相关推荐
- python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)
原标题:Python爬虫从入门到精通视频(2018新版) Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位,并且随着人工智能的兴起,Python发展得越 ...
- Python爬虫从入门到精通——爬虫实战:爬取今日头条图片新闻
分类目录:<Python爬虫从入门到精通>总目录 本文为实战篇,需提前学习Python爬虫从入门到精通中<基本库requests的使用>和<Ajax数据爬取(一):基本原 ...
- Python爬虫从入门到精通——解析库pyquery的使用
分类目录:<Python爬虫从入门到精通>总目录 解析库使用篇: 解析库re的使用:正则表达式 解析库XPath的使用 解析库Beautiful Soup的使用 解析库pyquery的使用 ...
- 浅谈JS中常见的问题(三)
往期文章目录 浅谈JS中常见的问题(一) 浅谈JS中常见的问题(二) JS知识总结 往期文章目录 前言 11. 同步和异步的区别 12. JS 判断变量类型的几种方法 13. 如何阻止事件冒泡与默认事 ...
- Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组
前言 在 Matlab 中,函数 null 用来求解零空间,即满足 Ax=0 的解空间,实际上是求出解空间的一组基(基础解系). 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是 ...
- MATLAB从入门到精通-Matlab R2020b中的新标记符号(New-marker-symbols)
Matlab R2020b中的新标记符号(New-marker-symbols)! MatlabR2020B版本引入了新的水平("_")和垂直("|")线标记符 ...
- python爬虫从入门到精通
第一讲 什么是爬虫 网络蜘蛛(Web spider)也叫网络爬虫(Web crawler),蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(W ...
- unity 5.x从入门到精通_Unity学习中值得收藏的学习资料(书籍)与博客
前言: 对于入门任何领域,收集相关比较优秀的学习资料,都是你不断提高自己的必备技能.而在信息爆炸的时代想要在繁杂的网络世界中找到好的学习资料,必然会耗费一定的时间和精力.为了给大家节省一点时间,在这里 ...
- js数组获取index_通过事例重温一下 JS 中 常见的15 种数组操作(备忘清单),收藏...
数组是 JS 中广泛使用的数据结构.数组对象提供了大量有用的方法,如array. forEach().array.map()等来操作数组. 在实战中,我经常对数组可能的操作和相应采用哪个更好的方法不知 ...
最新文章
- 【机器学习】如何简单形象又有趣地讲解神经网络是什么?
- 神经网络结构设计指导原则——输入层:神经元个数=feature维度 输出层:神经元个数=分类类别数,默认只用一个隐层 如果用多个隐层,则每个隐层的神经元数目都一样...
- python移除链表元素
- [转]对数据仓库进行数据建模
- android 6.0权限封装,Android6.0------权限申请管理(单个权限和多个权限申请)
- 九九乘法表(js_javascript)
- Android开发之View双指缩放ViewGroup双指缩放视频双指缩放图片双指缩放
- Python编程各种推导式详解
- SPA(单页面应用)和MPA(多页面应用)
- ai画面怎么调大小_AI人脸抓拍摄像机安装指导,这样安装抓拍更准
- dategurd oracle_Oracle Dataguard 基本原理
- torch中permute()函数用法
- linux中dpkg找不到命令_Linux中tree命令的使用
- Python新闻网站项目-1.项目分析与产品设计
- socket网络通信实现与优化
- json datasource使用
- mysql 1205 解决_mysql 1205 ,自动重启数据库
- GDB基本命令(整合)
- 详解在VMware Workstation Pro 15 安装 CentOS 7后配置网络
- 【python学习】自定义三维向量类 加减乘除查看值和长度
热门文章
- win10 + Ubuntu18 双系统 蓝牙键盘连接问题
- 迅雷漫画下载工具II 故障日志09.04.12
- 删除内置不卡米教程_影视特效后期AE CC零基础入门到高级教程
- Labview的下载地址
- php 读取cookieid,代码审计:TinyShop网店系统漏洞审计过程分享
- C语言期末课程设计-八-班级成绩管理系统
- java截取指定区域屏幕,Java 屏幕截取,抓取屏幕截图
- 高等数学Mathematica实验题——2.1 - 15 用割圆术计算圆周率 (Calcaluation of π with cyclotomic method )
- 割圆法求Pi(Java)
- js模板字符串嵌套html,在元素内插入一个有角度的js模板字符串