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

前言

在某些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文件,格式类似标签语言风格

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

第一段注释内容大意为:

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

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

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

第二段注释内容大意为:

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

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

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

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

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

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

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

#......

#以此类推

我们选择西安市某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( '' )

print( '' )

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( '' )

print( '' )

得到输出(节选):

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

并 command + s 保存

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

4.开始位置模拟

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

点击Xcode右上角开始图标:

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

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

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

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

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

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

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

5.总结

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#读写文件总结

1、使用FileStream读写文件文件头:using System;using System.Collections.Generic;using System.Text;using System.IO;读文件核心代码:byte[] byData new byte[100];char[] charData new char[1000];try{FileStream sFile new FileStream("文件…

技术人必备的碎片化时间学习工具

工作、生活节奏超快的今天,想要不断提升自我,碎片化阅读学习是你最佳的选择,如果你有一颗学习的心,那这些学习型的公众号,绝对会让你受益匪浅。 小编为你精选了技术领域几个精品微信订阅号,涵盖了时下最热门…

python gui界面启动脚本、点击按钮执行脚本_如何使用PyQt在按钮单击上调用python脚本...

我使用PyQt4创建了一个带有按钮的表单.在此按钮上,我想调用另一个如下所示的python脚本: File1.py: import sys from PyQt4 import QtCore, QtGui from file1_ui import Ui_Form class MyForm(QtGui.QMainWindow): def __init__(self, parentNone): QtGu…

微型计算机键盘上的shift键 汉语译为,PC计算机键盘上的Shift键称为什么键

满意答案shuzhongle2014.02.25采纳率:56% 等级:12已帮助:7306人朋友,下面是我的答案,希望可以帮得到你!Shift键:上档转换键,也可用于中英文转换。当然Shift键并不仅仅只是这些作用,下面介绍下…

Dotnet中Span, Memory和ReadOnlySequence之浅见

过年啦,写个短点的。同时,提前给大家拜个年。总有小伙伴们跑过来讨论关于Span和Memory的使用,眼瞅是最近关于Span的文章有点多,看飞了。今天写这个,就是往回拉一拉。写之前,先声明一下。这些内容是我自己使…

睹物可否不思人

早上送女儿去兴趣班练舞蹈 顺便去超市买菜 因前阵生病的缘故 休息时都没有做饭 不知道买菜还会勾起我的痛楚 站在那里等着宰鱼 可视线被花甲吸引 注目良久 睹物思人 生活中的细细碎碎 都能令我浮想联翩 一句话 一处景 都能想起你的片段 回忆里有丝丝的甜 回忆里有阵阵的痛 突然…

华为的型号命名规则_华为最实惠5G手机来了!畅享Z 5G宣布:5月24日发

5月18日消息,华为宣布畅享系列首款5G手机畅享Z 5G将于5月24日发布。畅享Z系列的到来将使华为在千元市场实现5G覆盖,这也将成为华为价格最低的5G手机系列,值得期待。目前关于畅享Z的细节还很少,有消息称代号为Teller的5G新机隶属于…

程序员又背锅了!虾米音乐代码注释惊现“穷逼vip”

11 月 19 日,在 V2EX 社区的技术版一名网友发布了一篇名为《虾米 mac 客户端发现个好玩的注释》的帖子,文中贴出了阿里巴巴旗下虾米音乐 Mac 版客户端的代码,引发了网友争议。发帖人称,虾米音乐客户端的程序员竟然称一些短期VIP客…

python list转dict_python中将list转为dict

最近在项目中经常遇到将list转为dict形式,之前都只会用for循环,取出list中的每个值,update到dict中。 示例1 scrabble_scores [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"), (4, "F H V W …

计算机无法安装小丸工具箱,小丸工具箱电脑版

小丸工具箱电脑版是一款可以压制H264AAC视频的图形界面工具,内核是x264、neroaac、mp4box等开源软件。小丸工具箱电脑版能够封装mp4或抽取mp4的音频或视频,压制视频中的音频。它的功能非常丰富,是属于实用的视频压制器!小丸工具箱&#xff0c…

一个简单的dotnet tool

dotnet tool对应的工具,本质上是一个控制台应用,在调用这个应用时,会根据传入的参数,执行应用内部的逻辑。关于dotnet tool命令使用,参照https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-tool-install下面…

内存和显存_【硬件资讯】显存再升级?Nvidia新卡实锤GDDR6X!显存大升级能否带来性能提升??...

新闻1:美光泄密 RTX 3090显卡用上GDDR6X显存:带宽堪比HBM2NVIDIA新一代显卡越来越近了,8月31日就有可能公布重大消息,安培GPU核心的RTX 30系列最快下个月就能买到。首发的第一波肯定是高端卡,除了RTX 3080、RTX 3080 T…

Web 2.0 编程思想:16条法则

原文:Thinking in Web 2.0: Sixteen Ways 作者:Dion Hinchcliffe URL:http://sd.csdn.net/n/20060518/90603.html 1、在你开始之前,先定一个简单的目标。无论你是一个Web 2.0应用的创建者还是用户,请清晰的构思你的目标。就像“我…

神舟笔记本电源管理软件_笔记本电脑长期不用充不上电了?原来问题就出在这儿...

也许有很多使用笔记本电脑的用户,都会遇到这样一种情况:笔记本电脑长期没有使用,导致电池充不了电的现象。遇到这样一种情况该如何进行解决呢?这确实有点难倒很多用户了,难道电池坏了,需要重新更换新的笔记…

浅析PageRank算法

机器学习很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念。前几天趁团队outing的机会,在动车上看了一些相关的资料(PS:在动车上看看书真是一种享受),趁热打铁&#xf…

小学计算机课教学设计,小学信息技术教学设计三篇

【导语】教案是教师为顺利而有效地开展教学活动,根据课程标准,教学大纲和教科书要求及学生的实际情况,以课时或课题为单位,对教学内容、教学步骤、教学方法等进行的具体设计和安排的一种实用性教学文书。无忧考网准备了以下内容&a…

Happy 牛 Year!牛年dotnet云原生技术趋势

首先给大家拜个年,祝大家:新年快乐,牛年大吉,牛转乾坤,一往无前!2020年的春节,新冠疫情使得全球业务停滞不前,那时候,没有人知道会发生什么,因此会议被取消&a…

centos7python命令_02.将python3作为centos7的默认python命令

博客为日常工作学习积累总结:由于个人兴趣爱好对python有了解:1.安装Python3:参考博客:https://zhuanlan.zhihu.com/p/47868341安装依赖包:yum -y install zlib zlib-develyum -y install bzip2 bzip2-develyum -y ins…

SELECT语句“加锁选项”功能说明

阅读全文:http://www.cckan.net/forum.php?modviewthread&tid50 SELECT 语句中“加锁选项”的功能说明SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实…

windows传真和扫描由于不能访问您的文档_扫描识别工具Dynamic Web TWAIN全年最低价来了!错过再等一年...

Dynamic Web TWAIN是一个专为Web应用程序设计的TWAIN扫描识别控件。你只需在TWAIN接口写几行代码,就可以用兼容TWAIN的扫描仪扫描文档或从数码相机/采集卡中获取图像。然后用户可以编辑图像并将图像保存为多种格式,用户可保存图像到远程数据库或者ShareP…