Appearance
览*网展开数据接口参数分析
目标网站: 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
,输出如下
破案了,这不就是需要的参数吗,那么我们继续跟入,查看这个参数是怎么生成的,可以看到 e
为 585844432
,这个应该是列表页每项的ID,那么来看下这个参数e是哪个方法的入参呢?
出来了,点击输出内容进入此方法
可以看到 e
作为参数,参与了一个 ASE
加密, AES
的 Key
= 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))
验证下结果