文章目录

  • 一、最简单的混淆举例
  • 二、常见的混淆
    • 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混淆具有以下特征:

  1. 具有大数组的情况
  2. 数组移位(有内存泄露风险、建议不格式化),自执行函数,进行移位操作,有明显的 push、shift 关键字
  3. 解密函数(有内存泄露风险、建议不格式化)------可能有定时器--------(看加密的开关开启数量)
  4. 实际代码+控制流平坦化(整体ob的强度几乎完全取决于这段的代码强度,这里面是加密前的逻辑)
  5. 控制流平坦化+无限debugger自执行函数+死代码注入。一般情况下不会有业务逻辑所以不要问,ob、sojson如何破解。这些东西只是一层壳,破解强度完全取决于第四段代码,也就是其他网站作者写的代码强度!
  6. 函数名和变量名通常以 _0x 或者 0x 开头,后接 1~6 位数字或字母组合;

爬虫从入门到精通(14) | JS中常见的混淆相关推荐

  1. python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)

    原标题:Python爬虫从入门到精通视频(2018新版) Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位,并且随着人工智能的兴起,Python发展得越 ...

  2. Python爬虫从入门到精通——爬虫实战:爬取今日头条图片新闻

    分类目录:<Python爬虫从入门到精通>总目录 本文为实战篇,需提前学习Python爬虫从入门到精通中<基本库requests的使用>和<Ajax数据爬取(一):基本原 ...

  3. Python爬虫从入门到精通——解析库pyquery的使用

    分类目录:<Python爬虫从入门到精通>总目录 解析库使用篇: 解析库re的使用:正则表达式 解析库XPath的使用 解析库Beautiful Soup的使用 解析库pyquery的使用 ...

  4. 浅谈JS中常见的问题(三)

    往期文章目录 浅谈JS中常见的问题(一) 浅谈JS中常见的问题(二) JS知识总结 往期文章目录 前言 11. 同步和异步的区别 12. JS 判断变量类型的几种方法 13. 如何阻止事件冒泡与默认事 ...

  5. Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组

    前言 在 Matlab 中,函数 null 用来求解零空间,即满足 Ax=0 的解空间,实际上是求出解空间的一组基(基础解系). 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是 ...

  6. MATLAB从入门到精通-Matlab R2020b中的新标记符号(New-marker-symbols)

    Matlab R2020b中的新标记符号(New-marker-symbols)! MatlabR2020B版本引入了新的水平("_")和垂直("|")线标记符 ...

  7. python爬虫从入门到精通

    第一讲 什么是爬虫 网络蜘蛛(Web spider)也叫网络爬虫(Web crawler),蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(W ...

  8. unity 5.x从入门到精通_Unity学习中值得收藏的学习资料(书籍)与博客

    前言: 对于入门任何领域,收集相关比较优秀的学习资料,都是你不断提高自己的必备技能.而在信息爆炸的时代想要在繁杂的网络世界中找到好的学习资料,必然会耗费一定的时间和精力.为了给大家节省一点时间,在这里 ...

  9. js数组获取index_通过事例重温一下 JS 中 常见的15 种数组操作(备忘清单),收藏...

    数组是 JS 中广泛使用的数据结构.数组对象提供了大量有用的方法,如array. forEach().array.map()等来操作数组. 在实战中,我经常对数组可能的操作和相应采用哪个更好的方法不知 ...

最新文章

  1. 【机器学习】如何简单形象又有趣地讲解神经网络是什么?
  2. 神经网络结构设计指导原则——输入层:神经元个数=feature维度 输出层:神经元个数=分类类别数,默认只用一个隐层 如果用多个隐层,则每个隐层的神经元数目都一样...
  3. python移除链表元素
  4. [转]对数据仓库进行数据建模
  5. android 6.0权限封装,Android6.0------权限申请管理(单个权限和多个权限申请)
  6. 九九乘法表(js_javascript)
  7. Android开发之View双指缩放ViewGroup双指缩放视频双指缩放图片双指缩放
  8. Python编程各种推导式详解
  9. SPA(单页面应用)和MPA(多页面应用)
  10. ai画面怎么调大小_AI人脸抓拍摄像机安装指导,这样安装抓拍更准
  11. dategurd oracle_Oracle Dataguard 基本原理
  12. torch中permute()函数用法
  13. linux中dpkg找不到命令_Linux中tree命令的使用
  14. Python新闻网站项目-1.项目分析与产品设计
  15. socket网络通信实现与优化
  16. json datasource使用
  17. mysql 1205 解决_mysql 1205 ,自动重启数据库
  18. GDB基本命令(整合)
  19. 详解在VMware Workstation Pro 15 安装 CentOS 7后配置网络
  20. 【python学习】自定义三维向量类 加减乘除查看值和长度

热门文章

  1. win10 + Ubuntu18 双系统 蓝牙键盘连接问题
  2. 迅雷漫画下载工具II 故障日志09.04.12
  3. 删除内置不卡米教程_影视特效后期AE CC零基础入门到高级教程
  4. Labview的下载地址
  5. php 读取cookieid,代码审计:TinyShop网店系统漏洞审计过程分享
  6. C语言期末课程设计-八-班级成绩管理系统
  7. java截取指定区域屏幕,Java 屏幕截取,抓取屏幕截图
  8. 高等数学Mathematica实验题——2.1 - 15 用割圆术计算圆周率 (Calcaluation of π with cyclotomic method )
  9. 割圆法求Pi(Java)
  10. js模板字符串嵌套html,在元素内插入一个有角度的js模板字符串