爬虫学习7
基础班app(逆向)
from Crypto.Cipher import AES
from Crypto.Util.Padding import paddef aes_encrypt(data_string):key = "fd6b639dbcff0c2a1b03b389ec763c4b"iv = "77607a672d57d64c" # 确保IV是正确的aes = AES.new(key=key.encode('utf-8'), mode=AES.MODE_CBC, iv=iv.encode('utf-8'))raw = pad(data_string.encode('utf-8'), 16) # 确保数据块大小为16的倍数return aes.encrypt(raw)data = "aadzfalskdjf;lkaj;dkjfa;skdjf;akjsdf;kasd;fjaoqwierijhnlakjdhf"
result = aes_encrypt(data)
print(result)
代码解释:
- 导入库:导入
Crypto.Cipher.AES
用于AES加密,导入Crypto.Util.Padding.pad
用于数据填充。 - 定义加密函数:
key
:密钥,从字符串转换为UTF-8编码的字节。iv
:初始化向量,同样需要转换为字节。AES.new
:创建一个新的AES加密对象,指定模式为CBC。pad
:确保数据长度是16的倍数,因为AES加密块大小为16字节。aes.encrypt
:对填充后的数据进行加密。
- 加密数据:调用
aes_encrypt
函数,传入要加密的数据字符串,打印加密后的结果。
注意事项:
- 确保您的IV(初始化向量)是正确的,它应该是16字节长。
- 确保您的密钥长度是正确的,对于AES-128,密钥长度应该是16字节;对于AES-192和AES-256,密钥长度分别是24字节和32字节。
改版
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import binasciiKEY = "4E2918885FD98109869D14E0231A0BF4"
KEY = binascii.a2b_hex(KEY) # 将十六进制字符串转换为字节
IV = "16B17E519DDD0CE5B79D7A63A4DD801C"
IV = binascii.a2b_hex(IV) # 将十六进制字符串转换为字节def aes_encrypt(data_string):aes = AES.new(key=KEY, mode=AES.MODE_CBC, iv=IV)raw = pad(data_string.encode('utf-8'), 16) # 确保数据块大小为16的倍数aes_bytes = aes.encrypt(raw)return binascii.b2a_hex(aes_bytes).decode().upper() # 将加密后的字节转换为十六进制字符串并转为大写data = "878975262 d000035rirv1631615607 mg3c3b04ba 1.3.5|ktjwim89 to920wegpg 4330701 https://w.yangshipin.cn/mozil1a/5.0(macintosh;Mozilla Netscape Macintel"
result = aes_encrypt(data)
print(result)
代码解释:
- 导入库:导入
Crypto.Cipher.AES
用于AES加密,导入Crypto.Util.Padding.pad
用于数据填充,导入binascii
用于十六进制转换。 - 定义密钥和IV:
KEY
:密钥,从十六进制字符串转换为字节。IV
:初始化向量,同样需要转换为字节。
- 定义加密函数:
AES.new
:创建一个新的AES加密对象,指定模式为CBC。pad
:确保数据长度是16的倍数,因为AES加密块大小为16字节。aes.encrypt
:对填充后的数据进行加密。binascii.b2a_hex
:将加密后的字节转换为十六进制字符串。upper()
:将十六进制字符串转换为大写。
- 加密数据:调用
aes_encrypt
函数,传入要加密的数据字符串,打印加密后的结果。
逆向的过程中,如果看到的AES,一定要去找:key、iv
用无痕模式:
以前你访问过这个平台的话,有一些的cookie会记录下来(模拟第一次访问),内部算法生成的值都会重新计算一遍。
关于参数
参数固定
算法生成
之前的请求返回
点播播放分析(请求体)
1.分析playvinfo请求
2.分析guid算法