脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - python+JS 实现逆向 SMZDM 的登录加密

python+JS 实现逆向 SMZDM 的登录加密

2023-02-07 11:18梦想橡皮擦 Python

这篇文章主要介绍了python+JS 实现逆向 SMZDM 的登录加密,文章通过利用SMZDM平台展开详细的内容介绍,需要的小伙伴可以参考一下

实战场景

这次被我们盯上的平台是【SMZDM】。

本次目标站点是:aHR0cHM6Ly93d3cuc216ZG0uY29tLw==。

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

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

python+JS 实现逆向 SMZDM 的登录加密

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

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

python+JS 实现逆向 SMZDM 的登录加密

接口请求参数是:

  • 请求网址: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函数竟然调用了一个新的接口。

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
  },

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

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

python+JS 实现逆向 SMZDM 的登录加密

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

二者结果一致,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)

运行代码得到如下响应,其中pub_key也被获取到。

python+JS 实现逆向 SMZDM 的登录加密

多次测试接口之后,发现错误,触发了账户限制,在大家编码的时候,建议多准备几个不同的账号,防止被封禁。

python+JS 实现逆向 SMZDM 的登录加密

进一步调试发现 JS 加密使用的是一个插件,直接下载对应 JS 如下:

https://res.Python混淆.com/resources/public/user/zhiyou/js/jsencrypt.min.js

在本地搭建一个 JS 代码可以运行的环境编写如下代码,其中涉及上述提及的文件。

<!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>

然后可以用 Selenium 进行调用,通过 URL 参数传递 pub_key 即可。

python+JS 实现逆向 SMZDM 的登录加密

逻辑也非常简单,Python 调用接口生成 KEY,然后将 KEY 传递到我们自己构建的 JS 环境中,最后通过 Python 调用目标站点(自己搭建)的地址,获取加密值,然后进行传递。

到此这篇关于python+JS 实现逆向 SMZDM 的登录加密的文章就介绍到这了,更多相关SMZDM 登录加密内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7089236455167361031

延伸 · 阅读

精彩推荐
  • Python如何利用Python爬取抖音APP数据

    如何利用Python爬取抖音APP数据

    相信大家都有过手滑的时刻,在这个信息流的世界,有时候错过了,想再找到某条信息简直就是大海捞针,自己手动去找肯定是很浪费时间的。今天,我们...

    编程小清9422021-04-26
  • Python详解Python实现按任意键继续/退出的功能

    详解Python实现按任意键继续/退出的功能

    在学Python时在总想实现一个按任意键继续/退出的程序(受.bat毒害), 奈何一直没有写,今天抽时间写出来了,下面分享给大家,有需要的可以参考借鉴。 ...

    Python教程网39772020-09-04
  • Python基于Tensorflow搭建一个神经网络的实现

    基于Tensorflow搭建一个神经网络的实现

    神经网络可能会让人感到恐惧,特别是对于新手机器学习的人来说。这篇文章主要介绍了基于Tensorflow搭建一个神经网络的实现,从入门开始,感兴趣的可以...

    全部梭哈一夜暴富5462021-11-02
  • PythonPython常用库推荐

    Python常用库推荐

    本文给大家推荐的是在Python学习使用中经常需要用到的第三方库和工具,非常的实用,有需要的小伙伴可以参考下...

    脚本之家7882020-09-13
  • Pythonanaconda python3.8安装后降级

    anaconda python3.8安装后降级

    想给新的环境安装pip install tensorflow,结果报错了。网上了解可以降级为3.6,本文就详细的介绍一下,感兴趣的小伙伴们可以参考一下...

    西瓜65472021-11-29
  • PythonFlask中sqlalchemy模块的实例用法

    Flask中sqlalchemy模块的实例用法

    在本篇文章里小编给大家整理了关于Flask中sqlalchemy模块的实例用法,需要的朋友们可以学习下。...

    爱喝马黛茶的安东尼2132020-08-02
  • Pythonpython如何正确使用yield

    python如何正确使用yield

    在 Python 开发中,yield 关键字的使用其实较为频繁,例如大集合的生成,简化代码结构、协程与并发都会用到它。但是,你是否真正了解 yield 的运行过程呢...

    Magic Kaito6072021-11-10
  • PythonPython+Tableau广东省人口普查可视化的实现

    Python+Tableau广东省人口普查可视化的实现

    本文将结合实例代码,介绍Python+Tableau广东省人口普查可视化,第七次人口普查数据分析,绘制历次人口普查人口数量变化图,需要的朋友们下面随着小编...

    北山啦12432021-12-07