【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。

本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!


在 Web 开发和爬虫逆向分析中,我们经常需要处理 JavaScript 代码。Python 本身不支持直接执行 JS,但通过 pyexecjs 这个轻量级库,我们可以轻松地在 Python 环境中调用 JavaScript 代码。本文将详细介绍如何使用 pyexecjs 与 Node.js 配合,实现 Python 调用 JS 代码的完整流程。

1. 环境准备:安装 Node.js

pyexecjs 依赖于一个能运行 JS 的环境,我们选择 Node.js 作为执行引擎。

1.1 安装 Node.js


# Ubuntu/Debian
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install --lts
nvm use --lts
# Mac (使用 Homebrew)
brew install node

1.2 验证 Node.js 安装


node -v  # 应输出类似 v18.18.2
npm -v   # 应输出类似 9.8.0

2. 安装 pyexecjs


pip install pyexecjs

2.1 验证安装


import execjs
print(execjs.get().name)  # 输出: Node.js (V8)


3. 简单使用示例

3.1 直接执行 JS 代码


import execjs
# 执行 JS 代码并获取结果
js_code = '"鲁班_王昭君_猴子_亚瑟_蔡文姬".split("_")'
result = execjs.eval(js_code)
print(result)  # 输出: ['鲁班', '王昭君', '猴子', '亚瑟', '蔡文姬']


3.2 编译 JS 代码并调用函数


# 编译 JS 代码
js = """
function add(a, b) {
    return a + b;
}
function multiply(a, b) {
    return a * b;
}
"""
ctx = execjs.compile(js)
# 调用 JS 函数
print(ctx.call("add", 10, 20))      # 输出: 30
print(ctx.call("multiply", 5, 6))    # 输出: 30



3.3 Windows 编码问题解决方案

Windows 系统可能会遇到编码问题,解决方法如下:


import subprocess
from functools import partial
# 解决 Windows 编码问题
subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import execjs
print(execjs.get().name)  # 确保能正常运行



4. 补环境:解决常见依赖问题

4.1 补全 JS 第三方库环境

当 JS 代码依赖第三方库(如 crypto、axios)时,需要先安装这些库:


# 安装 crypto 库
npm install crypto
# 安装 axios 库
npm install axios



4.2 补全浏览器环境

对于需要浏览器环境的 JS 代码(如处理 DOM 或浏览器 API),可以使用 jsdom


npm install jsdom


然后在 Python 中使用:

python

深色版本

import execjs
# 创建浏览器环境
ctx = execjs.compile("""
const { JSDOM } = require('jsdom');
const dom = new JSDOM();
const { document } = dom.window;
""")
# 使用浏览器 API
ctx.eval("document.createElement('div')")

5. 找加密入口的几种方法

在爬虫逆向分析中,找到 JS 加密入口是关键步骤。以下是几种实用方法:


5.1 浏览器开发者工具

  1. 打开浏览器开发者工具(F12)
  2. 在 Network 面板中查看请求
  3. 找到加密参数的请求,查看对应的 JS 文件
  4. 在 Sources 面板中搜索关键参数(如 signtoken

5.2 代码搜索法

  1. 在 JS 文件中搜索常见加密函数(如 md5sha1aes
  2. 搜索参数名(如 dataparamssign
  3. 查看函数调用关系

5.3 调试技巧


# 在关键函数处添加调试输出
js_code = """
function encrypt(data) {
    console.log('加密参数:', data);
    // 加密逻辑
    return encryptedData;
}
"""
ctx = execjs.compile(js_code)
result = ctx.call("encrypt", "test")


6. 实战案例:调试工具

让我们通过一个实战案例,展示如何使用 pyexecjs 调试 JS 加密逻辑。


6.1 案例:模拟登录加密

假设我们有一个登录接口,需要对密码进行加密:

JS 代码 (encrypt.js):


function encryptPassword(password) {
    const salt = "my_salt";
    const hash = CryptoJS.SHA256(password + salt).toString();
    return hash;
}


Python 调用:


import execjs
import os
# 设置 Node.js 环境变量
os.environ["NODE_PATH"] = "/usr/local/lib/node_modules/"
# 编译 JS 代码
with open("encrypt.js", "r") as f:
    js_code = f.read()
ctx = execjs.compile(js_code)
# 调用加密函数
encrypted = ctx.call("encryptPassword", "123456")
print(f"加密后的密码: {encrypted}")


6.2 调试技巧

  1. 逐步调试:在 JS 代码中添加 console.log 输出关键变量
  2. 参数验证:打印输入参数和输出结果,确认加密逻辑
  3. 环境一致性:确保 Python 和 Node.js 环境中的库版本一致


7. 总结

pyexecjs 是一个非常实用的 Python 库,它让我们能够在 Python 中无缝调用 JavaScript 代码。通过结合 Node.js,我们可以轻松处理各种复杂的 JS 逻辑,包括:

  • 数据加密/解密
  • 网络请求模拟
  • 逆向分析
  • 自动化测试

关键要点:

  1. pyexecjs 依赖于 Node.js 环境
  2. 安装 pyexecjs 后,使用 execjs.get().name 验证环境
  3. 对于复杂的 JS 代码,可以使用 execjs.compile() 预编译
  4. Windows 用户需要处理编码问题
  5. 解决第三方库依赖时,使用 npm install 安装

通过本文介绍的方法,你可以轻松地在 Python 项目中集成 JavaScript 逻辑,解决各种复杂场景下的问题。无论你是爬虫开发者、安全研究人员,还是全栈开发者,pyexecjs 都将成为你工具箱中的利器。

小贴士:在实际项目中,建议将 JS 代码保存为独立文件,通过 open() 读取,这样更便于维护和调试。



相关文章
|
12月前
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
1677 58
|
10月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
256 1
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
1228 9
|
11月前
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
191 0
|
10月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
3141 11
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
1204 155
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
13719 23
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
902 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!

推荐镜像

更多