V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FaiChou
V2EX  ›  程序员

手机游戏手柄通信的原理是什么?

  •  1
     
  •   FaiChou ·
    FaiChou · 2019-09-02 13:01:04 +08:00 · 5859 次点击
    这是一个创建于 1894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如这款游戏手柄「黄蜂背键版」, 可以点击映射到屏幕的某一点, 也可以进行复杂的宏录制来复合多个操作.

    那么在 iOS 上的工作原理是什么样的呢?

    首先先看「黄蜂电容版本」, https://zhuanlan.zhihu.com/p/45363782 这里有篇博客介绍了, 原理是:

    飞智电容隔空映射技术,无需进行蓝牙连接,直接将手机插入手柄,通过操作不同的手柄按键即可实现模拟玩家触摸手机屏幕的操作,属于物理操控。

    而「黄蜂背键版」则采用蓝牙进行传输, 而非物理操控, 想要使用手柄操控游戏还必须使用「游戏厅」来打开游戏, 那么问题来了:

    1. 为何需要「游戏厅」来打开的游戏才能做到手柄操控?
    2. 手柄点击 -> 蓝牙传输到手机 -> 手机将信号传给 「游戏厅」-> 游戏厅解析信号 -> 发送给游戏, 最后一步「游戏厅」是通过何种方式频繁给游戏发信号的? iOS 下是采用 URLScheme 吗?
    3. 如果游戏厅在后台使用 URL Scheme 频繁处理信号发送信号给游戏, 那么内存不足系统把游戏厅 app 给杀死, 那么手柄就不灵了吗? 这应该是很常见的吧?

    img

    25 条回复    2019-09-02 17:15:00 +08:00
    FaiChou
        1
    FaiChou  
    OP
       2019-09-02 13:31:00 +08:00
    目前收到两种解释:

    1. 游戏里有一个开关, 通过 urlscheme 启动过来传参 通知 app 打开这份蓝牙协议, 之前在游戏厅里的配置 都是通过 scheme 传过来了, 游戏里自己解析
    2. 蓝牙手柄根本不知道目前使用的游戏配置是哪一个, 但是在游戏厅 apply & run 的时候,游戏厅给手柄发送了对应的配置并且打开游戏, 这时候游戏和配置才对上, 手柄把处理好的信号直接发送给游戏, 所以受支持的游戏只需要支持一份公共的蓝牙协议就可以了.
    FaiChou
        2
    FaiChou  
    OP
       2019-09-02 13:31:45 +08:00
    但以上两种解释都是在猜测, 没有找到官方解释, 在 iOS 下不越狱也非常难以 debug 验证 囧
    eGlhb2Jhb2Jhbw
        3
    eGlhb2Jhb2Jhbw  
       2019-09-02 13:34:24 +08:00
    你说的这个 Scheme 的原理是从哪里查出来的?

    我一直以为是“游戏大厅”给游戏注入了一个动态库,用来 hook 屏幕操作的。
    eGlhb2Jhb2Jhbw
        5
    eGlhb2Jhb2Jhbw  
       2019-09-02 13:39:06 +08:00
    @FaiChou #4 这我知道,但是怎么知道手柄是这样的实现,怎么知道游戏就有解析蓝牙手柄协议的 scheme 暴露出来,怎么知道游戏有哪些支持的协议,这些有什么规范吗?
    FaiChou
        6
    FaiChou  
    OP
       2019-09-02 13:39:30 +08:00
    @eGlhb2Jhb2Jhbw 「给游戏注入了一个动态库」这个方式会有安全隐患, 大多数游戏应该都不会支持此操作来被 hook 吧
    justfindu
        7
    justfindu  
       2019-09-02 13:40:14 +08:00
    物理映射 触发屏幕
    FaiChou
        8
    FaiChou  
    OP
       2019-09-02 13:41:18 +08:00
    @eGlhb2Jhb2Jhbw 这些协议规范不像 js 查 ecma 那样容易找到, 所以除非联系手柄开发商或者游戏开发商, 否则在网上的资料很少, 个人也是比较好奇才研究下, 经过一系列搜索也是无果
    FaiChou
        9
    FaiChou  
    OP
       2019-09-02 13:43:02 +08:00
    @justfindu 手柄一代是通过物理映射的, 模拟用户点击 但第二代是蓝牙协议.. 不清楚原理
    eGlhb2Jhb2Jhbw
        10
    eGlhb2Jhb2Jhbw  
       2019-09-02 13:58:12 +08:00
    @FaiChou #6 动态库注入是 iOS 系统层级的实现,App 层面如果不做特殊处理是很难防得住的,参考微商们用的 WX。
    Sapp
        11
    Sapp  
       2019-09-02 14:05:16 +08:00
    @FaiChou 这个手柄我买过,物理的那一代也可以蓝牙,我就一直是蓝牙状态,因为物理链接的不好使
    openbsd
        12
    openbsd  
       2019-09-02 14:09:54 +08:00
    @eGlhb2Jhb2Jhbw #10
    汗手也关注过一段时间这个手柄,不敢确认 TM 对这个的态度没下手。感觉没有 注入 IOS 那么高级
    如果能直接注入系统,就相当于物理挂了,为啥还要通过别的途径进入游戏 ?
    eGlhb2Jhb2Jhbw
        13
    eGlhb2Jhb2Jhbw  
       2019-09-02 14:25:10 +08:00   ❤️ 1
    @openbsd #12 注入 App 和注入系统是两码事,如果只写一套动态库,可以挂载到不同的 App,成本就没你想的那么高。我理解的是因为需要注入动态库,所以给 App 脱壳了,为了避免证书问题,就把 App 也作为动态库,使用游戏大厅加载起来了。
    当然,这个也只是我的猜测,没实际用过,不过看有些手柄的介绍,游戏里会有手柄的菜单,菜单里可以拖拽虚拟手柄的屏幕映射位置。这个菜单应该不是游戏自己做的,所以我才理解的是动态挂载了。
    whileFalse
        14
    whileFalse  
       2019-09-02 14:38:03 +08:00
    iOS 游戏厅里面的游戏应该是单独下载的特殊版本吧?
    x86
        15
    x86  
       2019-09-02 14:42:36 +08:00
    我用黄蜂电容版用蓝牙模式被封了,现在切回电容模式很稳定...
    binux
        16
    binux  
       2019-09-02 14:44:04 +08:00 via Android
    我猜通过游戏厅它能接管输入设备,根本不会是你想的那么麻烦
    FaiChou
        17
    FaiChou  
    OP
       2019-09-02 14:49:56 +08:00
    @whileFalse

    不需要下载特殊版本游戏, 只需要点击 apply and play 就可以启动运行

    https://tva1.sinaimg.cn/large/006y8mN6ly1g6l6ahjnbaj31120ku79o.jpg
    huage2580
        18
    huage2580  
       2019-09-02 15:49:37 +08:00   ❤️ 4
    前竞品公司员工,飞智的电容版,行业目前是很难抄的,游戏也难检测;蓝牙版,大家都一样的技术,互相抄袭。我不负责 IOS 相关,只能说一些我知道的,1.逆向游戏植入 SDK(游戏每次更新都要重下,很耗我们的企业证书,经常封),2.越狱。游戏厅就个平台,主要是要引流下载我们的植入包;安卓端,最早也做逆向,后来逆向不做了,有更稳定的技术,1。shell 提权,2。多开;最后,正规的渠道,各种厂商合作,我们提供蓝牙 SDK;
    腾讯的态度,先打压后谈合作。用户封号警告;这类行业都不好做,现在全看腾讯吃饭,它自己也搞手游外设助手之类的,看风向应该是你们按我标准做硬件,我内置,都给给我交保护费。
    fvckDaybyte2
        19
    fvckDaybyte2  
       2019-09-02 15:51:18 +08:00 via iPhone
    不是特殊版本怎么保证每个游戏的 URLScheme 都一样?应该不是这个原理
    huage2580
        20
    huage2580  
       2019-09-02 16:04:21 +08:00
    @huage2580 对了,IOS 也能支持启动官方游戏,核心我就不了解,我知道暂时支持 64 位,不支持 A12 芯片;一样会检测封号。
    FaiChou
        21
    FaiChou  
    OP
       2019-09-02 16:17:22 +08:00
    @huage2580

    谢谢, 之前玩过「王者荣耀」在某一官方助手 app 里启动, 可以实现游戏解说功能, 类似于导航语音功能
    openbsd
        22
    openbsd  
       2019-09-02 16:21:50 +08:00
    @eGlhb2Jhb2Jhbw #13
    我理解的是非系统层注入,所以要通过其它途径(游戏大厅)进入游戏。
    而且通过这种模式进入游戏,非常大的概率会触发游戏本身的反作弊?机制,有封号风险
    为啥厂商不出类似的游戏周边,方便操作,不给内置宏啥的....
    x86
        23
    x86  
       2019-09-02 16:28:34 +08:00
    @huage2580 #18 电容模式是很稳定,我前几天蓝牙模式就给封了现在换电容模式
    FaiChou
        24
    FaiChou  
    OP
       2019-09-02 16:49:43 +08:00
    @x86 什么游戏给封了? 现在账号找回了吗
    x86
        25
    x86  
       2019-09-02 17:15:00 +08:00
    @FaiChou #24 和平精英封 7 天段位清零,刚解封,现在换电容模式在打
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2827 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:08 · PVG 10:08 · LAX 18:08 · JFK 21:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.