V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ethusdt
0.01D
V2EX  ›  程序员

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

  •  1
     
  •   ethusdt ·
    FaiChou · Sep 2, 2019 · 6401 views
    This topic created in 2429 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    img

    25 replies    2019-09-02 17:15:00 +08:00
    ethusdt
        1
    ethusdt  
    OP
       Sep 2, 2019
    目前收到两种解释:

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

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

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

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

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