首页
avatar

.瑶

某大学MOOC登录分析

文章描述

说在前面

本文仅供学习技术交流,如有侵权请立刻联系我 24小时内 删除下架。

目标站点

aHR0cHM6Ly93d3cuaWNvdXJzZTE2My5vcmcv
与某易登录完全一致。

上干货

1.分析接口

图 0

观察结果发现,在登录时总计请求发送了8次,必要的请求其实只有5个,其中一个是要获取cookie在后面进行携带登录。

  1. 获取cookie链接 :/dl/zj/yd/ini 获取相应cookie为:l_yd_s_imooccjJVGQM
  2. 获取加密参数: /dl/zj/yd/powGetP
  3. 获取加密参数:tk
  4. 登录: /dl/zj/yd/powLogin
2.分析接口参数

图 1
以上接口都是发送了 encParams 加密参数 获取相应结果。

  1. 关键词搜索 找了加密位置 图 2
  2. 跟进方法获取 加密参数的组成值 加密方法:window.URSSM4.encrypt(JSON.stringify(e), _sm4pubkey) 观察使用的是 SSM4加密方法 _sm4pubkey = “BC60B8B9E4FFEFFA219E5AD77F11F9E2” 图 3
``` json
      e = {
      "pd": "imooc",
      "pkid": "cjJVGQM",
      "pkht": "www.icourse163.org",
      "channel": 0,
      "topURL": "https://www.icourse163.org/",
      "rtid": "wISGX3m95NEIRkUGbDD5vHk3NtAKMvxi"
  }
```  

直接 python 实现加密方法

``` python
from gmssl import sm4
import json

def encrypt_sm4_ecb(data_dict, key_hex):
    key = bytes.fromhex(key_hex)

    # JSON 序列化,紧凑格式
    data_str = json.dumps(data_dict, ensure_ascii=False, separators=(',', ':'))
    print("JSON 字符串:", data_str)

    # UTF-8 编码
    data_bytes = data_str.encode('utf-8')

    # SM4 ECB 加密
    cipher = sm4.CryptSM4()
    cipher.set_key(key, sm4.SM4_ENCRYPT)

    encrypted = cipher.crypt_ecb(data_bytes)
    return encrypted.hex()

# 示例数据
json_data = {
    "pd": "imooc",
    "pkid": "cjJVGQM",
    "pkht": "www.icourse163.org",
    "channel": 0,
    "topURL": "https://www.icourse163.org/",
    "rtid": "wISGX3m95NEIRkUGbDD5vHk3NtAKMvxi"
}
_sm4pubkey = 'BC60B8B9E4FFEFFA219E5AD77F11F9E2'

# 执行加密
try:
    cipher_text = encrypt_sm4_ecb(json_data, _sm4pubkey)
    print("加密结果:", cipher_text)
except Exception as e:
    print("加密失败:", str(e))
```  

图 4
验证通过,其他接口同理可证,教程结束。

注意一点

在密码加密的时候使用的是 RSA非对称加密 图 5
登录成功。

喜欢这篇文章嘛,觉得文章不错的话,奖励奖励我!

支付宝打赏支付宝微信打赏 微信