python执行js代码

1. Python执行JavaScript代码

假如在爬虫逆向分析时,发现某个js加密算法比较繁琐,用Python还原同样的算法比较费劲。此时,可以不必使用Python还原,而是利用Python去直接调用JavaScript中定义的功能。

想实现Python调用JavaScript代码,需如下步骤:

  • 在电脑上安装node.js(软件)
  • 安装Python的第三方模块pyexecjs
  • 利用 pyexecjs 调用 nodejs 去执行JavaScript代码

1.1 安装Node.js

最新版本:https://nodejs.org/en/download

历史版本:https://nodejs.org/en/about/previous-releases

安装完后配置到环境变量

请添加图片描述

1.2 运行测试

在当前目录下编写js文件v1.js

function func(arg) {return arg + '666';
}
var a1 = process.argv[2]
var data = func(a1);
console.log(data)

node编译执行

请添加图片描述

python执行执行本地命令:

import subprocessres = subprocess.check_output('node v1.js "林小果"', shell=True)
data_string = res.decode('utf-8')
print(data_string)

请添加图片描述

1.3 安装pyexecjs

pip3.11 install pyexecjs

1.4 运行测试

import execjsjs_string = """
function func(arg) {return arg + '666';
}
"""
JS = execjs.compile(js_string)sign = JS.call("func", "linxiaoguo")
print(sign)

请添加图片描述

2. 逆向登录案例

网站:https://www.seeseed.com/

2.1 逆向分析

请添加图片描述

可以看见该网站对密码进行了加密,在发起程序中找到发起该请求的函数,获取到加密算法:

请添加图片描述

请添加图片描述

可见该函数先调用encodeURIComponent函数对密码进行编码,再用btoa函数将二进制数据编码为Base64格式,我们直接将该代码copy到我们的js文件中:

function func(password) {return btoa(encodeURIComponent(password));
}

在python代码中调用该函数:

import execjswith open("v1.js", "r") as f:js_string = f.read()JS = execjs.compile(js_string)sign = JS.call("func", "123")
print(sign)

可得结果与我们在网页登录时加密后的结果一致:

请添加图片描述

2.2 模拟登录

with open("v1.js", "r") as f:js_string = f.read()JS = execjs.compile(js_string)sign = JS.call("func", "123")
print(sign)res = requests.put(url="https://api.seeseed.com/auth/login",data={"mobile": "1371234567","password": sign}
)print(json.loads(res.text))

获取结果:

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/464945.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六招,搞定大气上档次的可视化界面!有图有真相。

以下是一些设计可视化图表更加美观大气的建议: 选择合适的颜色: 颜色可以帮助人们更好地理解和记忆数据。选择颜色时,应该考虑颜色的对比度、亮度和饱和度等因素,同时也要考虑颜色的文化含义和情感效果。 使用合适的字体&#x…

【动态规划】1301. 最大得分的路径数目

作者推荐 【动态规划】【前缀和】【C算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 LeetCoce1301. 最大得分的路径数目 给你一个正方形字符数组 board ,你从数组最右下方的字符 ‘S’ 出发。 你的目标是到达数组最左上角的字符 ‘E’ ,数组剩余…

嵌入式系统的前景:未来智能汽车

(本文为简单介绍,个人的观点仅供参考) 智能汽车时代已经来临!未来十年,我们的汽车将变得越来越智能化。各大汽车公司在研发自动驾驶技术,目标是实现真正的无人驾驶。要实现这一目标,嵌入式系统将发挥关键作用。 简单来说,嵌入式系统就是在汽…

C++引用(内含和指针的对比)

1.引用的概念 概念:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用一块内存空间。 类型& 引用变量名(对象名) 引用实体;(&这个符…

###C语言程序设计-----C语言学习(11)#数据的存储和基本数据类型

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 一. 数据的存储 1.整型数据的存储 计算机处理的所有信息都以二进制形式表示…

Python:解析获取连续的重叠对pairwise

简介:pairwise函数,返回从输入迭代器获取的重叠对的迭代器,是Python 3.10 新特性,表示一个迭代器从对象中获取连续的重叠对,在某些场景中可以优化代码运行效率。pairwise 函数是一种用于处理列表中元素之间配对操作的通…

基于Python的信息加密解密网站设计与实现【源码+论文+演示视频+包运行成功】

博主介绍:✌csdn特邀作者、博客专家、java领域优质创作者、博客之星,擅长Java、微信小程序、Python、Android等技术,专注于Java、Python等技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 …

VsCode中常用的正则表达式操作

在vscode中可以使用正则表达式来进行搜索内容,极大的方便了我们对大量数据中需要查看的信息进行筛选,使用正则搜索时点击 .* 此文章会持续补充常用的正则操作 1.光标选中搜索到的内容 将搜索的内容进行全选,举例:在如下文件中我需…

Unity类银河恶魔城学习记录3-6 Finalize BattleState源代码 P52

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Enemy.cs using System.Collections; using System.Collections.Generic; …

mysql 中文编码问题

前言 最近在学springboot整合mybatisplus技术,用到mysql数据库,然后发现在windows下插入数据表会出现中文乱码现象 (例如 “我是谁” 在数据库中就成了 “???”) windows show variables like %char%;建表时, 设置默认charset为gbk create table u…

Go语言每日一练——链表篇(八)

传送门 牛客面试笔试必刷101题 ----------------两个链表的第一个公共结点 题目以及解析 题目 解题代码及解析 解析 这一道题使用的还是双指针算法,我们先求出两个链表的长度差n,然后定义快慢指针,让快指针先走n步,最后快慢指…

P1028 [NOIP2001 普及组] 数的计算题解

题目 给出正整数n,要求按如下方式构造数列: 只有一个数字n的数列是一个合法的数列。在一个合法的数列的末尾加入一个正整数,但是这个正整数不能超过该数列最后一项的一半,可以得到一个新的合法数列。 请你求出,一共…