某单位组织员工开展健步走活动,由于策略限制,必须使用传统计步器或者手机APP的方式记录行走步数,且APP必须始终处于运行状态方能计步,这种不合理的方式严重影响了客户体验,但是这一切的一切都没法改变,所以想着能不能通过修改数据包的方式完成步数的刷新上传。

使用Charles对上传的数据进行分析

由于是通过手机APP的记录并上传行走步数,因此采用比较易用和好用的Charles抓包工具对APP上传的数据包进行分析
为了避免被某APP发现,此处隐藏掉APP的网站链接和目录

通过不断的下拉刷新该APP的步数可以看出,发生变动的有三个网站链接,继续寻找与步数记录相关的数据包可以发现,它存在于IHttpServletDataService下
进一步查看数据包

通过查看数据包内容发现,整个步数的刷新是通过ReqMessageBody以及commond两个字段组成的Form提交完成的

Form表单内容分析

展开ReqMessageBody的内容(使用json数据格式方便进行查看)

{"clientvison": "4.3.2","commond": "UploadData","dayPackage": "0","deviceType": "DS101","deviceserial": "06800000010130ffc4162b9fc","hourPackage": "0","listday": [{"calorieConsumed": 78.0,"exerciseAmount": 1.2,"fatConsumed": 11.1,"goalStepNum": 10000,"stepNumber": 2247,"stepWidth": 70,"walkDistance": 157290,"walkTime": 18,"walkdate": "20180910","weight": 60,"zmrule": "6,7,8,9#3000;18,19,20,21,22#4000","zmstatus": "0,0"},{"calorieConsumed": 1.0,"exerciseAmount": 0.0,"fatConsumed": 0.1,"goalStepNum": 10000,"stepNumber": 35,"stepWidth": 70,"walkDistance": 2450,"walkTime": 0,"walkdate": "20180909","weight": 60,"zmrule": "6,7,8,9#3000;18,19,20,21,22#4000","zmstatus": "0,0"}],"listhour": [{"hour0": "0,0,0,0,0,0","hour1": "0,0,0,0,0,0","hour10": "668,46760,668,46760,0,0","hour11": "228,15960,228,15960,0,0","hour12": "0,0,0,0,0,0","hour13": "0,0,0,0,0,0","hour14": "0,0,0,0,0,0","hour15": "0,0,0,0,0,0","hour16": "0,0,0,0,0,0","hour17": "0,0,0,0,0,0","hour18": "0,0,0,0,0,0","hour19": "0,0,0,0,0,0","hour2": "0,0,0,0,0,0","hour20": "0,0,0,0,0,0","hour21": "0,0,0,0,0,0","hour22": "0,0,0,0,0,0","hour23": "0,0,0,0,0,0","hour24": "0,0,0,0,0,0","hour25": "0,0,0,0,0,0","hour3": "0,0,0,0,0,0","hour4": "0,0,0,0,0,0","hour5": "0,0,0,0,0,0","hour6": "508,35560,508,35560,0,0","hour7": "184,12880,184,12880,0,0","hour8": "659,46130,659,46130,0,0","hour9": "0,0,0,0,0,0","walkdate": "20180910"},{"hour0": "0,0,0,0,0,0","hour1": "0,0,0,0,0,0","hour10": "0,0,0,0,0,0","hour11": "0,0,0,0,0,0","hour12": "0,0,0,0,0,0","hour13": "0,0,0,0,0,0","hour14": "0,0,0,0,0,0","hour15": "0,0,0,0,0,0","hour16": "0,0,0,0,0,0","hour17": "0,0,0,0,0,0","hour18": "0,0,0,0,0,0","hour19": "0,0,0,0,0,0","hour2": "0,0,0,0,0,0","hour20": "0,0,0,0,0,0","hour21": "16,1120,16,1120,0,0","hour22": "19,1330,19,1330,0,0","hour23": "0,0,0,0,0,0","hour24": "0,0,0,0,0,0","hour25": "0,0,0,0,0,0","hour3": "0,0,0,0,0,0","hour4": "0,0,0,0,0,0","hour5": "0,0,0,0,0,0","hour6": "0,0,0,0,0,0","hour7": "0,0,0,0,0,0","hour8": "0,0,0,0,0,0","hour9": "0,0,0,0,0,0","walkdate": "20180909"}],"reqservicetype": 1,"sequenceID": "1536550643973"
}

大致判断步数主要由stepNumber字段控制,walkdate为计步日期,同时listhour列表中包含了每个计步小时周期内的具体步数,虽然不知道具体的含义,但是已经不影响数据的修改和上传了

