首页 > 其他分享 >JS的解析与Js2Py使用

JS的解析与Js2Py使用

时间:2023-08-18 10:32:09浏览次数:30  
标签:password JS Python JavaScript js Js2Py 解析

JS的解析

在一个网站中,登录密码通常是会进行加密操作的,那么在Python中如何使用账号密码登录就成了一个问题,因为密码需要被加密发送到后端服务器。

此时就可以进行JS解析,通过分析JS文件就可以知道:每个按钮,每个事件、每个请求对应的JS文件,即需要确定JS文件的位置,然后分析JS代码确定执行逻辑。

JS的解析可以从三方面入手:事件监听器、搜索关键字、请求关联JS文件

事件监听器

观察按钮的绑定js事件,如确定的submit事件。

在这里插入图片描述 点击事件关联的JS文件,如:search-sug_653d65d.js,然后自动跳转到JS文件 在这里插入图片描述 找到JS具体位置之后,打断点,观察分析JS的执行逻辑 在这里插入图片描述

搜索关键字

如果网站中的某个按钮没有绑定js事件监听,那么可以通过搜索请求中的关键字来找到js的位置

点击百度一下发起请求,得到请求URL,打开搜索 在这里插入图片描述

在搜索中输入请求地址关键字进行搜索,点击搜索结果跳转到相应JS文件。

在这里插入图片描述

请求关联JS文件

通常来说,当发送一个请求时,这个请求会关联一个js文件,点击进入即可进行JS代码执行流程的分析。

在这里插入图片描述

Js2Py

Js2Py是一个用于将JavaScript代码转换为Python代码的库。它提供了一种方式来在Python环境中执行JavaScript代码,可以将JavaScript函数和对象转换为Python的函数和对象,并且能够在Python中调用这些转换后的代码。

Js2Py的工作原理是将JavaScript代码解析为抽象语法树(AST),然后将该AST转换为Python的表示形式。它支持大多数的JavaScript语法和特性,并且提供了一些额外的功能来简化JavaScript到Python的转换过程。

使用Js2Py,开发者可以在Python环境中使用JavaScript函数、库和算法,从而更方便地在不同语言之间共享代码和功能。

Js2Py就是一个JavaScript的翻译工具,也是一个通过纯python实现的JavaScript的解释器

GitHub: https://github.com/PiotrDabkowski/Js2Py

Js2Py的简单使用

安装Js2Py

要使用 Js2Py,首先需要安装该库

pip install js2py

执行JavaScript代码

使用eval_js函数执行JavaScript表达式1+2,并将结果保存在result变量中。然后通过Python的print函数将结果打印出来

from js2py import eval_js

result = eval_js('1 + 2')
print(result)  # 输出:3

调用JavaScript函数

定义一个JavaScript函数add,然后通过eval_js函数将其转换为Python函数add_func,接下来可以像在JavaScript中一样调用该函数,传入参数并获得结果。

from js2py import eval_js

js_code = '''
function add(a, b) {
    return a + b;
}
'''

add_func = eval_js(js_code)  # 将 JavaScript 函数转换为 Python 函数
result = add_func(3, 4)  # 在 Python 中调用 JavaScript 函数
print(result)  # 输出:7

Js2Py的应用示例

在一个网站中,登录密码通常是会进行加密操作的,那么在Python中如何使用账号密码登录就成了一个问题,因为密码需要被加密发送到后端服务器。

此时就可以通过JS分析,获取目标网站的登录过程,分析登录密码的加密过程、逻辑,在得知加密过程、逻辑后,就可以将此JS加密逻辑封装处理成一个JS文件

然后通过Js2Py将此JS代码加载到Python执行环境中,通过Python代码调用加密函数获得加密密码,以此进行登录。

创建JavaScript文件

创建js-file.js文件,用于模拟登录密码加密

function test(password) {
    password = password.split("").reverse().join("");
    return password;
}

使用JavaScript

import js2py
import requests

#  获取session对象
session = requests.session()
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
}

# 设置session的请求头信息
session.headers = headers

