获取店铺列表数据时(以美食为例),ajax链接如下
https://gz.meituan.com/meishi/api/poi/getPoiList?cityName=%E5%B9%BF%E5%B7%9E&cateId=0&areaId=0&sort=&dinnerCountAttrId=&page=1&userId=&uuid=9a564a1b-5857-4809-81bc-9ec5bfa2511d&platform=1&partner=126&originUrl=https%3A%2F%2Fgz.meituan.com%2Fmeishi%2F&riskLevel=1&optimusCode=10&_token=eJxdjstuglAURf%2FlTiVyeT8SB6BQry0oKKg0DhQQUB7yLjb9915TnTQ5yd5nnTU436BCAZApCCUICdCFFZABNYZjHhCgqfGF4yWRYWnIsZAmgP%2BPSQIBTpU7A%2FInJdGQYGnx8CA2Bn%2BEgiI8EK%2FO4k6zeB4WwhKIm%2BZWyyQZ3cdZmDTtMR%2F7RUbiXscJib8AWM02WMV5febxmc1rN%2FDb2K2TKMctXPTpxaHa%2FqJYcUhO%2B6q1lgaCZWjp%2B2Kr0fM3Zb0ZNO2kBRc%2FQL6atM5u50Jmutq2THne3fjV0EQxWt4v9k0VVQnNk3N%2FNMnzajTqUgY5SodGXKII2pr1dNuPc8kYLas173j6rchnGe1yetrZHiWZd8HTrhaVrGAQ6pBzy8ZXnenV3Q%2FlxhXcfWOIUVonIu0IRSDuuTtr215lFAuS5IZFFgiGWZv8uzbk56wwU2bjcjD8Kqs5tPrdETHbU%2Bd8RKcYxdFkAn5%2BAdZNiy4%3D
详细参数有
params = {'_token': 'eJxdjstuglAURf/lTiVyeT8SB6BQry0oKKg0DhQQUB7yLjb9915TnTQ5yd5nnTU436BCAZApCCUICdCFFZABNYZjHhCgqfGF4yWRYWnIsZAmgP+PSQIBTpU7A/InJdGQYGnx8CA2Bn+EgiI8EK/O4k6zeB4WwhKIm+ZWyyQZ3cdZmDTtMR/7RUbiXscJib8AWM02WMV5febxmc1rN/Db2K2TKMctXPTpxaHa/qJYcUhO+6q1lgaCZWjp+2Kr0fM3Zb0ZNO2kBRc/QL6atM5u50Jmutq2THne3fjV0EQxWt4v9k0VVQnNk3N/NMnzajTqUgY5SodGXKII2pr1dNuPc8kYLas173j6rchnGe1yetrZHiWZd8HTrhaVrGAQ6pBzy8ZXnenV3Q/lxhXcfWOIUVonIu0IRSDuuTtr215lFAuS5IZFFgiGWZv8uzbk56wwU2bjcjD8Kqs5tPrdETHbU+d8RKcYxdFkAn5+AdZNiy4=',
'areaId': '0',
'cateId': '0',
'cityName': '广州',
'dinnerCountAttrId': '',
'optimusCode': '10',
'originUrl': 'https://gz.meituan.com/meishi/',
'page': '1',
'partner': '126',
'platform': '1',
'riskLevel': '1',
'sort': '',
'userId': '',
'uuid': '9a564a1b-5857-4809-81bc-9ec5bfa2511d'}
其中uuid从首页可以获取,其他参数为固定或非必要参数,因此只需要逆向_token参数即可
点击链接对应的Initiator,进入js源码,格式化后打上断点,刷新网页
逐级点击Call Stack中的调用方法,找到加密方法所在位置(这里基本没有混淆加密,很好找)
进入到reload方法后,打上断点,刷新网页,基本确认就是在这里进行加密的
可以看到,被加密的字符串为
"https://gz.meituan.com/meishi/api/poi/getPoiList?cityName=广州&cateId=0&areaId=0&sort=&dinnerCountAttrId=&page=1&userId=&uuid=9a564a1b-5857-4809-81bc-9ec5bfa2511d&platform=1&partner=126&originUrl=https://gz.meituan.com/meishi/&riskLevel=1&optimusCode=10"
基本就是最开始时我们需要的参数(params字典)
这里采用最粗暴的逆向方式,把整个js文件拿下来,放到pycharm中执行,修改掉一些浏览器特有的参数,比如window,报错的地方,直接通过浏览器断点获取对应的值进行替换。
保存调试好的js文件,使用execjs调用即可,具体代码见https://github.com/Fathui/JsEncryptionAndLogin/tree/master/Meituan