自定义Request数据包欺骗服务器拿数据

自定义Request数据包欺骗服务器拿数据

背景

一个连接服务器的APK,登录方式:电话号码+短信验证,登录后可以查询到该账号下的几百条数据,每一条数据还有对应详情。
目的:获取这几百条数据及详情。

思路:

最先想到的办法,手机录屏、截屏,但每个号码的详情都需要点击两次,考虑ADB命令写脚本,但是用ADB命令元素定位只能用坐标,不精准,几百个数据,下拉的动作会有100多下。坐标的误差会越来越大,这个思路,放弃。

方案2:UiAutomator2
UiAutomator2可以和apk交互,只要获取到apk应用的元素键值,就可以精确操作apk。安装使用见链接:https://zhuanlan.zhihu.com/p/128058291,但是实际操作时发现:这几百条数据是作为一个整体元素的,要精确到一条只能用坐标区分,又回到老路。

方案3:用fiddler抓包,获取apk回连的url,然后用web方式访问。抓包抓到了url(https://xxxxxx/login),但服务器没有开web服务,通过浏览器拿,行不通。
既然能抓包,那用Python仿造apk的request的数据包去连接url,应该可以拿到一样的response,然后再解析这respones的数据结构。就可以达到目的,在这个思路的指导下,最终历经2天,搞定。(同行若需要,联系可分享源码)

值得记录的知识点

1、fiddler作为代理抓包时,可以设置断点。有时apk的一个操作会有连续的多个request,设置断点后,可以步进。
2、fiddler设置断点后,还可以篡改request和response数据包。如果你想在朋友圈炫耀你的微信零钱有几个亿,这个方法可以哦。
3、token(令牌):这个apk登录时会把账号(电话)和短信验证码发送到服务器。服务器根据账号和验证码生产一个64位的字符串,这个字符串为token,之后apk再向服务器请求数据,只需在request的header中带上token作为身份认证就可以取得数据。但token有时效性
3、json:json作为网络传输的一种数据结构,简单、实用。以“{”开始,“}”结束,数据赋值用“:”,多个数据用“,”分隔。例如{“aa”:“132”,“bb”:“23235”}表示aa=132,bb=23235。这apk和服务器之间传输数据就用的这种结构。
4、post提交数据时,数据结构有“json”、“text”等,python中用request.post模块时,需要在header中声明传输的是什么数据结构,用什么脚本解析,不然服务器会无法正常解析数据,会报参数错误。
5、使用函数request.post,如果传输的数据结构是json,就一定要用request.post(url=xx,json=xx,headers=xx),如果用request.post(url=xx,data=xx,headers=xx)也会报参数错误。我在这个坑上折腾了大半天,网上也找不到任何答复,最后去看request.post源码才搞清楚。这里也推荐大家,如果使用库函数出现问题,建议读读源码。
6、pycharm的一个使用技巧,光标放到函数上,然后按ctrl+b跳转到函数定义。
7、时间戳timestamp,Python的时间戳以秒位单位,是10位,Java的时间戳以毫秒位单位,是13位。从服务器回来的时间戳除以1000,Python就可以处理了

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值