Skip to content
On this page

览*网展开数据接口参数分析

目标网站: aHR0cHM6Ly93d3cubGFibmV0d29yay5jb20uY24vIy8=

获取加密参数流程: 首页 -> 关键字搜索 -> 列表页面 -> 展开

抓包分析过程:

直接上搜索大法,F12 打开控制台,使用 Search 功能搜索字符串 /oldapi/mall/chemical/products ,搜索结果如下

直接点进去进行 代码格式化,再次 Ctrl + F 再次搜索以上字符串,结果如下

一共发现 5 个结果,如下

js
Line: 1107 return Object(o["b"])("/oldapi/mall/chemical/products", e, "POST", !0)  
  
Line: 1110 return Object(o["b"])("/oldapi/mall/chemical/products/".concat(Object(r["c"])(e), "/").concat(t), null, "GET", !0)  
  
Line: 1128 return Object(o["b"])("/oldapi/mall/chemical/products/".concat(Object(r["c"])(e), "/").concat(t), null, "GET", !1)  
  
Line: 1134 return Object(o["b"])("/oldapi/mall/chemical/products/".concat(Object(r["c"])(e), "/similar/").concat(t), null, "GET", !1)  
  
Line: 1261 return Object(o["b"])("/oldapi/mall/chemical/products/".concat(e, "/synonyms"), null, "GET", !1)  

concat 用法不懂的可以百度下,concat 方法用于连接两个或多个数组,如果自己不确定就都打上 断点,一共也就5个,全部打上断点后继续操作,选择其他选项 点击展开

断了下来,我们来分别打印 concat 方法的参数内容,打开 Console 界面,输入 Object(r["c"])(e)t ,输出如下

破案了,这不就是需要的参数吗,那么我们继续跟入,查看这个参数是怎么生成的,可以看到 e585844432,这个应该是列表页每项的ID,那么来看下这个参数e是哪个方法的入参呢?

出来了,点击输出内容进入此方法

可以看到 e 作为参数,参与了一个 ASE 加密, AESKey = 46cc793c53dc451b ,模式为 ECB ,填充为 Pkcs7,那么我们用 Python 来实现下,代码如下

python
from Crypto.Cipher import AES  
import binascii  
  
  
def add_to_16(k):  
while len(k) % 16 != 0:  
k += '\0'  
return k  
  
  
def encrypt(text, aes_key):  
if isinstance(aes_key, str):  
aes_key = aes_key.encode('utf8')  
bs = AES.block_size  
pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)  
cipher = AES.new(aes_key, AES.MODE_ECB)  
data = cipher.encrypt(pad(text).encode('utf8'))  
encrypt_data = binascii.b2a_hex(data)  
return encrypt_data.decode('utf8')  
  
  
def decrypt(text, aes_key):  
if isinstance(aes_key, str):  
aes_key = aes_key.encode('utf8')  
cipher = AES.new(aes_key, AES.MODE_ECB)  
plain_text = cipher.decrypt(binascii.a2b_hex(text))  
return plain_text.decode('utf8').rstrip('\0')  
  
  
if __name__ == '__main__':  
cleartext = '585844432'  
key = '46cc793c53dc451b'  
key = add_to_16(key)  
encrypt_result = encrypt(cleartext, key)  
print('加密前数据:{}\n======================='.format(cleartext))  
print('加密后的数据:', encrypt_result)  
  
decrypt_result = decrypt(encrypt_result, key)  
print('解密后的数据:{}'.format(decrypt_result))  
  

验证下结果

Released under the MIT License.