吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 21055|回复: 90
收起左侧

[iOS 原创] iOS13 模拟点击 模拟触摸 按键模拟 自写按键精灵

  [复制链接]
xuan12345 发表于 2020-7-21 20:10
本帖最后由 xuan12345 于 2020-8-2 21:45 编辑

由于目前市面上能找到的模拟触摸库都只支持到iOS11,而主流的iOS版本已经到了13,于是自己写了一个模拟触摸、模拟点击的库,支持iOS11 - 13.6

Github链接:https://github.com/xuan32546/IOS13-SimulateTouch
大哥们给我个star吧!求求了!

简介

这个开源,永久免费的库作为一个iOS底层与应用层的桥梁,实现iOS11 - 13.6的模拟触摸。在应用层一行代码即可进行模拟点击,简洁方便(下文会有代码案例)。并且支持所有编程语言编写的应用层脚本或应用程序。同时,本库支持实时控制,0延迟控制你的iOS设备。

特性

  • 模拟触控
    • 支持多指触控(这是唯一一个支持多指同时触控的库)
    • 可编程。支持任何编程语言,包括Python, C, C++, Objective-c, Java等等
    • 实时控制模式。可在电脑/平板/其他手机实时操控iOS设备
    • 系统级别模拟。无需注入到任何程序
  • App界面
    • 脚本商店 - 用于下载脚本
    • 脚本编辑器 - 在手机上编写你的脚本
  • 其他
    • 前台应用程序切换
    • 系统级消息弹窗
    • Unix命令行命令执行

安装方法

  1. 打开Cydia - 源 - 编辑 - 添加 - http://47.114.83.227 (注意!!!是"http"而不是"https" 后续版本可能会变成https)

  2. 安装"ZJXTouchSimulation" 插件

  3. 完成

代码示例

Python Version

import socket
import time

# touch event types
TOUCH_UP = 0
TOUCH_DOWN = 1
TOUCH_MOVE = 2
SET_SCREEN_SIZE = 9

# 你可以复制粘贴这个函数到你自己的代码中使用
def formatSocketData(type, index, x, y):
    return '{}{:02d}{:05d}{:05d}'.format(type, index, int(x*10), int(y*10))

def horizontalSwipe():
    x = 300
    s.send(("101" + formatSocketData(TOUCH_DOWN, 7, x, 1000)).encode())  # 模拟点击按下。开头的"10"的意思是告诉插件本次任务为“点击模拟”。“10”后面的“1”是点击模拟的数据计数为1
    # 上面的那一行代码等同于s.send(("1011070300010000").encode())
    time.sleep(0.01) # 如果你在电脑上运行这段代码,把这个sleeptime改成0.2 (iOS环境下的python time.sleep会比他应该休眠的时间长很多)
    while x <= 600:
        s.send(("101" + formatSocketData(TOUCH_MOVE, 7, x, 1000)).encode())  # 把我们的手指7移向右边
        x += 5
        time.sleep(0.01)

    while x >= 100:
        s.send(("101" + formatSocketData(TOUCH_MOVE, 7, x, 1000)).encode())  # 把我们的手指7移向左边
        x -= 5
        time.sleep(0.01)

    s.send(("101" + formatSocketData(TOUCH_UP, 7, x, 1000)).encode())  # 释放手指

if __name__ == '__main__':
    s = socket.socket()
    s.connect(("127.0.0.1", 6000))  # 连接插件
    time.sleep(0.1)  # 连接之后要休眠0.1秒

    # 发送的数据格式应为 "{任务ID(2位)}{任务数据}"
    #############   切换App到前台演示   ##############
    s.send("11com.apple.Preferences".encode())  # 在最开始的“11”的意思是任务id是11 (启动app)。运行这一行会将"com.apple.Prefernces"放到前台运行 (运行“设置”App)。
    time.sleep(1)

    #############   系统级提示框演示   ##############
    s.send("12This Is Title;;Title and content should be splitted by two semicolons. I am going to close settings in 5 seconds.".encode())  # 在最开始的“12”的意思是任务id是12(显示提示框)。提示框标题和内容应该用两个分号隔开
    time.sleep(5)

    #############   以root权限运行终端代码演示    ##############
    s.send("13killall Preferences".encode())  # 在最开始的“13”的意思是任务id是13(运行终端代码)。在这里的运行的代码为“killall Preferences”(关闭“设置”app)
    time.sleep(1)

    # 接下来让我们看看模拟触摸部分
    # 模拟触摸的任务id为10。所以如果你想点击屏幕上的某点,你要发送"10" + "1" + formatSocketData(TOUCH_DOWN, 7, x, 1000)。“10”指明了任务id,“1”是数据计数为1
    # 其他的跟旧版本一样
    s.send("11com.apple.springboard".encode())  # 返回主屏幕
    horizontalSwipe() # 横向滑动模拟

    s.close()