使用requests模拟POST表单提交

到现在我们就找到了影响数据步数的数据字段,下面使用python模拟数据交互过程

导入需要的类和库文件
import requests
import urllib
import json
import datetime
import time
import random

通过分析可以得出,真正标识一个用户或者设备的是deviceserial,这个可以通过ReqMessageBody看出,同时为了真实伪装POST报文信息,对headers进行相应设置

url = '网站链接'
headers = {'User-Agent' : 'Dalvik/2.1.0 (Linux; U; Android 8.0.0; MHA-TL00 Build/HUAWEIMHA-TL00)','Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8','Content-Length' : '2000','Connection' : 'keep-alive'}
today = (datetime.datetime.now() - datetime.timedelta(days = 0))
yesterday = (datetime.datetime.now() - datetime.timedelta(days = 1))
str_today = today.strftime("%Y%m%d")
str_yesterday = yesterday.strftime("%Y%m%d")

表头中设置了User-Agent和Content-Type等关键信息,同时使用datetime函数以及strftime函数获取格式化为20180910格式的当前日期
为了模拟步数的真实性,使用random.randint函数获取每个小时时段内的随机步数

    hour6_1number = random.randint(500,1500)hour6_2number = random.randint(500,1500)hour7_1number = random.randint(500,1500)hour7_2number = random.randint(500,1500)hour8_1number = random.randint(500,1500)hour8_2number = random.randint(500,1500)hour10_1number = random.randint(500,1500)hour10_2number = random.randint(500,1500)hour12_1number = random.randint(500,1500)hour12_2number = random.randint(500,1500)hour13_1number = random.randint(500,1500)hour13_2number = random.randint(500,1500)hour18_1number = random.randint(500,1500)hour18_2number = random.randint(500,1500)hour19_1number = random.randint(500,1500)hour19_2number = random.randint(500,1500)hour20_1number = random.randint(500,1500)hour20_2number = random.randint(500,1500)hour21_1number = random.randint(500,1500)hour21_2number = random.randint(500,1500)

组装新的Message报文信息

