ホームページ  >  記事  >  バックエンド開発  >  Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法

Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法

王林
王林転載
2023-06-03 19:13:02863ブラウズ

実戦シナリオ

今回注目するプラットフォームは【SMZDM】です。

今回の対象サイトは aHR0cHM6Ly93d3cuc216ZG0uY29tLw== です。

正式に開始する前に、最初にアカウントを登録し、次にログインをシミュレートして、どのパラメータが秘密に隠されているかを確認します~

ログイン後にすべてのリクエストパラメータを確認したら、静かに実行する方がよいでしょう。サイトを閉じて撤回してください。

Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法

上の図からわかるように、usernamepassword は、 で始まる重要な暗号化領域です。 geetest_ パラメータは、以下のクリック認証コードに含まれる内容です。この段階では逆アセンブルしません。引き続き、後続の認証コードのロジックに注目してください。

ログイン用のクリック確認コードは無視してかまいませんが、この段階では取得するのは簡単ではありません。

Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法

インターフェイス リクエスト パラメーター:

  • リクエスト URL: zhiyou.smzdm.com/ user/login/ajax_normal_check

  • リクエストメソッド: POST

#パラメータ分析

これここではブレークポイントを追加しませんが、最初にリクエスト ランチャーを通じて分析し、リンクのリクエスト コール スタックを開き、次に関連するアドレスを順番に分析します。

Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法

経験に基づいて、

common_submit 関数が存在し、それが配置されているファイルは window.js# であることがわかります。 ##、それに集中できます。 次に、XHR ブレークポイントを追加します。キーワードは

login/ajax_normal_check

です。

ブレークポイントが終了したら、ターゲット関数に直接入力できます。

Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法

結果は、関連する暗号化ロジックは次のように直接見つかります。図に示すように:

Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法#コア コードが抽出され、さらに分析されます。

var _ = login_obj.encryptPassword(i);
(i = _), (r = btoa(r));

login_obj.encryptPassword

関数が実際には新しいインターフェイスを呼び出していることが判明しました。 <pre class="brush:js;">encryptPassword: function(r) { var t = null; return $.ajax({ url: &quot;//zhiyou.smzdm.com/user/login/pre&quot;, type: &quot;get&quot;, async: !1, dataType: &quot;json&quot; }).done(function(e) { var o; t = e &amp;&amp; 0 != e.error_code ? null : ((o = new JSEncrypt).setPublicKey(atob(e.data.pub_key)), o.encrypt(r)) }), t },</pre>

js btoa

を使用したアカウントについては、特別なことは何もありません。単純な Base64 暗号化です開発者コンソールを通じて、

btoa を使用してテストします

Encryption 12345 を選択し、Python を介して同じ暗号化を実行します。

import base64
wtext = "12345"
# 编码
a = base64.b64encode(wtext.encode())
print(a.decode()) # 输出 MTIzNDU=
Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法結果には一貫性があり、

username

パラメータは解決されています。 引き続き

password

パラメーターを見てみましょう。 パスワード暗号化プロセスは次のとおりです:

  • pub_key を取得します。 API を介して

    ;

  • pub_key
  • ;

    ##Settingatob

    をエンコードしますJSEncryptRSAKey
  • Encrypt KEY;
  • ユーザー パスワードを暗号化します。

  • pub_key 暗号化インターフェイスを直接呼び出せるかどうかをテストします。
import requests
headers = {
    "Host": "zhiyou.smzdm.com",
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Referer": "https://zhiyou.Python加密混淆.com/user/login/",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) 自己的 UA"
}
res = requests.get(&#39;https://zhiyou.Python加密混淆.com/user/login/pre&#39;, headers=headers, timeout=3)
print(res.text)

コードを実行すると、次の応答が得られます。 も到着します。

# インターフェースを何度もテストした結果、アカウント制限が発生するエラーが見つかりました。コーディングする場合は、禁止されないように複数の異なるアカウントを用意することをお勧めします。

Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法

# さらにデバッグすると、JS 暗号化にプラグインが使用されていることがわかりました。次のように、対応する JS を直接ダウンロードします。 # JS コードを実行できる環境をローカルに構築する

上記のファイルを含む次のコードを記述します。

https://res.Python混淆.com/resources/public/user/zhiyou/js/jsencrypt.min.js
Python + JS を使用して逆 SMZDM ログイン暗号化を実装する方法 その後、Selenium を使用してこれを呼び出し、URL パラメーターを通じて pub_key を渡すことができます。

ロジックも非常にシンプルで、Python がインターフェースを呼び出して KEY を生成し、その KEY を自分で構築した JS 環境に渡し、最後にターゲット サイトを呼び出します (自分たちで構築した) Python アドレスを介して暗号化された値を取得し、それを渡します。

以上がPython + JS を使用して逆 SMZDM ログイン暗号化を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。