实际上,一行代码就实现了iOS点击模拟

s.send(("101"+formatSocketData(TOUCH_DOWN, 7, 300, 400)).encode()) 

简单方便

手指移动模拟

s.send(("101"+formatSocketData(TOUCH_MOVE, 7, 800, 400)).encode())  # tell the tweak to move our finger "7" to (800, 400)

抬起手指模拟

s.send(("101"+formatSocketData(TOUCH_UP, 7, 800, 400)).encode())  # tell the tweak to touch up our finger "7" at (800, 400)

把他们结合起来

s.send(("101"+formatSocketData(TOUCH_DOWN, 7, 300, 400)).encode())
time.sleep(1)
s.send(("101"+formatSocketData(TOUCH_MOVE, 7, 800, 400)).encode())
time.sleep(1)
s.send(("101"+formatSocketData(TOUCH_UP, 7, 800, 400)).encode())

这三行代码的意思就是,首先手指在 (300, 400)的地方按下,然后移动到 (800, 400), 然后结束。所有的触摸时间都是即使反馈的,没有任何延迟。

再给你们一点我已经写好,你们可以直接复制粘贴使用的函数。这些函数的使用方法已经写在下面了

# touch event types
TOUCH_UP = 0
TOUCH_DOWN = 1
TOUCH_MOVE = 2
SET_SCREEN_SIZE = 9

# you can copy and paste these methods to your code
def formatSocketData(type, index, x, y):
    return '{}{:02d}{:05d}{:05d}'.format(type, index, int(x*10), int(y*10))

def performTouch(socket, event_array):
    """触控模拟

        模拟在event_array里面的指定好的触控事件。event_array参数是一个包含着触控事件dictionary的数组。dictonary格式:{"type": touch type, "index": finger index, "x": x coordinate, "y": y coordinate}

    参数:
        socket: 连接到ZJXTouchSImulation插件的socket实例
        event_array: 触摸事件dictionary数组

    返回值:
        None

    调用示例:
        performTouch(s, [{"type": 1, "index": 3, "x": 100, "y": 200}]) # 在 (100, 300)用手指3按下
    """
    event_data = ''
    for touch_event in event_array:
        event_data += formatSocketData(touch_event['type'], touch_event['index'], touch_event['x'], touch_event['y'])
    socket.send('10{}{}'.format(len(event_array), event_data))

def switchAppToForeground(socket, app_identifier):
    """将App调至前台

    参数:
        socket: 连接到ZJXTouchSImulation插件的socket实例
        app_identifier: iOS App的bundle identifier

    返回值:
        None

    调用示例:
        switchAppToForeground(s, "com.apple.springboard") # 返回主屏幕
    """
    socket.send('11{}'.format(app_identifier).encode())

def showAlertBox(socket, title, content):
    """显示一个系统级的消息框

    参数:
        socket: 连接到ZJXTouchSImulation插件的socket实例
        title: 消息框的标题
        content: 消息框的内容

    返回值:
        None

    调用示例:
        showAlertBox(s, "Low Battery", "10% of battery remaining") # just a joke
    """
    socket.send('12{};;{}'.format(title, content).encode())

def executeCommand(socket, command_to_run):
    """使用root权限调用shell command

    参数:
        socket: 连接到ZJXTouchSImulation插件的socket实例
        command_to_run: 你想要运行的shell command

    返回值:
        None

    调用示例:
        executeCommand(s, "reboot") # 重启手机
    """
    socket.send('13{}'.format(command_to_run).encode())

