Heim > Backend-Entwicklung > Python-Tutorial > So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

王林
Freigeben: 2023-06-03 19:13:02
nach vorne
893 Leute haben es durchsucht

Eigentliche Kampfszene

Die Plattform, die wir dieses Mal im Auge behalten, ist [SMZDM].

Die Zielseite ist dieses Mal: ​​aHR0cHM6Ly93d3cuc216ZG0uY29tLw==. aHR0cHM6Ly93d3cuc216ZG0uY29tLw==

正式开始前,先注册一个账号,然后模拟一下登录,看一下有哪些参数被偷偷的藏起来了~

当看到登录之后的所有请求参数时,我们还是默默的把站点关闭,撤吧。

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

从上图可以看到usernamepassword是重要加密区,geetest_开头的参数是下述点选验证码涉及的内容,本阶段不做拆解,可以持续关注后续验证码部分逻辑。

登录的点选验证码可以先忽略,这个阶段搞定它不是很容易。

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

接口请求参数是:

  • 请求网址: zhiyou.smzdm.com/user/login/ajax_normal_check

  • 请求方法: POST

参数分析

本次我们先不添加断点,先通过请求启动器进行分析,打开该链接的请求调用堆栈,然后依次分析相关地址。

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

 根据经验可以发现有一个common_submit函数,其所在的文件是window.js,可以重点关注。

接下来添加一个 XHR 断点,关键字是login/ajax_normal_check

断点打住之后,可以直接进入目标函数:

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

结果直接找到了相关加密逻辑,如下图所示:

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

核心代码进行提取,然后进一步进行分析。

var _ = login_obj.encryptPassword(i);
(i = _), (r = btoa(r));
Nach dem Login kopieren

结果发现login_obj.encryptPassword函数竟然调用了一个新的接口。

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
    },
Nach dem Login kopieren

关于账号使用的是 js btoa,这个没有什么特别的,就是简单的 base64 加密

通过开发者控制台,测试使用 btoa加密 12345,然后在通过 Python 进行相同的加密。

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

import base64
wtext = "12345"
# 编码
a = base64.b64encode(wtext.encode())
print(a.decode()) # 输出 MTIzNDU=
Nach dem Login kopieren

二者结果一致,username参数解决。

下面继续看password参数,密码加密的流程是:

  • 通过一个 API 获取 pub_key

  • pub_key进行atob编码;

  • 设置JSEncryptRSAKey加密 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('https://zhiyou.Python加密混淆.com/user/login/pre', headers=headers, timeout=3)
print(res.text)
Nach dem Login kopieren

运行代码得到如下响应,其中pub_key

Registrieren Sie vor dem offiziellen Start zunächst ein Konto und simulieren Sie dann die Anmeldung, um zu sehen, welche Parameter heimlich verborgen sind. ~

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JSWenn wir nach der Anmeldung alle Anforderungsparameter sehen, schließen wir stillschweigend die Site und brechen sie ab.

Wie implementiert Python+JS die umgekehrte SMZDM-Anmeldeverschlüsselung

From oben Wie in der Abbildung zu sehen ist, sind username und password wichtige Verschlüsselungsbereiche. Die Parameter, die mit geetest_ beginnen, sind der Inhalt, um den es im Folgenden geht Klicken Sie auf den Bestätigungscode. In dieser Phase können Sie weiterhin auf die Logik des nachfolgenden Bestätigungscodes achten, ohne ihn zu demontieren. So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

Sie können den Bestätigungscode beim Anmelden ignorieren. Zu diesem Zeitpunkt ist es nicht einfach, ihn zu erhalten.

So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS

Schnittstelle Die Anforderungsparameter sind:

  • Anforderungs-URL:

    zhiyou.smzdm.com/user/login/ajax_normal_check

  • So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS Anforderungsmethode:

    POST

