JS の解析と Js2Py の使用

JSの解析

Web サイトでは通常、ログイン パスワードが暗号化されているため、パスワードを暗号化してバックエンド サーバーに送信する必要があるため、Python でログインするときにアカウント パスワードをどのように使用するかが問題になります。

この時点で、JS 解析を行うことができます。JS ファイルを解析することで、各ボタン、各イベント、各リクエストに対応する JS ファイル、つまり JS ファイルの場所を特定することができます。次に、JS コードを分析して実行ロジックを決定します。

JS の分析は、イベント リスナー、検索キーワード、関連する JS ファイルのリクエストの 3 つの側面から開始できます。

イベントリスナー

ボタンのバインド js イベント (確認済み送信イベントなど) を観察します。

ここに画像の説明を挿入
イベントに関連付けられた JS ファイル (例: ) をクリックするsearch-sug_653d65d.jsと、自動的に JS ファイルにジャンプします。JS
ここに画像の説明を挿入
の特定の場所を見つけたら、ポイントを中断して、JS の実行ロジックを観察および分析します。ここに画像の説明を挿入

キーワードを検索する

Web サイト内のボタンが 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の応用例

Web サイトでは通常、ログイン パスワードが暗号化されているため、パスワードを暗号化してバックエンド サーバーに送信する必要があるため、Python でログインするときにアカウント パスワードをどのように使用するかが問題になります。

この際、JS解析により対象Webサイトのログインプロセスを取得し、ログインパスワードの暗号化プロセスとロジックを解析し、暗号化プロセスとロジックを把握した上で、JS暗号化ロジックをパッケージ化して加工することができます。 JSファイル

次に、この JS コードを Js2Py を通じて 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())

おすすめ

転載: blog.csdn.net/qq_38628046/article/details/129104129