《英雄联盟》通过艰苦且乏味的方式进行数据抓取以取乐

这是一篇关于《英雄联盟》(League of Legends)数据抓取与逆向工程的文章,主要内容总结如下:

  • 背景与目标:《英雄联盟》是热门竞技游戏,每日产生大量数据,但获取实时游戏数据困难。作者旨在通过逆向工程游戏引擎创建高保真数据集,以推动相关研究与工具开发。
  • 当前数据集及其问题

    • 现有数据集来源包括官方 RIOT 比赛 API 和 Live Client API,但都存在局限性,如数据粒度粗、精度低、完整性差等,无法满足构建深入分析工具的需求。
    • 公开数据集多基于 RIOT Match API,如 Kaggle 上的示例,数据粒度有限,难以获取详细的游戏内信息。
  • 数据使用与示例

    • startups 利用现有数据集提供玩家分析和洞察,如 Blitz.gg 的游戏内叠加层、Backseat.gg 的 AI 语音建议、U.GG 的赛后分析等。
  • 技术实现细节

    • Replays And Packets:从数据源获取加密的回放文件,通过解密和处理数据包,将其转换为结构化 JSON 格式,详细过程和回放格式在 rofl 格式部分 介绍。
    • Emulator And Decryption Background:使用模拟器(如 unicorn engine)处理加密数据包,通过简单的 Python 示例展示了数据包解密过程,包括 XOR 操作,同时强调了数据包字段的解密 - 访问 - 释放周期,以防止内存扫描。
    • Reverse Engineering:分析《英雄联盟》的自定义游戏引擎,重点关注 I/O 和网络层的数据包处理,包括内存分配、反序列化和游戏状态更新等步骤,通过 decompiled 代码详细展示了数据包处理的过程。
  • 性能与优化

    • 最初使用 unicorn 模拟器速度较慢,后用 rust 重写为“exception emulator”,运行速度大幅提升,处理 15 分钟左右的回放仅需 3 秒左右,输出约 135MB 的 prettified json,运行时内存约 400MB。
    • 提出了一些数据包和游戏引擎的优化建议,如减少重复数据包、使用变量整数压缩、合并相似数据包、优化回放时间偏移等,以节省存储空间和降低成本。
  • 总结与展望:作者认为该项目有趣,虽已抓取大量回放并进行分析,但因繁忙而暂停,认为系统瓶颈可能在回放聚合,同时提到可将汇编提升为 LLVM 进行静态分析等改进方向。
阅读 11
0 条评论