🎜Parameteranalyse🎜🎜Dieses Mal werden wir keine Haltepunkte hinzufügen, sondern zunächst über den Anforderungsstarter analysieren, den Anforderungsaufrufstapel des Links öffnen und dann die relevanten analysieren Adressen der Reihe nach. 🎜🎜So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS🎜🎜 Basierend auf Erfahrung können Sie eine common_submit-Funktion finden, die Datei, in der sie sich befindet, ist window.js, Sie können sich darauf konzentrieren. 🎜🎜Fügen Sie als Nächstes einen XHR-Haltepunkt hinzu. Das Schlüsselwort lautet login/ajax_normal_check. 🎜🎜🎜Nachdem der Haltepunkt abgelaufen ist, können Sie direkt die Zielfunktion eingeben: 🎜🎜🎜python +So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit JS🎜🎜🎜Das Ergebnis ist, dass die relevante Verschlüsselungslogik direkt gefunden wird, wie in der folgenden Abbildung dargestellt: 🎜🎜🎜Wie implementiert Python+JS die umgekehrte SMZDM-Anmeldeverschlüsselung🎜🎜Der Kerncode wird extrahiert und dann weiter analysiert. 🎜
https://res.Python混淆.com/resources/public/user/zhiyou/js/jsencrypt.min.js
Nach dem Login kopieren
🎜Es stellte sich heraus, dass die Funktion login_obj.encryptPassword tatsächlich eine neue Schnittstelle aufrief. 🎜
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>测试环境</title>
    <script src="jsencrypt.min.js"></script>
    <script>
      function getQueryVariable(variable) {
        var query = window.location.search.substring(1);
        var vars = query.split("&");
        for (var i = 0; i < vars.length; i++) {
          var pair = vars[i].split("=");
          if (pair[0] == variable) {
            return pair[1];
          }
        }
        return false;
      }
      pk = getQueryVariable("pk");

      b64 = atob(pk);
      (o = new JSEncrypt()).setPublicKey(b64);

      aaa = o.encrypt("123456");
      document.write(aaa);
    </script>
  </head>
  <body></body>
</html>
Nach dem Login kopieren
🎜Über das Konto, das 🎜js BTOA🎜 verwendet, gibt es nichts Besonderes daran, es handelt sich um eine einfache Base64-Verschlüsselung🎜🎜Über die Entwicklerkonsole testen Sie die btoa-Verschlüsselung 12345 und dann die gleiche Verschlüsselung über Python durchführen. 🎜🎜So implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS🎜rrreee 🎜二Die Ergebnisse sind konsistent und der Parameter username wurde aufgelöst. 🎜🎜Schauen wir uns weiterhin den Parameter password an. 🎜Der Prozess der Passwortverschlüsselung ist: 🎜🎜
  • 🎜Get pub_key; 🎜
  • 🎜Encode>atob für pub_key; /code> SCHLÜSSEL verschlüsseln; 🎜
  • 🎜Benutzerpasswort verschlüsseln. 🎜
🎜🎜Testen Sie, ob die pub_key-Verschlüsselungsschnittstelle direkt aufgerufen werden kann 🎜🎜rrreee🎜Führen Sie den Code aus und erhalten Sie die folgende Antwort, in der auch pub_key abgerufen wird. 🎜🎜🎜🎜🎜 Nach mehrmaligem Testen der Schnittstelle wurde ein Fehler gefunden, der Kontobeschränkungen auslöste. Beim Codieren wird empfohlen, mehrere verschiedene Konten vorzubereiten, um eine Sperrung zu verhindern. 🎜🎜🎜🎜🎜🎜 Beim weiteren Debuggen wurde festgestellt, dass die JS-Verschlüsselung ein Plug-in verwendet. Laden Sie das entsprechende JS wie folgt herunter: 🎜🎜rrreee🎜🎜Erstellen Sie eine Umgebung, in der JS-Code lokal ausgeführt werden kann.🎜 Schreiben Sie den folgenden Code, der die Dateien umfasst oben erwähnt. 🎜rrreee🎜 Dann können Sie es mit Selenium aufrufen, indem Sie pub_key über den URL-Parameter übergeben. 🎜🎜🎜🎜🎜Die Logik ist auch sehr einfach. Python ruft die Schnittstelle auf, um den SCHLÜSSEL zu generieren, und übergibt den SCHLÜSSEL dann an die JS-Umgebung, die wir selbst erstellt haben Python, um den verschlüsselten Wert abzurufen und ihn dann weiterzugeben. 🎜

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die umgekehrte SMZDM-Anmeldeverschlüsselung mit Python+JS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage