开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7175|回复: 6
收起左侧

[技术专题] python 调用OpenCV和IOSAutoTouch实现硬件级免越狱自动化

[复制链接]
发表于 2022-11-15 15:47:23 | 显示全部楼层 |阅读模式   浙江省湖州市
本帖最后由 lovejsw2000 于 2022-11-15 16:01 编辑

在网上转了一圈关于苹果免越狱自动化的方案,无非都是调用wda实现的,需要签名等等一大堆复杂的流程。终于找到一家是通过硬件实现的,他们硬件提供的DLL方式接口。而IOSAutoTouch基于他们硬件接口又做了二次封装支持http和websocket调用并加入屏幕传输的功能让用户更简单的进行自动化操作苹果手机。前两天买的硬件到货了,激动的立马动手写了一个简单的例子。这个例子就是自动打开低电量模式。
他们是通过这玩意控制手机的
首先导入IOSAutoTouch封装的python调用库,和安装aircv库(这个是OpenCV库的一个封装)

aircv 安装方法 pip install aircv

IOSAutoTouch库需要从他们官网下载https://www.iosautot.com/python/

初始化IAT库
iatapi = ios_at_api.HttpApi('192.168.0.113')  # 初始化IAT库,采用http协议进行交互

调用IAT库发送快捷按钮返回主屏幕

# 如果不知道设备id可以用这条命令打印出所有的设备id print(iatapi.get_device_list())
devid = '5C:1D:D9:ED:D9:DE'  # 要操作的设备id
for i in range(3):  # 连续发送3次保证到达主屏幕
iatapi.send_key(deviceid=devid, key='', fn_key='WIN+h')  # 发送返回主屏幕热键
time.sleep(0.5)  # 延时一下,不然会变成APP切换器



通过aircv库查找设置按钮的位置,并调用IAT库的点击指定坐标的接口
imobj = imread('./img/设置按钮.bmp')
acret = ac.find_template(screenshot(devid), imobj, 0.8)
if acret is None:
    print("没有找到子图")
    exit()
print(acret)
print("查找设置按钮子图成功{}".format(acret['result'))
x = int(acret['result'[0])
y = int(acret['result'[1])
iatapi.click(deviceid=devid, x=x, y=y)  # 点击找到的坐标

滑动找到设置里的电池图标并点击
for i in range(3):  # 往下滑动3次,保证到设置界面的最开始
iatapi.swipe(deviceid=devid, direction='down', length=0.8, afor=6)
time.sleep(1) # 延时1秒钟
for i in range(3):  # 往上滑动3次
iatapi.swipe(deviceid=devid, direction='up', length=0.7, afor=10)
    time.sleep(0.2)  # 延时一下,避免滑动太快滑过了
time.sleep(1)  # 延时1秒钟
imobj = imread('./img/电池图标.bmp')
acret = ac.find_template(screenshot(devid), imobj, 0.8)
if acret is None:
    print("没有找到子图")
    exit()
print(acret)
print("查找电池图标子图成功{}".format(acret['result'))
x = int(acret['result'[0])
y = int(acret['result'[1])
iatapi.click(deviceid=devid, x=x, y=y)  # 点击找到的坐标
点击打开低电量图标
imobj = imread('./img/打开低电量模式.bmp')
acret = ac.find_template(screenshot(devid), imobj, 0.8)
if acret is None:
    print("没有找到子图")
    exit()
print(acret)
print("查找打开低电量模式子图成功{}".format(acret['result'))
x = int(acret['result'[0])
y = int(acret['result'[1])
iatapi.click(deviceid=devid, x=x, y=y)  # 点击找到的坐标到此就全部完毕了,非常简单


下面是完整的代码:
import base64
import gzip
import io
import time
import ios_at_api  # 导入ios_at_api模块
import aircv as ac
import cv2
import numpy as np


iatapi = ios_at_api.HttpApi('192.168.0.113')  # 初始化IAT库,采用http协议进行交互
# 将base64字符串转换成cv2图片对象
def base64_to_bmp(data: dict):
    image_base64 = data['data'['img']
    is_gzip = data['data'['gzip']
    imgdata = base64.b64decode(image_base64)
    if is_gzip:
        with gzip.GzipFile(fileobj=io.BytesIO(imgdata)) as f:
            imgdata = f.read()
    image = np.asarray(bytearray(imgdata), dtype="uint8")
    im = cv2.imdecode(image, cv2.IMREAD_ANYCOLOR)
    if im is None:
        raise RuntimeError("读取图片流错误")
    return im


# 将本地图片转换成cv2图片对象
def imread(filename):
    im = cv2.imread(filename)
    if im is None:
        raise RuntimeError("file: '%s' not exists" % filename)
    return im


def screenshot(deviceid):
    image_data = iatapi.get_device_screenshot(deviceid=devid, gzip=False)
    if image_data['status'] > 0:
        print('截屏调用失败,原因:{}'.format(image_data['message'))
        return None
    else:
        print('截屏调用成功')
        return base64_to_bmp(image_data)


if __name__ == "__main__":  # 主程序入口
    # 如果不知道设备id可以用这条命令打印出所有的设备id print(iatapi.get_device_list())
devid = '5C:1D:D9:ED:D9:DE'  # 要操作的设备id
for i in range(3):  # 连续发送3次保证到达主屏幕
iatapi.send_key(deviceid=devid, key='', fn_key='WIN+h')  # 发送返回主屏幕热键
time.sleep(0.5)  # 延时一下,不然会变成APP切换器
imobj = imread('./img/设置按钮.bmp')
    acret = ac.find_template(screenshot(devid), imobj, 0.8)
    if acret is None:
        print("没有找到子图")
        exit()
    print(acret)
    print("查找设置按钮子图成功{}".format(acret['result'))
    x = int(acret['result'[0])
    y = int(acret['result'[1])
    iatapi.click(deviceid=devid, x=x, y=y)  # 点击找到的坐标
time.sleep(1)  # 延时1秒钟
for i in range(3):  # 往下滑动3次,保证到设置界面的最开始
iatapi.swipe(deviceid=devid, direction='down', length=0.8, afor=6)
    time.sleep(1) # 延时1秒钟
for i in range(3):  # 往上滑动3次
iatapi.swipe(deviceid=devid, direction='up', length=0.7, afor=10)
        time.sleep(0.2)  # 延时一下,避免滑动太快滑过了
time.sleep(1)  # 延时1秒钟
imobj = imread('./img/电池图标.bmp')
    acret = ac.find_template(screenshot(devid), imobj, 0.8)
    if acret is None:
        print("没有找到子图")
        exit()
    print(acret)
    print("查找电池图标子图成功{}".format(acret['result'))
    x = int(acret['result'[0])
    y = int(acret['result'[1])
    iatapi.click(deviceid=devid, x=x, y=y)  # 点击找到的坐标
time.sleep(1)  # 延时1秒钟
imobj = imread('./img/关闭低电量模式.bmp')
    acret = ac.find_template(screenshot(devid), imobj, 0.8)
    if not acret is None:
        print("已经是低电量模式,无需打开")
        exit()

    imobj = imread('./img/打开低电量模式.bmp')
    acret = ac.find_template(screenshot(devid), imobj, 0.8)
    if acret is None:
        print("没有找到子图")
        exit()
    print(acret)
    print("查找打开低电量模式子图成功{}".format(acret['result'))
    x = int(acret['result'[0])
    y = int(acret['result'[1])
    iatapi.click(deviceid=devid, x=x, y=y)  # 点击找到的坐标



结帖率:0% (0/1)

签到天数: 2 天

发表于 2022-12-7 19:38:53 | 显示全部楼层   山东省菏泽市
这就牛了呀 !!! 谢谢分享!
回复 支持 反对

使用道具 举报

发表于 2022-12-3 09:34:06 | 显示全部楼层   浙江省宁波市
6666666666666666
回复 支持 反对

使用道具 举报

发表于 2022-11-15 17:18:04 | 显示全部楼层   江苏省徐州市
楼主威武 终于可以自动化控制iOS设备了解决了我的难题 特意zc个账号前来感谢 牛逼牛逼
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-15 16:53:51 | 显示全部楼层   浙江省湖州市
jhtzz 发表于 2022-11-15 16:36
楼主,这个硬件在那里测试?

硬件他们的网址是https://iosusb.netlify.app/里面有他们的购买连接。
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2022-11-15 16:36:24 | 显示全部楼层   贵州省贵阳市
楼主,这个硬件在那里测试?
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2022-11-15 16:33:50 | 显示全部楼层   贵州省贵阳市
有这样的硬件?看上去很轻量啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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