调用网页JS解决前端加密
字数 996 2025-08-22 12:22:42

前端加密逆向与PyExecJS调用实战教程

前言

在渗透测试过程中,前端加密是常见的防护手段。本文详细讲解如何通过逆向分析前端JavaScript代码,并使用Python的PyExecJS库调用网页自身的JS加密函数,实现自动化处理加密请求。

一、定位关键加密函数

1. 观察请求与响应

  • 通过浏览器开发者工具(F12)查看网络请求
  • 关注请求参数中的加密字段和响应中的特殊字符串

2. 搜索关键字符串

  • 在开发者工具的Sources面板中搜索:
    • 服务ID(如serviceid
    • 具体的ID号
    • 加密参数的名称

3. 下断点跟踪

  • 在疑似加密函数处设置断点
  • 跟踪函数调用栈,找到核心加密函数(如示例中的c=$(b, x.value)

4. 追踪函数来源

  • 注意新声明的类(如l5
  • 检查是否从其他JS文件引入
  • 注意每次刷新页面时文件名和函数名的变化

二、下载必要JS文件

  1. 定位到核心加密函数所在的JS文件
  2. 下载该文件及其所有依赖文件
  3. 保存时注意保持原始编码(通常为UTF-8)

三、使用PyExecJS调用JS函数

1. 安装PyExecJS

pip install PyExecJS

2. 基本调用方法

with open('your.js', 'r', encoding='utf8', errors='ignore') as f:
    jscode = f.read()
    
ctx = execjs.compile(jscode)
result = ctx.call('your_func', '参数1', '参数2')

3. 完整请求示例

import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
import execjs
import json
import requests

headers = {
    'Host': 'xxxx',
    'Cookie': 'xxxx',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0',
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN',
    'Origin': 'xxxxx',
    'Referer': 'xxxxx',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'Priority': 'u=0',
    'Content-Length': '0',
    'Te': 'trailers',
    'Connection': 'keep-alive'
}

def encodehash(p):
    navigator = """
    var navigator = {
        userAgent: 'Python-ExecJS',
        appVersion: '1.0',
    };
    """
    window = """
    var window = {};
    window.document = {};
    """
    
    with open('tree-BbjKWDWs.js', 'r', encoding='utf8', errors='ignore') as f:
        jscode = f.read()
    
    ctx = execjs.compile(window + '\n' + navigator + '\n' + jscode)
    result = ctx.call('re', json.dumps(p), '密钥')
    return result

url = 'https://xxx'  # 100012接口
for i in range(0, 9):
    user = 'xxxxx' + str(i)
    p1 = {
        "identityMethod": ["Mobile Number", "Email"],
        "identityType": "xx",
        "account": user
    }
    data = {
        "param": encodehash(p1),
        "serviceId": "100012"
    }
    res = requests.post(url, json=data, headers=headers)
    print(res.json())

四、常见问题解决

1. GBK编码错误

报错信息UnicodeEncodeError: 'gbk' codec can't encode character

解决方案
在脚本开头添加:

import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

2. ES6模块导入导出问题

PyExecJS不支持ES6的import/export语法,需要转换为CommonJS格式:

原始ES6代码

// 导出
export { Jt as K, $t as a, Xt as h };

// 导入
import { K as x, a as K, h as q } from "./module.js";

修改为CommonJS

// 导出
module.exports = { K: Jt, a: $t, h: Xt };

// 导入
const { K: x, a: K, h: q } = require('./module.js');

五、关键注意事项

  1. 环境模拟:JS代码可能依赖浏览器环境(如windownavigator对象),需要手动模拟
  2. 编码问题:确保JS文件以UTF-8编码读取和写入
  3. 动态变化:注意文件名和函数名可能随页面刷新而变化
  4. 依赖完整:确保下载所有必要的依赖JS文件
  5. 错误处理:添加适当的异常捕获和处理机制

六、总结

通过本文介绍的方法,可以有效地逆向分析前端加密逻辑,并利用PyExecJS实现自动化加密请求的构造和发送。关键在于:

  1. 准确找到核心加密函数
  2. 正确处理JS环境依赖
  3. 解决编码和模块语法兼容性问题
  4. 完整模拟浏览器端的加密流程

这种方法避免了复杂的逆向分析过程,直接利用网站自身的加密代码,大大提高了效率和准确性。

前端加密逆向与PyExecJS调用实战教程 前言 在渗透测试过程中,前端加密是常见的防护手段。本文详细讲解如何通过逆向分析前端JavaScript代码,并使用Python的PyExecJS库调用网页自身的JS加密函数,实现自动化处理加密请求。 一、定位关键加密函数 1. 观察请求与响应 通过浏览器开发者工具(F12)查看网络请求 关注请求参数中的加密字段和响应中的特殊字符串 2. 搜索关键字符串 在开发者工具的Sources面板中搜索: 服务ID(如 serviceid ) 具体的ID号 加密参数的名称 3. 下断点跟踪 在疑似加密函数处设置断点 跟踪函数调用栈,找到核心加密函数(如示例中的 c=$(b, x.value) ) 4. 追踪函数来源 注意新声明的类(如 l5 ) 检查是否从其他JS文件引入 注意每次刷新页面时文件名和函数名的变化 二、下载必要JS文件 定位到核心加密函数所在的JS文件 下载该文件及其所有依赖文件 保存时注意保持原始编码(通常为UTF-8) 三、使用PyExecJS调用JS函数 1. 安装PyExecJS 2. 基本调用方法 3. 完整请求示例 四、常见问题解决 1. GBK编码错误 报错信息 : UnicodeEncodeError: 'gbk' codec can't encode character 解决方案 : 在脚本开头添加: 2. ES6模块导入导出问题 PyExecJS不支持ES6的 import/export 语法,需要转换为CommonJS格式: 原始ES6代码 : 修改为CommonJS : 五、关键注意事项 环境模拟 :JS代码可能依赖浏览器环境(如 window 、 navigator 对象),需要手动模拟 编码问题 :确保JS文件以UTF-8编码读取和写入 动态变化 :注意文件名和函数名可能随页面刷新而变化 依赖完整 :确保下载所有必要的依赖JS文件 错误处理 :添加适当的异常捕获和处理机制 六、总结 通过本文介绍的方法,可以有效地逆向分析前端加密逻辑,并利用PyExecJS实现自动化加密请求的构造和发送。关键在于: 准确找到核心加密函数 正确处理JS环境依赖 解决编码和模块语法兼容性问题 完整模拟浏览器端的加密流程 这种方法避免了复杂的逆向分析过程,直接利用网站自身的加密代码,大大提高了效率和准确性。