前言

在某些app中,需要根据用户的实时位置来完成某些事件

例如跑步打卡软件(步道乐跑)、考勤打卡软件(叮叮)、某些基于实时位置的游戏(Pokemon Go、一起来捉妖)

一般解决办法是通过使用安卓模拟器,通过改变模拟器的位置属性来实现模拟位置

但是某些软件会通过比对常用设备的uuid,设备序列号等

一旦出现不匹配或者无法识别就可能会被列为怀疑对象,且安卓模拟器较难实现连续的拟人化的路径

Python资源共享群:484031800

因此,为了减少被判定作弊的可能,只能通过在常用设备上连续的改变实时位置来模拟跑步行为

硬件环境:

MacBook Pro (15-inch, 2017)

iPhone 8 Plus

软件环境:

macOS Mojave 10.14.5

iOS 12.4

Xcode 10.2.1

Python 3.7.0

sublime text 3.1.1

具体步骤

1.使用Xcode创建一个IOS项目

打开Xcode -> Preferences 添加Apple ID

在Xcode上创建新项目

打开Xcode -> create a new Xcode project

选择ios菜单 -> Single View App

填写项目名 推荐非中文

在事先准备好的文件夹内存放 文件夹推荐非中文

此时将iPhone连接mac 左上角显示连接设备

出现如下结果即为成功:

2.使用Xcode创建一个含有gpx的文件

GPX(GPS eXchange Format,GPS交换格式)是一个XML格式,为应用软件设计的通用GPS数据格式,专门用来存储地理信息

一个GPX文件内包含一些经纬度点组成的轨迹,包含了时间、名字等信息

回到Xcode 打开Xcode -> File -> New -> File...

在IOS菜单下选择GPX File

选择一个位置并命名GPX文件 例:fake_loc.gpx

自动生成如下gpx文件即为成功

分析该gpx文件,格式类似标签语言风格

在<wpt>标签内包含经纬度(lat、lon)、该点名称以及时间

第一段注释内容大意为:

“提供一个或多个包含纬度/经度对的点

如果提供一个点,Xcode将模拟那个特定的点

如果提供多个点,Xcode将依次模拟每一个点”

第二段注释内容大意为:

“可以选择为每一个坐标点添加一个时间标签 可,Xcode可以根据时间标签的顺序依次移动到每一个坐标点,并根据时间点来插入速度X

如果不提供一个时间标签,那么Xcode将使用一个固定的速度

航路点必须按时间升序排序

因此,可以通过输入一系列点来模拟位置,让Xcode来依次定为每一个点来模拟人的跑动行为

3.使用Python来自动生成一系列轨迹点

mac下python与sublime text3的环境配置在第一篇随笔中有记录

分析gpx文件结构可以得到目标gpx文件结构应该为:

<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"><wpt lat="坐标点经度1" lon="坐标点纬度1"></wpt><wpt lat="坐标点经度2" lon="坐标点纬度2"></wpt><wpt lat="坐标点经度3" lon="坐标点纬度3"></wpt>#......#以此类推
</gpx>

在地图经纬度查询网站可以得到指定地点的经纬度信息:http://www.gpsspg.com/maps.htm

我们选择西安市某211高校作为实验地点:

该网站提供多个公司的定位标准下的经纬度信息

由于每一家公司的定位标准不同,经纬度就会存在偏差,这时候就要看用来模拟的APP使用哪家的地图了

我们以某跑步打卡APP 步道乐跑 作为实验对象

在该高校实现水平移动与竖直移动

经过验证该APP使用的是 谷歌地球标准

通过该网站首先得到一段直线的首尾经纬度点:

开始点:

lat:34.3752989239

lon:108.9080291565

中间点:

lat:34.3740193255

lon:108.9085977848

结束点:

lat:34.3733728774

lon:108.9064091023

在该网站可以通过经纬度获得距离信息:http://www.hhlink.com/经纬度/

计算得到距离约为78米

后续可根据需求,通过测距来得到相应距离 从而计算得到水平与竖直移动速度

可以得出结论:

在该高校相对从北到南 经度减少,纬度增加

在该高校相对从东到西 经度减小,纬度减小

在符合跑步打卡APP步道乐跑的配速要求:3~9 min/km

例如从北到南生成100个点

经度依次减少 纬度依次增加,并使得这100个点散布在路径上

每个点之间减少或者增加的距离可以通过乘以指定范围内的随机数,使得点之间呈现左右略为摇摆的路径

在点数量较多的情况下近似为人的跑动轨迹

根据该高校的位置情况编写相应的python程序:

import random
#初始点信息
a1 = 34.3752989239;
b1 = 108.9080291565;
#中间点信息
a2 = 34.3740193255;
b2 = 108.9085977848;
for i in range( 1,1000 ):while( a1 >= a2 ):        # 循环条件 经度未到达中间点时执行xa = round( random.uniform(0.2, 7) )    # 随机数,用于模拟人跑动xb = round( random.uniform(12, 15) )# 竖直移动a1 = round( a1 - 0.0000072 * xa , 10 )b1 = round( b1 + 0.0000008 * xb , 10 )# 输出信息print( '<wpt lat="' + str( a1 ) + '"' + ' ' + 'lon="' + str( b1 ) + '">' )print( '</wpt>' )
for i in range( 1,1000 ):xa = round( random.uniform(2, 8) )xb = round( random.uniform(1, 3) )# 水平移动a2 = round( a2 - 0.000003 * xa, 10 )b2 = round( b2 - 0.000025 * xb, 10 )print( '<wpt lat="' + str( a2 ) + '"' + ' ' + 'lon="' + str( b2 ) + '">' )print( '</wpt>' )

