今回注目するプラットフォームは【SMZDM】です。
今回の対象サイトは aHR0cHM6Ly93d3cuc216ZG0uY29tLw==
です。
正式に開始する前に、最初にアカウントを登録し、次にログインをシミュレートして、どのパラメータが秘密に隠されているかを確認します~
ログイン後にすべてのリクエストパラメータを確認したら、静かに実行する方がよいでしょう。サイトを閉じて撤回してください。
上の図からわかるように、username
、password
は、 で始まる重要な暗号化領域です。 geetest_
パラメータは、以下のクリック認証コードに含まれる内容です。この段階では逆アセンブルしません。引き続き、後続の認証コードのロジックに注目してください。
ログイン用のクリック確認コードは無視してかまいませんが、この段階では取得するのは簡単ではありません。
インターフェイス リクエスト パラメーター:
リクエスト URL: zhiyou.smzdm.com/ user/login/ajax_normal_check
リクエストメソッド: POST
common_submit 関数が存在し、それが配置されているファイルは
window.js# であることがわかります。 ##、それに集中できます。 次に、XHR ブレークポイントを追加します。キーワードは
です。
結果は、関連する暗号化ロジックは次のように直接見つかります。図に示すように:
#コア コードが抽出され、さらに分析されます。
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: "//zhiyou.smzdm.com/user/login/pre",
type: "get",
async: !1,
dataType: "json"
}).done(function(e) {
var o;
t = e && 0 != e.error_code ? null : ((o = new JSEncrypt).setPublicKey(atob(e.data.pub_key)),
o.encrypt(r))
}),
t
},</pre>
を使用したアカウントについては、特別なことは何もありません。単純な Base64 暗号化です開発者コンソールを通じて、
btoa を使用してテストしますEncryption 12345
を選択し、Python を介して同じ暗号化を実行します。
import base64 wtext = "12345" # 编码 a = base64.b64encode(wtext.encode()) print(a.decode()) # 输出 MTIzNDU=結果には一貫性があり、username
パラメータは解決されています。 引き続き
パラメーターを見てみましょう。 パスワード暗号化プロセスは次のとおりです:
;
##Setting
で
atob
ユーザー パスワードを暗号化します。
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('https://zhiyou.Python加密混淆.com/user/login/pre', headers=headers, timeout=3) print(res.text)
コードを実行すると、次の応答が得られます。 も到着します。
# インターフェースを何度もテストした結果、アカウント制限が発生するエラーが見つかりました。コーディングする場合は、禁止されないように複数の異なるアカウントを用意することをお勧めします。
# さらにデバッグすると、JS 暗号化にプラグインが使用されていることがわかりました。次のように、対応する JS を直接ダウンロードします。 # JS コードを実行できる環境をローカルに構築する
上記のファイルを含む次のコードを記述します。https://res.Python混淆.com/resources/public/user/zhiyou/js/jsencrypt.min.jsその後、Selenium を使用してこれを呼び出し、URL パラメーターを通じて pub_key を渡すことができます。
ロジックも非常にシンプルで、Python がインターフェースを呼び出して KEY を生成し、その KEY を自分で構築した JS 環境に渡し、最後にターゲット サイトを呼び出します (自分たちで構築した) Python アドレスを介して暗号化された値を取得し、それを渡します。
以上がPython + JS を使用して逆 SMZDM ログイン暗号化を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。