某大学MOOC登录分析
文章描述
说在前面
本文仅供学习技术交流,如有侵权请立刻联系我 24小时内 删除下架。
目标站点
aHR0cHM6Ly93d3cuaWNvdXJzZTE2My5vcmcv
与某易登录完全一致。
上干货
1.分析接口
观察结果发现,在登录时总计请求发送了8次,必要的请求其实只有5个,其中一个是要获取cookie在后面进行携带登录。
- 获取cookie链接 :/dl/zj/yd/ini 获取相应cookie为:l_yd_s_imooccjJVGQM
- 获取加密参数: /dl/zj/yd/powGetP
- 获取加密参数:tk
- 登录: /dl/zj/yd/powLogin
2.分析接口参数
以上接口都是发送了 encParams 加密参数 获取相应结果。
- 关键词搜索 找了加密位置
- 跟进方法获取 加密参数的组成值 加密方法:window.URSSM4.encrypt(JSON.stringify(e), _sm4pubkey) 观察使用的是 SSM4加密方法 _sm4pubkey = “BC60B8B9E4FFEFFA219E5AD77F11F9E2”
``` 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))
```
验证通过,其他接口同理可证,教程结束。
注意一点
在密码加密的时候使用的是 RSA非对称加密
登录成功。