message = {"clientvison": "4.3.2","commond": "UploadData","dayPackage": "0","deviceType": "DS101",#"deviceserial": "06800000010130ffc4162b9fc","deviceserial": "0680000001000ecb75cdf611c542","deviceserial":device,"hourPackage": "0","listday": [{"calorieConsumed": 78.0,"exerciseAmount": 1.2,"fatConsumed": 11.1,"goalStepNum": 10000,#"stepNumber": 18222,"stepNumber": today_stepNumber,"stepWidth": 70,"walkDistance": 157290,"walkTime": 18,#"walkdate": "20180910","walkdate": str_today,"weight": 60,"zmrule": "6,7,8,9#3000;18,19,20,21,22#4000","zmstatus": "0,0"},{"calorieConsumed": 1.0,"exerciseAmount": 0.0,"fatConsumed": 0.1,"goalStepNum": 10000,#"stepNumber": 35,"stepNumber": yesterday_stepNumber,"stepWidth": 70,"walkDistance": 2450,"walkTime": 0,#"walkdate": "20180909","walkdate": str_yesterday,"weight": 60,"zmrule": "6,7,8,9#3000;18,19,20,21,22#4000","zmstatus": "0,0"}],"listhour": [{"hour0": "0,0,0,0,0,0","hour1": "0,0,0,0,0,0",#"hour10": "668,46760,668,46760,0,0","hour10":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour10_1number,cal1 = hour10_1number * 70,step2 = hour10_2number,cal2 = hour10_2number * 70,),"hour11": "228,15960,228,15960,0,0",#"hour12": "0,0,0,0,0,0","hour12":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour12_1number,cal1 = hour12_1number * 70,step2 = hour12_2number,cal2 = hour12_2number * 70,),#"hour13": "0,0,0,0,0,0","hour13":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour13_1number,cal1 = hour13_1number * 70,step2 = hour13_2number,cal2 = hour13_2number * 70,),"hour14": "0,0,0,0,0,0","hour15": "0,0,0,0,0,0","hour16": "0,0,0,0,0,0","hour17": "0,0,0,0,0,0",#"hour18": "0,0,0,0,0,0","hour18":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour18_1number,cal1 = hour18_1number * 70,step2 = hour18_2number,cal2 = hour18_2number * 70,),#"hour19": "0,0,0,0,0,0","hour19":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour19_1number,cal1 = hour19_1number * 70,step2 = hour19_2number,cal2 = hour19_2number * 70,),#"hour20": "0,0,0,0,0,0","hour20":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour20_1number,cal1 = hour20_1number * 70,step2 = hour20_2number,cal2 = hour20_2number * 70,),#"hour21": "0,0,0,0,0,0","hour21":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour21_1number,cal1 = hour21_1number * 70,step2 = hour21_2number,cal2 = hour21_2number * 70,),"hour22": "0,0,0,0,0,0","hour23": "0,0,0,0,0,0","hour24": "0,0,0,0,0,0","hour25": "0,0,0,0,0,0","hour3": "0,0,0,0,0,0","hour4": "0,0,0,0,0,0","hour5": "0,0,0,0,0,0",#"hour6": "508,35560,508,35560,0,0","hour6":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour6_1number,cal1 = hour6_1number * 70,step2 = hour6_2number,cal2 = hour6_2number * 70,),#"hour7": "184,12880,184,12880,0,0","hour7":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour7_1number,cal1 = hour7_1number * 70,step2 = hour7_2number,cal2 = hour7_2number * 70,),#"hour8": "659,46130,659,46130,0,0","hour8":"{step1},{cal1},{step2},{cal2},0,0".format(step1 = hour8_1number,cal1 = hour8_1number * 70,step2 = hour8_2number,cal2 = hour8_2number * 70,),"hour9": "0,0,0,0,0,0","walkdate": str_today,#"walkdate": "20180910"},{"hour0": "0,0,0,0,0,0","hour1": "0,0,0,0,0,0","hour10": "0,0,0,0,0,0","hour11": "0,0,0,0,0,0","hour12": "0,0,0,0,0,0","hour13": "0,0,0,0,0,0","hour14": "0,0,0,0,0,0","hour15": "0,0,0,0,0,0","hour16": "0,0,0,0,0,0","hour17": "0,0,0,0,0,0","hour18": "0,0,0,0,0,0","hour19": "0,0,0,0,0,0","hour2": "0,0,0,0,0,0","hour20": "0,0,0,0,0,0","hour21": "16,1120,16,1120,0,0","hour22": "19,1330,19,1330,0,0","hour23": "0,0,0,0,0,0","hour24": "0,0,0,0,0,0","hour25": "0,0,0,0,0,0","hour3": "0,0,0,0,0,0","hour4": "0,0,0,0,0,0","hour5": "0,0,0,0,0,0","hour6": "0,0,0,0,0,0","hour7": "0,0,0,0,0,0","hour8": "0,0,0,0,0,0","hour9": "0,0,0,0,0,0",#"walkdate": "20180909""walkdate": str_yesterday,}],"reqservicetype": 1,"sequenceID": "1536550643973"}

使用requests函数提交表单信息并打印返回信息

req_message = {#'ReqMessageBody' : '{"clientvison":"4.3.2","commond":"UploadData","dayPackage":"0","deviceType":"DS101","deviceserial":"06800000010130ffc4162b9fc","hourPackage":"0","listday":[{"calorieConsumed":522.0,"exerciseAmount":8.3,"fatConsumed":74.5,"goalStepNum":10000,"stepNumber":18111,"stepWidth":70,"walkDistance":1045730,"walkTime":124,"walkdate":"20180910","weight":60,"zmrule":"6,7,8,9#3000;18,19,20,21,22#4000","zmstatus":"0,0"}],"listhour":[{"hour0":"0,0,0,0,0,0","hour1":"0,0,0,0,0,0","hour10":"0,0,0,0,0,0","hour11":"171,11970,171,11970,0,0","hour12":"690,48300,690,48300,0,0","hour13":"12,840,12,840,0,0","hour14":"1819,127330,1819,127330,0,0","hour15":"0,0,0,0,0,0","hour16":"0,0,0,0,0,0","hour17":"0,0,0,0,0,0","hour18":"0,0,0,0,0,0","hour19":"0,0,0,0,0,0","hour2":"0,0,0,0,0,0","hour20":"0,0,0,0,0,0","hour21":"0,0,0,0,0,0","hour22":"0,0,0,0,0,0","hour23":"0,0,0,0,0,0","hour24":"0,0,0,0,0,0","hour25":"0,0,0,0,0,0","hour3":"0,0,0,0,0,0","hour4":"0,0,0,0,0,0","hour5":"0,0,0,0,0,0","hour6":"0,0,0,0,0,0","hour7":"0,0,0,0,0,0","hour8":"0,0,0,0,0,0","hour9":"0,0,0,0,0,0","walkdate":"20180910"}],"reqservicetype":1,"sequenceID":"1536561269248"}','ReqMessageBody' : json.dumps(message),'commond' : 'UploadData'}r = requests.post(url,headers = headers,data = req_message)r.raise_for_status()print(r.text)time.sleep(10)

至此,所有的代码编写完毕,最重要的还是对数据包的分析,代码相对比较基础,目前来看,这个程序能够有效修改步数(希望不要被某APP发现并进行策略限制)
将Python程序添加到windows例行任务里面能够每天定时执行代码并修改步数,当然啦,这个只是单纯的玩一玩,为了自己的身体健康还是应该运动起来,真正修改自己的Body,让它充满活力。

Python POST 修改某计步APP的数据相关推荐

  1. python抓取抖音评论_一篇文章教会你用Python抓取抖音app热点数据

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  2. python 抖音文案提取_一篇文章教会你用Python抓取抖音app热点数据!

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  3. python 抖音文案提取_一篇文章教会你用Python抓取抖音app热点数据

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  4. python爬取抖音用户数据_一篇文章教会你用Python抓取抖音app热点数据

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  5. Python爬虫爬取手机APP的数据

    1.抓取APP数据包 方法详细可以参考这篇博文:http://my.oschina.net/jhao104/blog/605963 得到超级课程表登录的地址:http://120.55.151.61/ ...

  6. Python爬虫之猫眼APP电影数据(十八)

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...

  7. 「docker实战篇」python的docker-打造多任务端app应用数据抓取系统(下)(35)

    上次已经把python文件挂载到虚拟机上了,这次主要设置下虚拟机通过docker容器的方式. 运行 python 代码运行 >启动一个crt的会话 docker run -it -v /root ...

  8. python库使用方法查询 app应用_Python爬虫实战(5)获取「最美应用」推荐APP数据...

    前言 蛋肥学习了Scrapy框架,打算实践一下,利用Scrapy来爬取一下最美应用推荐APP的数据,并储存到MySQL数据库中. 准备 爬取时间:2021/02/04 系统环境:Windows 10 ...

  9. python怎样获得手机软件app数据_如何进行手机APP的数据爬取?

    平时我们的爬虫多是针对网页的,但是随着手机端APP应用数量的增多,相应的爬取需求也就越来越多,因此手机端APP的数据爬取对于一名爬虫工程师来说是一项必备的技能.我们知道,网页爬取的时候我经常使用F12 ...

  10. python excel增加一列_(用Python修改excel中一列数据)python新增一列

    python怎么从excel中读取数据? ⒈ #import παέτο import xlrd #Ρύθμι διαδρής path='C:\\Users\\jyjh\\Desktop\\data ...

最新文章

  1. python制作词云时出现figure1 figure2_用Python生成词云
  2. 昊天善圈浅谈比特币这个类型区块链应用技术的特点及作用
  3. 蒙特卡洛树搜索的主要流程有哪些_海运拼箱操作流程主要有哪些
  4. macd java 源代码_MACD交易系统原理、用法及源代码
  5. boost::log::make_exception_handler用法的测试程序
  6. 微服务中远程调用Dubbo与Feign对比
  7. Java第二次作业第一题
  8. 开发一款浏览器内核需要学习哪些方面的知识?
  9. mysql怎么卸载干净?
  10. 服务器上使用nvcc编译多个cu文件,在cmake中使用nvcc编译。cu
  11. 嵌入式学习笔记——ADC模数转换器
  12. PTA 1054 求平均值 (20 分)
  13. 二、流水线的执行流程
  14. 怎么才能使用计算机,电脑可以上微信吗,详细教您电脑怎么用微信
  15. 2021.07.13 B站是这样崩的
  16. javaee期末复习选择题
  17. MySQL基础(3)----其他函数 约束 多表查询 子查询 组合查询
  18. 行驶证识别API接口
  19. 蔡吴失效准则matlab编程,蔡吴张量准则.ppt
  20. GB/T 18655-2018 用于保护车载接收机的限值和测量方法 学习思维导图

热门文章

  1. 软件安装包制作工具installshield 2020 R1的安装教程
  2. vodplayer.exe
  3. 服务器软件系统日常运维工作制度
  4. C#常用 API函数大全
  5. XP不能访问Win7共享
  6. r语言中trifit怎么用_用R语言做非参数
  7. 计算机组成原理慕课第六章答案,计算机组成原理单元答案2020MOOC
  8. 安装Windows 7时整数分区的注意事项
  9. oracle 12c 行转列函数,oracle12cwm_concat函数人工写行转列函数
  10. Windows2000系统下载安装,怀念一下