# 使用js2py生成js的执行环境context
context = js2py.EvalJs()

####################### 将需要用到的JS文件加载到执行环境中,有2种方式 #######################

# 1.拷贝使用到js文件的内容到执行环境\项目中
with open("js-file.js", 'r', encoding='utf8') as f:
    context.execute(f.read())

# 2.通过网络请求,读取js文件的内容,使用context来执行
# getJs = requests.get("url", headers=headers).content.decode();
# context.execute(getJs)

# 向context环境中添加需要数据
context.oldPwd = {'password': "my_password"}

#  执行密码加密的js函数
js = '''
       newPwd = test(oldPwd.password)
      '''
context.execute(js)

# 通过context获取加密后密码信息
password = context.newPwd
print("加密前的密码:{} 加密后的密码:{}".format(context.oldPwd.password, password))

# 构建请求参数
data = {
    'username': 'username',
    'password': password,
}

#  使用session发送登录请求
response = session.post("http://localhost:8888/user/login", data=data)
print(response.content.decode())

标签:password,JS,Python,JavaScript,js,Js2Py,解析
From: https://blog.51cto.com/chencoding/7132470

相关文章

  • vue与js
    1.js中(...)用法  https://blog.csdn.net/snackpdd/article/details/119388250                     ---......
  • json
    js对象var obj={    name:“zs”,    age:  7} json对象var obj={    “name":“zs”,    "age":  7} ......
  • docker容器daemon.json配置文件解析
    docker版本高于1.12,配置文件的默认径为:/etc/docker/daemon.json{“api-cors-header”:"",在引擎API中设置CORS标头“authorization-plugins”:[],要加载的授权插件“bridge”:"",将容器附加到网桥“cgroup-parent”:"",为所有容器设置父cgroup“cluster-store......
  • JS常见的设计模式
    单例模式点击查看代码<script>//单例模式=>自始至终都只能创建一个对象让对象唯一存在letWife=(function(){classPerson{constructor(name){this.name=name}}......
  • IIS压缩API返回的JSON数据
    安装IIS压缩功能后点击 配置中选择 system.webServer/httpCompression 点击dynamicTypes 添加以下类型,Json和XML会压缩 ......
  • 转载:python装饰器解析
    原文链接:https://www.cnblogs.com/songyunjie/p/16825830.html这里修正原文代码中的部分错误,调试的python版本为:3.9.161、什么是装饰器?Python的装饰器本质上是一个嵌套函数,它接受被装饰的函数(func)作为参数,并返回一个包装过的函数。这样我们可以在不改变被装饰函数的代码的情况下......
  • vue3 vue.config.js配置详解
    //vue.config.js文件是用于VueCLI项目的全局配置的module.exports={  //部署应用包时的公共路径  publicPath:"./",  //生产环境构建文件的目录名(默认为dist)  outputDir:"dist",  //放置生成的静态资源的目录(默认为dist/static),可以修改为public。  assetsDir......
  • SpringBoot操作前端传的Geojson进行空间查询
    SpringBoot操作前端传的Geojson进行空间查询项目说明:项目技术栈:SpringBoot+MybatisPlus+postgresql先上查询SQLSELECT*FROMdemoWHEREST_Intersects(geom,ST_GeomFromGeoJSON('放geojson类型数据'));表结构Controller层packagecom.itcy.postgresql.controller;importco......
  • js前端传json,后台接收‘‘被转为quot使用replace方法替换
    前端解决方案:varjsonstr=datas.replace(newRegExp('"',"gm"),'"')正则参数说明g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。m执行多行匹配。let data=eval('('+jsonString+')');实例1:    jsonstr.replace(newRegExp('"',......
  • centos 安装nodejs
    1.下载nodejshttps://nodejs.org/en/download/如果想下载其他版本点这里:https://nodejs.org/download/release/可以选择下载到本地或者在服务器使用wget下载wgethttps://nodejs.org/download/release/latest-v20.x/node-v20.5.1-linux-x64.tar.gz1.1上传服务器至/usr/l......