最近真是太堕落了,一直没学习,先记录一个以前的爬过的一个app,就当是复习了(最近真的很闲,可以摸鱼鱼!)
其实这个本来是接的别人的代码,但是我要跑的时候竟然失效了,算了,进入正题。。
app: glassdoor 8.17.1(仅供学习交流,请勿用作商用,如有侵权,请联系我)
1. 前期研究:
其实这个网站也是有网页的,但是网页的一直出现hcapture人机验证,我换了ip也不太行,我真的搞不定的呀,最后只能试试app,其他版本的我没有去尝试,大家可以自行研究哈~
2. 具体需求(只是做演示):
抓取公司的信息:例如,抓取amazon公司的评论数据及基本信息
2. 抓包:
因为这个app需要墙的,所以需要挂着vpn,然后再开着charles,具体怎么操作我就不再说了,可以看我另一篇文章——charles抓包需vpn,该如何配置
搜索公司:amazon —> 点击到评论页 —> charles搜索页面评论数据定位api,如下:
api : https://api.glassdoor.com/api-internal/api-internal/api.htm?action=graph&version=1&responseType=json&appVersion=8.17.1&signature=tyioEIm93WZCfMAprGilA0GPBys%3D%0A&s.expires=1609480996723&t.k=fz6JLNgLgVs&locale=en_US&deviceLocale=zh_CN&t.p=16
请求方式:post
需要参数:signature、s.expires (模拟请求后这俩是必须的)
请求体:employerId是公司id、pageNum是评论页码,所以不同公司和翻页只需要修改这两个地方
我在charles搜索signature和s.expires的值,发现并没有从其他请求的响应或cookie中携带,所以考虑研究app,找到app的加密位置,然后模拟
3. 反编译及分析:
工具: jadx
这个工具需要配置java环境,具体配置可以搜索大佬们的文章,我也是百度的,支持搜索,可以定位到具体的代码,还有一定的反混淆,第一次加载时间会久一点,比较占内存,内存不够可以分配一下,可以自己研究研究,啊哈哈哈哈
加载完成后,全局搜索:s.expires(我尝试搜索signature,但是返回结果太多,不好定位,也是需要多次尝试的哈)
可以看到上图中hashmap可能是个字典,点进去发现生成signature和核心代码就是hmac_sha1加密,具体如下图红框部分
因为hmac_sha1加密是有一个密钥key的,所以我们这里再全局搜索一下 HMACSHA1.encrypt,找到了key的值,如下图
APISignatureEncryptor需要传2个参数,我们继续全局搜索一下这个函数名,看看传值情况
可以看到一个是键为PARTNER_KEY的字符串、一个是getDateTimeLong函数调用返回的整数,然后将两个值用“|”拼接后,hmac_sha1加密,我们继续从图 APISignatureEncryptor调用传参2 中control+点击跟进查看
PARTNER_KEY=="t.k",请求review的api里有这个t.k参数的值,所以,我们可以直接设为默认;
getDateTimeLong调用返回当前时间 + 24小时的时间戳
4. 模拟加密
到此,所有的分析就完成了,因为我不会java,所以加密也是python模拟请求的,可以参考下图
码字不易啊,兄弟们,偷偷摸摸上班时间码字更不容易啊,赏脸给个赞噢!
那个。。分享一下最近的生活:
我去年8月底捡了只小母猫,叫崽崽,刚来时候也就三周一个月的样子,小眼睛流泪,耳朵耳螨的小可怜,上周已经带去绝育了,今晚带去拆线,本来就打算养锤锤嘛,然后那天看见崽崽图片后,我就动了恻隐之心,当天下班就打车去接回来了,还好她没什么大病,唯独一次腹泻已经挺过来了,特淘气,给大家看看哈!