学习通登录JS逆向

逆向过程

抓取登录包

title

分析

  • 登录包里面有unamepassword都是base64编码后的放入解密网站里面解出来为乱码,说明应该有别的加密
  • 追踪一下源码(看js调用)
    title
    找到js加密,发现是AES加密,并且key给了出来
    title
    然后追踪一下其自定义的encryptByAES函数

AES加密代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function encryptByAES(message, key){
let CBCOptions = {
iv: CryptoJS.enc.Utf8.parse(key), // 偏移量iv
mode:CryptoJS.mode.CBC, // AES 模式
padding: CryptoJS.pad.Pkcs7 // AES 填充方式
};
let aeskey = CryptoJS.enc.Utf8.parse(key); // 将key编码为 utf-8 然后赋值给 AESkey
let secretData = CryptoJS.enc.Utf8.parse(message); // 将message编码为 utf-8 然后赋值给 secretData
let encrypted = CryptoJS.AES.encrypt( // AES 加密 后赋值给encrypted
secretData,
aeskey,
CBCOptions
);
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); // base64 编码
}

编写python解密脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from base64 import b64decode
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad

def decryptByAES(base64_msg, key):
# 将Base64编码的密文解码为字节
base64_decode_msg = b64decode(base64_msg)

# 创建一个新的AES对象
cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, IV=key.encode('utf-8'))

# 解密密文
aes_decode_msg = unpad(cipher.decrypt(base64_decode_msg), AES.block_size)

# 将字节解码为字符串
raw_msg = aes_decode_msg.decode('utf-8')

return raw_msg

key = "u2oh6Vu^HWe4_AES"
msg = "47leAZ1BfFA1xXYbIXaALw=="

print(decryptByAES(msg, key))
Contents
  1. 1. 逆向过程
    1. 1.1. 抓取登录包
    2. 1.2. 分析
    3. 1.3. AES加密代码
    4. 1.4. 编写python解密脚本
|