常见反爬策略整理——Js 混淆

一、编码混淆

1.1 Base64 编码

  • 编码后的内容组成

    • 大写字母:A-Z
    • 小写字母:a-z
    • 数字:0-9
    • 特殊字符:+/
    • 结尾可能有 =
  • 关键词 btoaatob
    js 提供的 base64 编码、解码的方法

  • 编码 和 解码 示例代码
    在这里插入图片描述

1.2 Unicode 编码

字符用 \u 开头的两位十六进制数形式表示。
在这里插入图片描述

  • 解码示例
    在这里插入图片描述

1.3 十六进制转义

将每个字符的 Unicode 编码值以 \x 开头的两位十六进制数形式表示。
在这里插入图片描述

  • 解码示例
    在这里插入图片描述

1.4 URL 编码

对一些特殊字符转换为以 % 开头的编码格式,这种编码方式将非 ASCII 字符和某些特定字符(如 &, =, / 等)转换为 URL 安全的字符形式,避免这些字符在 URL 中引起问题,结合其他编码方式,也可以使字符串的某些部分变得不易理解。

  • 编码 和 解码 示例
    在这里插入图片描述

二、ob 混淆

2.1 ob 混淆特征

如图所示通过 obfuscator 生生成了一段标准的 ob 混淆代码,可以观察到 ob 混淆有如下几个明显的特征:

  • 函数名和变量名通常以 _0x 或者 0x 开头,后接 1~6 位数字或字母组合
  • 字符串加密,将字符串转换为16进制、Base64Unicode 编码等形式
  • 大多情况有大数组,且有对数组进行移位的操作,伴有关键字:pushshift
  • 控制流平坦化:一般都是核心的业务代码
    在这里插入图片描述

2.2 解决方案

  1. 推荐 v_jstools猿人学 ob 解混淆 工具进行解析。图为 v_jstools 解混淆示例
    在这里插入图片描述

  2. AST 还原代码

  3. 直接扣取所有代码,利用 hook 定位到关键加密位置,补环境处理

三、js_fuck

3.1 特征

内容仅由 ! [] + () {} 这些符号组成,无法直观的区分代码结构和逻辑,难以调试。
JSFuck 转码符号含义可查阅官网地址:https://jsfuck.com/
在这里插入图片描述

3.2 解决方案

  1. 推荐 v_jstools 工具,进行解密得到结果供参考分析。图为 v_jstools 解析 JSFuck 混淆代码示例:
    在这里插入图片描述

  2. 控制台直接运行代码

    • 如有报错,点进去即可查看到源码
      在这里插入图片描述
    • 若不报错,则截取部分代码直接运行,主动令其出错
  3. 单步调试,观察代码做了什么

  4. 复杂的代码需要根据实际情况,结合上述多种方式~

四、aa 混淆 & jj 混淆

二者都是通过 Js 内置的构造函数 Function 创建自执行匿名函数,将源代码作为函数体执行,或者是通过 eval 执行编码后的代码。

4.1 特征

  • aa 混淆
    如图,著名的表情包代码
    在这里插入图片描述
  • jj 混淆
    在这里插入图片描述

4.2 解决方案

  1. 将混淆代码直接在控制台运行,同 js_fuck 一样处理
  2. 单步调试,进入虚拟机后可查看到源码
  3. hook Function 或者 eval,源码从 arguments 中可以查看到
    在这里插入图片描述

5、交流群

不会经常刷博客,有需要者可以加本人,搜索 LOVE_SELF_AD_LIFE,进逆向群聊,一起探讨技术
在这里插入图片描述

### 使用混淆 JavaScript 技术收集爬虫特征 #### 背景介绍 为了保护网页内容不被自动化程序轻易抓取,开发者可以采用JavaScript混淆技术。这些技术能够增加解析页面逻辑的难度,从而提高机制的有效性[^1]。 #### 收集方法和技术手段 ##### 一、检测环境差异 浏览器环境中执行的脚本可以通过`navigator.userAgent`, `window.outerWidth/Height`等属性判断访问者是否为真实用户。当发现异常模式时,则认为可能是来自爬虫的行为并记录其行为特点作为特征之一。 ##### 二、动态加载资源 通过异步请求分片加载必要的HTML片段或JSON数据,并设置特定的时间间隔来验证客户端是否有能力按照预期顺序完成整个流程;如果某些部分未能按时获取到响应,则可能表明存在恶意企图。 ##### 三、利用Canvas指纹识别 创建隐藏canvas元素并通过绘制图形的方式提取设备独有的渲染特性参数(如颜色精度),以此区分不同类型的访客身份。由于大多数简单模拟器无法完美重现这一过程中的细微差别,因此成为有效的辨识依据。 ##### 四、基于AST分析混淆后的代码结构 对于更高级别的防护需求而言,还可以借助抽象语法树(AST)工具链深入理解源码内部运作原理。例如使用Babel插件改造输入文件,在编译阶段加入自定义钩子函数用于监控可疑动作的发生频率及时机分布情况[^3]。 ```javascript // 插入隐蔽统计模块示例 function trackActivity(eventType){ let timestamp = new Date().getTime(); fetch('/log', { method:'POST', body: JSON.stringify({type:eventType,time:timestamp}) }); } document.addEventListener('mousemove',trackActivity); ``` 上述措施综合运用后可构建起较为完善的防御体系,不过值得注意的是任何单一策略都难以做到百分之百可靠——正如提到过的那样,“一直在斗争”,所以持续更新维护至关重要[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值