使用示例

做了两个使用示例,模拟触摸使用电脑实时控制iOS设备玩游戏。由于示例放不上来,使用示例可去github看

更多内容(使用说明等)请移步Github,有中文文档。记得给个star哦。吾爱论坛也会同步更新。

免费评分

参与人数 35威望 +1 吾爱币 +51 热心值 +32 收起 理由
泡泡汽水 + 1 + 1 谢谢@Thanks!
janeupp + 1 我很赞同!
权槿 + 1 12。4上瞎搞了下就安全模式了,不知道是不是和其他插件冲突
daniel2021 + 1 + 1 用心讨论,共获提升!
v516187 + 1 + 1 我很赞同!
365online + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
iop123 + 1 谢谢@Thanks!
13137776173 + 1 我很赞同!
Candyx + 1 热心回复!
文大大 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
hbj111 + 1 + 1 虽然还不会用,但是表示感谢。
shodic + 1 + 1 用心讨论,共获提升!
w119313 + 1 我很赞同!
qwe30245868913 + 1 + 1 我很赞同!
sw1999 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
菻凉咔厚 + 1 + 1 用心讨论,共获提升!
zoidberg + 1 + 1 不用FB那一套了?牛逼啊!!
宝石52148 + 1 + 1 我很赞同!
Iriyasviel + 1 + 1 谢谢@Thanks!
a243922228 + 1 + 1 热心回复!
litianyu020107 + 1 + 1 我很赞同!
RobinKing + 1 + 1 我很赞同!
非基尔丶叼 + 1 + 1 这个牛批
853679185 + 2 + 1 搞起来,来个代码帮助文件
shenfh + 1 + 1 我很赞同!
zycode + 1 + 1 用心讨论,共获提升!
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lock3r + 1 + 1 谢谢@Thanks!
喉结翻涌 + 1 + 1 厉害
tomatobobot + 1 + 1 谢谢@Thanks!
逝言 + 1 这个排版 这个写法 一看就是大佬
葱哥无敌 + 1 + 1 支持支持
spbbljsme + 1 我很赞同!
墨染门前雪 + 1 + 1 我很赞同!
周青松 + 1 + 1 这个排版非常舒服 不知道为啥没人看 虽然用不上给你顶一下

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yu357708827 发表于 2020-8-18 11:30
本帖最后由 yu357708827 于 2020-8-18 12:08 编辑

我在电脑上用Python可以成功发送指令,,如果实时控制手机,,是需要电脑一直监听键盘鼠标操作吧?有摇杆和鼠标的开源代码吗?

需要用到Pyhook3 监听鼠标键盘的插件实现吗?楼主能给一下你那个实时控制吃鸡的源码吗?谢谢哈~
sw1999 发表于 2020-8-12 10:45
xuan12345 发表于 2020-8-3 23:20
你可以下一个pythonista,也可以一样用。测试的话你把example code部分复制粘贴过去试一下就行哦

咨询一下老大,代码大概看了一下基本上明白。主要是你们怎么截图拿坐标的?
366199558 发表于 2020-7-22 13:05
sbuangke2019 发表于 2020-7-22 15:04
非常漂亮
墨染门前雪 发表于 2020-7-22 15:18
源就两个插件,没找到你说的那个插件啊
 楼主| xuan12345 发表于 2020-7-22 15:30
本帖最后由 xuan12345 于 2020-7-22 19:11 编辑
墨染门前雪 发表于 2020-7-22 15:18
源就两个插件,没找到你说的那个插件啊

其中那个ZJXSimulateTouch就是啊!(更新了一下 现在有了)
喉结翻涌 发表于 2020-7-22 15:30
没那个插件
 楼主| xuan12345 发表于 2020-7-22 19:11

更新了一下 现在有了
waste1 发表于 2020-7-22 19:37
这个太强了
aka酱 发表于 2020-7-22 23:18
感谢楼主
heydick1 发表于 2020-7-23 07:27
等越狱后再来
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表