在之前公司抓取过一段时间web3相关数据,昨天研究记录下,结果今天就增加登录,跑下程序发下还好,网站逻辑和参数没有变化,抓紧记录下,要不改完,思路全网了。
每次点击翻页能看到如下的数据,sign、content参数不知道是啥。概率是加密了,搜索明文内容找不返回数据。
返回数据如下:内容很长一个都看不懂
查找sign,好多,最后一点点跟。总算找到 content: (0, u.encryptData)(n)
t的明文应该是url参数,通过他的加密生成相应的加密参数。进入到方法中看到具体的加密方法
从控制台执行结果看,应该是一个参数,具体是哪个,可以后面如何赋值。
扫描二维码关注公众号,回复:
17456695 查看本文章

通过下面可以判断上面是content,通过content生成一个md5值。传入md5值,生成sign值。
在分析具体的加密解密方式。如下第一个是公钥加密,下面是私钥加密,sha1算法,熟悉常用加密算法能猜到这是rsa,下面有秘钥定义和秘钥内容,这个在页面第一次初始化时候生成。
data数据的还原
AES_ECB模式实现
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
# pad 填充, unpad 解填充
from base64 import b64encode, b64decode
import execjs
def encrypt_ecb(key,data):
# 随机生成密钥
aes = AES.new(key, AES.MODE_ECB) # (密钥, 加密模式)
res = aes.encrypt(pad(data, 16))
return res
def decrypt_ecb(key,data):
aes = AES.new(key, AES.MODE_ECB) # (密钥, 解密模式)
res = aes.decrypt(b64decode(data))
# 如果不进行解填充,后面就会有奇怪的字符
return unpad(res, 16,'pkcs7').decode()
def aes_data(data):
key =b'秘钥'
decrypt_data = decrypt_ecb(key,data)
return json.loads(decrypt_data)
def encrypt_md5(text):
# 创建一个MD5对象
md5 = hashlib.md5()
# 将文本转换为字节类型并更新到MD5对象中
md5.update(text.encode('utf-8'))
# 获取加密后的结果(16位十六进制表示)
encrypted_result = md5.hexdigest()
return encrypted_result
def get_content(data):
js_str = """
const NodeRSA = require('node-rsa');
function get_content(data){
const publicKey = "-----BEGIN PUBLIC KEY----- 秘钥 -----END PUBLIC KEY-----"
const encrypt = new NodeRSA(publicKey,'pkcs8-public');
encrypt.setOptions({ encryptionScheme: 'pkcs1' })
const encryptedData = encrypt.encrypt(data, 'base64');
console.log('Encrypted Data:', encryptedData);
return encryptedData
}
"""
js_obj = execjs.compile(js_str)
res = js_obj.call('get_content',data)
return res
如有问题可以联系我删帖,或者交流
微信号:liu_yue_yang