卡兄卡弟 一个做卡车垂直领域的APP,用户的话是卡车司机,修理站,汽修站之类的.官网在这里
想要爬取附近补胎,修理,等首页上的六个分类
只有APP页面无其他客户端
我在官网下的APP是加了爱加密商业版的壳,这个是一个二代壳,frida-dexdump 对这个无效
然后在网上找了几个下 发现这个APP 之前叫 拉那儿
用手机号验证码注册成为卡车司机,然后点击页面,抓包分析的话能抓到包 然后使用mitmproxy 把复制curl请求,使用工具转为requests
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import requests
headers = { 'Host': '47.106.123.30:8070', 'Connection': 'Keep-Alive', 'User-Agent': 'okhttp/3.12.0', }
data = { 'oneselfType': '1', 'key': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJBUFAiLCJpc3MiOiJTZXJ2aWNlIiwiZXhwIjoxNzE2OTYyMzcxLCJ1c2VySWQiOiI1N2VjNjI3ZS05ZWRhLTRiMTgtOGJmMS1lN2MxNmVmMjhmOTYiLCJpYXQiOjE2NTM4MDM5NzEsInRva2VuIjoiMTY1MzgwMzk3MDg4NiJ9.JLHyQkDp4iowlrVhKkvTTJ3us7LoPyBY3ISMBZzJbiQ', 'friendRelationId': 'null', 'locationX': '121.516538', 'locationY': '31.123457', 'userType': '4', "pageId": 1 }
response = requests.post('http://47.106.123.30:8070/app/api/usercompany/finsCompanyListAndVipCompany', headers=headers, data=data) print(response.json()['data'])
|
key的话我看着好像是jwt 的签名
key的第一部分使用base64 解密工具的解密为{"typ":"JWT","alg":"HS256"}
第二部分的解密为
1
| {"aud":"APP","iss":"Service","exp":1716962371,"userId":"57ec627e-9eda-4b18-8bf1-e7c16ef28f96","iat":1653803971,"token":"1653803970886"}
|
exp
为过期时间
看userID
后端的数据局应该是非关系型数据库
在token 没有重新签发和过期之前该请求都是可以重放的.
难道说这个APP这么简单?
APP 每一分钟会往/app/api/location/set
网址发送一个本机定位其中参数为
1 2 3 4 5
| key: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJBUFAiLCJpc3MiOiJTZXJ2aWNlIiwiZXhwIjoxNzE2OTYyMzcxLCJ1c2VySWQiOiI1N2VjNjI3ZS05ZWRhLTRiMTgtOGJmMS1lN2MxNmVmMjhmOTYiLCJpYXQiOjE2NTM4MDM5NzEsInRva2VuIjoiMTY1MzgwMzk3MDg4NiJ9.JLHyQkDp4iowlrVhKkvTTJ3us7LoPyBY3ISMBZzJbiQ locationX: 121.51653 locationY: 31.123457 source: 1 address: xxxxx
|
就是手机定位的经纬度,着验证的频率是1分钟1次可以有网络波动的error发生,但是阈值多少没有测试出来.
APP没有明显的列表页,请求的内容是根据经纬度参数来决定的,要抓数据就要遍历整个中国的经纬度地址.
数据返回结果有个界限,和本机相距40-50公里的样子就不返回数据了,要请求的话就只有换定位.
数据重复的话就直接吧距离定的小一些返回的数据根据数据库中的id去重
那也就有另一个问题就是手机移动定位改的太快,太频繁会导致当前登录的用户成为可疑用户.