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

某私服地下城手游抓包协议咨询

  •  2
     
  •   saveai · 142 天前 · 4956 次点击
    这是一个创建于 142 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一个问题:

    dnf 韩服的"私服"(咸鱼上 50 块钱买的一个帐号,70 版本的手游), 我想看看他们是怎么破解韩服做成自己的私服的,我使用了手机上的 HttpCanary ,也尝试了电脑上的 Fiddler+Proxifier ,好像没有看到实际的游戏操作对应的请求接口? 比如强化一个装备,那后台里面角色的装备的等级肯定会涉及到数据库变动吧,它是如何发请求给后台的呢?不是通俗的 Http/Https/TCP/UDP 协议吗?...

    另外提供下载地址和帐号哈:

    https://www.guluapp.cn/qIke

    攻略文档,gm 后台地址在下面链接: https://rb2xj6wah7.feishu.cn/docx/EkgldYds2oCjRCxC9RtcjFtQnwf

    可用于玩和测试的帐号: 帐号 1:12345678 ,12345678 帐号 2:112233 ,112233

    我是想知道接口后,能不能改某个装备的强化等级,虽然 gm 后台可以发装备点券,但是这里面的怪血太厚了攻击太高打起来费时间

    36 条回复    2024-06-17 13:12:51 +08:00
    coolcoffee
        1
    coolcoffee  
       142 天前
    http 协议那个延迟,不可能满足游戏低延时要求,而且 http 本身来回传送的 header 开销也是硬伤。

    大概率是 udp 协议类型,最差也是 tcp ,得用 Wireshark 抓才行。
    saveai
        2
    saveai  
    OP
       142 天前
    @coolcoffee Wireshark 看到有 TCP 有 UDP ,但是不知道咋弄成可以理解的方式,看起来都是
    ....D......n....B..P.....m7.....G3.GXe."..n*.7......s....~........W.T...S....D......n.^ZLD5.8....`..C
    ....If.....u.u0...]...
    这种的内容,而且请求数量好多
    irever
        3
    irever  
       142 天前
    重点是如何获得服务端的源码吧?
    仅靠协议抓包来逆向服务端的实现,复杂度太高、准确度太低
    w88975
        4
    w88975  
       142 天前
    @saveai 先了解一下 protobuf
    coderxy
        5
    coderxy  
       142 天前
    双端的通讯都是加密的, 你要看源码搞清楚它的加密原理, 还有像强化等级这个属性,肯定是服务端计算的,客户端只是发起强化请求,其它全在服务端。
    weijancc
        6
    weijancc  
       142 天前 via iPhone   ❤️ 1
    游戏一般都不会用 http 协议,而是通过 tcp 自定义交互协议,都自定义协议了,自然会带上加密。
    wang93wei
        7
    wang93wei  
       142 天前
    @irever

    你还真别说,现在米系游戏的私服就是这么出来的。通过抓包重写了服务端。

    你这么想,客户端资源文件都在了。就看服务端怎么给传参数就能跑起来了。
    cnevil
        8
    cnevil  
       142 天前
    游戏的交互不会是 http 吧。。腾讯不专门有个叫 kcp 的东西,基于 UDP 的
    而且现在这种数据都会加密和校验的
    十几年前会有叫做封包、脱机挂这种骚操作,脱机挂就是模拟账号对某些行为直接发包来实现不登游戏就能进行对应行为,现在你还听说过么。。
    hnliuzesen
        9
    hnliuzesen  
       142 天前
    @coderxy 哈哈,韩国人做游戏,还真不一定,初中那会端游用 WPE 封包工具能把武器强化到 255 ,最近手游还有挂是能看到最后翻牌的结果,一直觉得这种功能应该是服务端算好结果直接传回来,点哪个卡都是一样结果,是假的,谁知道人家是真的给传回来了四个结果
    coolcoffee
        10
    coolcoffee  
       142 天前   ❤️ 1
    @saveai 传输往往都是加密的,通过分析内存里面的才有可能是明文。

    很多反作弊工具提权就是为了避免外挂通过高权限来分析内存,所以外挂后面都衍生到分析虚拟机内存以及直接走 PCIE 访问物理内存。

    收手吧,这个不是普通玩家该碰的,除非你觉得做协议逆向比游戏本身好玩。
    saveai
        11
    saveai  
    OP
       142 天前
    @wang93wei 是的,我怀疑他们就是这样来实现私服的,另外我在主题里贴一个 55 版本可以自己搭建的后台源码,我看是用 java 写的,而且这个 70 版本应该也是基于这个版本改出来的。

    @coderxy 我是猜测哈,会不会有客户端提交数据到服务端的接口,我就可以实现自己提供数据发送到服务端,比如装备强化,虽然客户端写着最高 20 ,到了 20 就没按钮了,那我知道接口后我传一个 21 的等级到服务器,就看他们自己实现的服务端有没有这么严格的判断了(因为这是私服,大多都是一两个人开发的,所以逻辑肯定没那么严格)。

    比如目前是可以实现用 GG 修改器,修改觉醒等级为 60 级(目前最高觉醒 5 级),然后可以同步到服务端一直生效,因为他们的服务端目前并没做当前级别和技能最高等级的逻辑判断。
    fatekey
        12
    fatekey  
       142 天前
    肯定不是 http 协议啊,先断点在发包函数,再看调用栈往上一个一个函数的逆向,才能搞明白生成包的逻辑。
    RobinzzZ
        13
    RobinzzZ  
       142 天前
    DNF 私服是台服关闭之后的源代码泄露吧,网上大把的教程
    ShayneWang
        14
    ShayneWang  
       142 天前
    有源码吗,搭了和朋友玩玩
    saveai
        15
    saveai  
    OP
       142 天前
    @RobinzzZ 端游是这样的,这里说的是手游
    youngkingdom
        16
    youngkingdom  
       142 天前
    应该是用的 frida
    saveai
        17
    saveai  
    OP
       142 天前
    @youngkingdom 应该是的,我看 app 运行的时候,会同样请求韩服的那个域名,***.nexon 什么的。

    @w88975 我看了之前版本,确实是用到了 protobuf


    @fatekey 触发到我的知识盲点了。。


    @ShayneWang

    55 版本私服搭建源码及安卓安装包地址:

    aHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMXQ2ZjZqby1qTmZ3VHM0dU9oMGdENHc/cHdkPTZjZDU=
    ShayneWang
        18
    ShayneWang  
       142 天前
    @saveai 链接被取消了, 我自己找了一套,跟你发的那个注册页面一样的,是这个吗?
    kuanat
        19
    kuanat  
       142 天前
    游戏的核心逻辑肯定不会走 http 协议,大多数是在 tcp/udp 基础上自定义协议。最近这些年的游戏多数都会用 protobuf 类似协议来简化开发。

    如果是比较小众的游戏私服,大概率是内部泄漏的,可能是服务端程序,也可能是代码文档。如果是比较火的游戏,才比较有可能是人力重建。

    如果以逆向工程的方式来重建服务器端,主要是两个工作。一个是逆向客户端,提取客户端发包和收包的数据结构定义,然后实现一个协议兼容的服务器端。另一个就是重建游戏逻辑,这个事情比想象中简单,只是工作量巨大。

    要是做过类似的正向开发,这个事情不难理解。具体到你的问题上,能逆向出协议定义的话(无论是静态解密还是动态追踪),抓到 tcp/udp 包就等于 http 抓到请求。
    levelworm
        20
    levelworm  
       141 天前 via Android
    @coolcoffee 这个真的蛮有意思的。请问是游戏里自带虚拟机吗?
    coolcoffee
        21
    coolcoffee  
       141 天前   ❤️ 2
    @levelworm 不是哦,外挂为了能够避免被检测出来,会改成通过虚拟机来运行游戏本体,外挂自身在外层上帝视角分析虚拟机内存。 很多游戏就直接禁止了虚拟机的运,比如 QQ 飞车 https://fcsy.qq.com/webplat/info/news_version3/28528/28529/28531/m19689/201902/794379.shtml

    但是外挂为了继续分析内存,就衍生出来物理 PCIE 方式跳过系统访问内存。
    kenvix
        22
    kenvix  
       141 天前
    稍微正常点的开发者都不会把多人实时联机的游戏的主体通信用 HTTP 或者裸 TCP 实现,首选使用 UDP ,如果需要可靠机制用 KCP 。只有聊天框、公告栏之类的会用裸 TCP 或 HTTP 。
    leonshaw
        23
    leonshaw  
       141 天前 via Android   ❤️ 1
    攻防类技术迭代太快了,外人只能看个皮毛,只有业内的才能说出个所以然来
    ZTBOXS
        24
    ZTBOXS  
       141 天前
    @saveai 可以补个链接吗,我想有空搭一个和我朋友玩玩><
    geekvcn
        25
    geekvcn  
       141 天前 via Android
    你想多了,装备强化这类操作都是跑在服务端的,客户端只是对自己某年装备请求了一次强化
    levelworm
        26
    levelworm  
       141 天前 via Android
    @coolcoffee 多谢,明白了,感觉很有趣的样子。Malware 好像也有很多这种在虚拟机里运行的例子。我是首次听说 PCIE ,去研究一下原理,猜测是需要在 boot 的时候就注入啊?
    levelworm
        27
    levelworm  
       141 天前 via Android
    @coolcoffee 我去,我查了一下,PCIE 真的就是硬件啊。以前有加密狗,这算是作弊狗了,真狠。真的感觉很有意思,值得深入研究一下。
    dearmymy
        28
    dearmymy  
       141 天前
    从你问的问题看,你最好放弃你的想法,技术积累跟这行差的太远。
    wanqiangcrack
        29
    wanqiangcrack  
       141 天前
    你想从技术上搞定这个问题? 你也是想太多了。 源码其实没你想得那么难获得的,有钱就行。
    syboml
        30
    syboml  
       141 天前
    @saveai 百度网盘的链接失效了,可以重新再分享个链接吗
    nilai
        31
    nilai  
       141 天前
    PCIE 并不是无敌的,DMA 的话,其实各大厂,包括国内的几个厂都已经有检测了。
    lisxour
        32
    lisxour  
       141 天前
    @irever 所以现在某二次元私服就差不多烂尾了,靠抓包太多 BUG 了,开发难度爆炸,成吨的 issue 没法解决。
    BottleKay
        33
    BottleKay  
       141 天前
    @ShayneWang dockerhub 搜索 1995chen/dnf
    ShayneWang
        34
    ShayneWang  
       140 天前
    @BottleKay 谢谢分享,但这好像是端游吧 我有端游的
    ShayneWang
        35
    ShayneWang  
       140 天前
    @ZTBOXS
    @syboml

    我找了一个,但是签完名 APK 打开闪退,你们研究研究
    6ZO+5o6lOiBodHRwczovL3Bhbi5iYWlkdS5jb20vcy8xUGJTNU94NGU0clVIaktvd2VJNDBEZz9wd2Q9c2lociDmj5Dlj5bnoIE6IHNpaHIg5aSN5Yi26L+Z5q615YaF5a655ZCO5omT5byA55m+5bqm572R55uY5omL5py6QXBw77yM5pON5L2c5pu05pa55L6/5ZOmIAotLeadpeiHqueZvuW6pue9keebmOi2hee6p+S8muWRmHY155qE5YiG5Lqr
    syboml
        36
    syboml  
       138 天前
    @ShayneWang 收到 感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2723 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:33 · PVG 20:33 · LAX 05:33 · JFK 08:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.