Mac下对Chrome插件请求的监听
目录
- 背景
- 分析
- 环境
- 实践
- 总结
最近一段时间忙于搬家和适应新的环境,接下来可以正常分享一些工作中用到的东西和学习技巧相关
背景
接手一个需求,想要调研一下某个chrome 的插件为什么能拿到数据
当打开这个链接的时候
https://www.aliexpress.com/af/1PC-Simulation-Grass-figurine-Micro-Landscape-home.html?SearchText=1PC+Simulation+Grass+figurine+Micro+Landscape+home&d=y&initiative_id=SB_20190424011710&origin=n&catId=0&isViewCP=y&jump=afs
安装插件:https://chrome.google.com/webstore/detail/oberlo-aliexpresscom-prod/hmanipjnbjnhoicdnooapcnfonebefel?hl=en
再次打开产品链接时会出现如下效果
需要拿到Processing Time
这个字段的结果
分析
网页上的展现的数据一般就两种途径
- 来自于网络请求的数据,如:ajax ,websocket
- 数据本身就存在页面的隐藏域里面,插件以某种方式来解密数据,然后呈现到客户端
我们是装了插件之后,数据才呈现出来的,所以插件非常大的可能性是新增加了一个api去拿数据,但是为了保证实践方向是ok的,我还是要打开Chrome F12去模拟一次请求查看数据的关键字是不是在某个api里面
在搜索了 days
和 Processing Time
等关键字之后,确定不在内置的api中,我猜想chrome请求监控 并不会把插件的http(s) api 列出来
还好,chrome插件是以源码形式存在的,我们直接找到插件文件夹就可以了,chrome 插件的文件夹命名就是插件的ID
我们在本地文件夹里面找一下
sudo find / -name "*hmanipjnbjnhoicdnooapcnfonebefel*"
一下就找到结果了
/Users/brucedone/Library/Application Support/Google/Chrome/Profile 1/Extensions/hmanipjnbjnhoicdnooapcnfonebefel
里面有3个版本,一般点开最新的就可以了
├── _metadata
├── assets
│ ├── css
│ ├── icons
│ ├── images
│ └── js
├── pages
├── popups
└── scripts
├── content
├── pages
└── popups
用Pycharm 打开这个文件夹,然后全局搜索一下’Processing Time’这个关键字
显示出来是在main.js
中体现,那自然的,这个方法是被renderProcessingTime方法回调了,我们在本文件中追查这个方法的源头
方法调用的至下而上的路径
renderProcessingTime -> renderShipping -> processResponseProduct -> initPage
最后一层的源码所在
this.errorMessage = !1, this.chrome.runtime.onMessage.addListener(function (t) {
if (t.action === h.default.actions.GET_PRODUCTS_SHIPPING_INFO && e.settings) try {
t.result.error ? e.showFailMessage(t.result) : e.processResponseProduct(t.result)
} catch (t) {
e.logException(t.message, {stack: t.stack, settings: e.settings})
}
查到在初使状态相关的字段
从字段意思解读出来,那就是shippingInfo这个url比较可疑了,OK,通过源码我们锁定了目标的api url,接下来就有请今天的主角登场了
环境
- Mac OS (Windows)
- brew(Mac OS上类似apt-get 或者yum的工具)
- node
- npm
- whistle - http://wproxy.org/whistle/
实践
安装配置whistle
根据文档的指示,完成安装,在安装完之后,直接跳转到这个页面
http://wproxy.org/whistle/webui/https.html
根据文档提示,安装根证书,不然是没有办法来获取https请求,另外根据文档要求,我们可以进一步安装chrome切换代理的插件
启动工具
切换回命令行,使用命令
w2 start
如图所示,我们监控进程已经启动,切换回chrome界面,使用switchyomega
切到我们配置的规则
这里我命令规则为debug,和上面的whistle 规则等同,刷新页面,然后查看
http://local.whistlejs.com/#network
目标http api 就可以监听到请求了,请求的request 和 response 就轻松展现出来了
编写代码
import requests
def get_processing_time():
url = 'https://freight.aliexpress.com/ajaxFreightCalculateService.htm?productid=32638146402&country=US&count=1¤cyCode=USD'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.9',
'Cookie': 'ali_apache_id=11.180.246.136.1556097768408.177215.8; acs_usuc_t=acs_rt=c4b2d77c823e454184bb9dd979dbe8ac&x_csrf=83uwj9mybb9m; xman_t=6Dqiz/274fKeAncjaDzZHI4Cb4JO0xoZ22MHNstIJbqk2LNUhQq3sHvmBcHIf/Vn; intl_locale=en_US; xman_f=jYFgPbrkepaZBbTiMXnbnrzcne5PdnEPrY/bLbP6RdpNANNR/7zbIickdPJEufu2xybgiJ0saoEonRaLk+spPA9GQRh4SWHslUhJ9am0rDFniK0lnAZDkQ==; _m_h5_tk=a16a61a129520657ac4aa98ff7f8ee82_1556108213279; _m_h5_tk_enc=6fe711ecff4676c49b9c3695e602ad5e; aep_history=keywords%5E%0Akeywords%09%0A%0Aproduct_selloffer%5E%0Aproduct_selloffer%0932638146402; JSESSIONID=EB608513FB395C6910F22B667F2CC4C6; xman_us_f=x_l=1&x_locale=en_US; isg=BBwcoOjorO7xhlgzjOH0cp3f7TzEl8gPIp9ndfYdKIfqQbzLHqWQT5KwpeEcSfgX; l=bBrIcuOVvCaYIdgKBOCi5ZaPGQQOSIRAguWbUVbJi_5Bw_Y1k4bOlIOq0Ev6Vf5RsvYB4v_MwA99-etf2; aep_usuc_f=region=US&site=glo&b_locale=en_US&c_tp=USD; intl_common_forever=Bi5sZD8Yst3SGy4VxXAkM00Fh1WNtoarnNM/T3yMjZ1jjWNM1IpuPg=='
}
r = requests.get(url=url, headers=headers)
print(r.status_code)
print(r.text)
if __name__ == '__main__':
get_processing_time()
关于结果的解析就不加以详细说明了
总结
本次主要从
- 猜想
- 验证
- 推翻
- 重试
的思路,从一个简单的目标关键字,找到最后目标api,然后介绍了新工具whistle
的简单使用,当然他的功能强大,可以单独列一个篇章了
关于破解api类别的,如果不涉及加密和解密,一般不会特别的复杂,如果涉及(ps:请遵守相关的法律法规,只用于学习),可以去看雪论坛或者52pojie论坛里面找寻,我们的目标不是要求自己学会各种复杂的技能,是在合理的人力成本和时间内,产生最大的价值,想法比行动重要。
- 原文作者:大鱼
- 原文链接:https://brucedone.com/archives/1459/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。