得到输出(节选):

将该输出复制并粘贴在gpx文件里

并 command + s 保存

可以在xcode项目目录内找到并打开该文件:

4.开始位置模拟

确保手机连接上电脑,并解锁保持屏幕常亮

点击Xcode右上角开始图标:

第一次会提示iPhone未信任开发者

在设置 -> 通用 -> 设备管理 点击该开发者并选择信任

再次在Xcode上点击右上角图标

一分钟左右手机上会多出一个灰色的app图标

点击后按home键退出,进入步道乐跑

在Xcode下方多出一栏功能,点击位置图标并选择你的fake_loc

此时APP就已经按照gpx文件内的路径开始移动了

5.总结

在模拟时没有考虑速度的因素,按照默认的Xcode对gpx的点的更新速度来实现的

在控制整体的移动速度时完全是按照点的密集程度,即点的位置变化程度来实现的

后期可以根据时间标签<time>来改进获得更精确的速度

根据步道乐跑后台数据,检测作弊主要依靠平均配速、每公里的步数、设备uuid、设备序列号来检测的

文章的方法可以解决平均配速、uudi、序列号等问题(因为就是使用真机来实现的)

但是对于步数只能依靠在模拟时通过摇晃手机来实现

python round()_使用Xcode + Python进行IOS运动轨迹模拟!相关推荐

  1. python 模拟ios提交网络_使用Xcode + Python进行IOS运动轨迹模拟

    前言 在某些app中,需要根据用户的实时位置来完成某些事件 例如跑步打卡软件(步道乐跑).考勤打卡软件(叮叮).某些基于实时位置的游戏(Pokemon Go.一起来捉妖) 一般解决办法是通过使用安卓模 ...

  2. python模拟ios_使用Xcode + Python进行IOS运动轨迹模拟!

    前言 在某些app中,需要根据用户的实时位置来完成某些事件 例如跑步打卡软件(步道乐跑).考勤打卡软件(叮叮).某些基于实时位置的游戏(Pokemon Go.一起来捉妖) 一般解决办法是通过使用安卓模 ...

  3. ios跑 python_使用Xcode + Python进行IOS运动轨迹模拟

    摘要: 085977848结束点: lat:34.3733728774 lon:108.9064091023  在该网站可以通过经纬度获得距离信息:http://www.hhlink.com/经纬度/ ...

  4. 跟我从零开始学python之一_从零开始学 Python 之运算符

    从零开始学 Python 之运算符 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  5. python 切片_全面解读Python高级特性切片

    大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...

  6. 学习python课程_想学习Python吗? 这是我们的免费4小时互动课程

    学习python课程 Python is a popular, versatile and easy-to-learn language. It's the go-to language for AI ...

  7. 2018年python薪资_最好的Python:2017和2018年至今我最喜欢的文章集

    2018年python薪资 我打算发布此收藏集 (My intention with publishing this collection) Last year I only used Medium ...

  8. python股市_如何使用python和破折号创建仪表板来主导股市

    python股市 始终关注大局 (Keep Your Eyes on the Big Picture) I've been fascinated with the stock market since ...

  9. python马尔可夫链_[译] 用 Python 实现马尔可夫链的初级教程

    马尔可夫链是通常用一组随机变量定义的数学系统,可以根据具体的概率规则进行状态转移.转移的集合满足 马尔可夫性质 ,也就是说,转移到任一特定状态的概率只取决于当前状态和所用时间,而与其之前的状态序列无关 ...

最新文章

  1. im4java转换图片格式_ImageMagick和im4java处理图片[转]
  2. link-time version is older than compile-time version
  3. 一键清除bios密码_电脑忘记开机密码?怎么才能开机使用
  4. 阐述:SIP协议是什么
  5. CF891B-Gluttony【构造】
  6. math.atan_Python中带有示例的math.atan()方法
  7. vue-cli3.0(创建项目)如何引入element-ui(指令篇)
  8. vuex commit 传参数,传递多个参数
  9. web项目调整项目名称_如何有效调整软件项目范围
  10. APP设计灵感|仪表盘这样设计,所有信息一目了然!
  11. jdk+jmeter下载安装教程
  12. SCI论文写作 -- 搜索工具汇总
  13. Unity中物体移动脚本
  14. 如何写出高分IB TOK Essay?
  15. 一键生成App图标所有尺寸的三个酷站分享
  16. Koo叔说Shader—Shader简介
  17. 【JavaScript算法】---希尔排序(转载自我的老师 Alley-巷子)
  18. 各种 PNG图片压缩对比分析
  19. 2020浙江大学软件学院预推免经验
  20. S5PV210 串口

热门文章

  1. 计算机二级考试vb内容,全国计算机二级VB考试内容
  2. depends-on的用法
  3. 【基础知识】ActiveMQ基本原理
  4. php 批量修改文件名后缀名,PHP实现批量修改文件后缀名的方法
  5. 优酷自动上传软件,百度霸屏轻松到
  6. freopen函数使用
  7. 企业生产经营相关英文及缩写之(1)--供应链/物料控制
  8. 银河娱乐集团 2020 年第三季度未经审核之财务数据
  9. MFC进度条编程控制
  10. halcon光学字符识别(训练后识别),验证码识别