{
  "added_at": "2026-11-09",
  "additional_evidence_urls": [
    "https://github.com/rafi1212122/AscNet/blob/a55e0896f6d402df22ab6e99f23854dd1d2ad46a/README.md",
    "https://github.com/rafi1212122/AscNet/blob/a55e0896f6d402df22ab6e99f23854dd1d2ad46a/AscNet.GameServer/Packet.cs",
    "https://github.com/rafi1212122/AscNet/blob/a55e0896f6d402df22ab6e99f23854dd1d2ad46a/AscNet.GameServer/Server.cs"
  ],
  "category": "reconstruction-cases",
  "class": "game",
  "description_en": "AscNet reconstructs a server for Punishing: Gray Raven. Its C# code includes TCP game sessions, HTTP account and configuration endpoints, and handlers for game features. A companion parser reads packet captures, reassembles length-prefixed TCP messages, decrypts them and decodes MessagePack requests, responses and pushes into JSON.",
  "description_zh": "AscNet 为《战双帕弥什》重建服务器。C# 代码包含 TCP 游戏会话、HTTP 账户及配置接口，以及多种游戏功能的处理程序。附带的抓包解析器重组带长度前缀的 TCP 消息，解密后将 MessagePack 请求、响应和推送消息转成 JSON。",
  "entry_url": "https://awesomerea.org/resources/ascnet-punishing-gray-raven-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/ascnet-punishing-gray-raven-case/",
  "evidence_url": "https://github.com/rafi1212122/AscNet/blob/a55e0896f6d402df22ab6e99f23854dd1d2ad46a/AscNet.PcapParser/PcapParser.cs",
  "group": "cases",
  "id": "ascnet-punishing-gray-raven-case",
  "json_url": "https://awesomerea.org/resources/ascnet-punishing-gray-raven-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/ascnet-punishing-gray-raven-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/ascnet-punishing-gray-raven-case/index.md",
  "name": "AscNet: reconstructing a Punishing: Gray Raven server",
  "name_zh": "AscNet：重建《战双帕弥什》服务器",
  "reconstruction_method": "other",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirement_facets": [
    "scope",
    "prerequisites",
    "license"
  ],
  "requirements": [
    "Punishing: Gray Raven is the named client target.",
    "The packet parser takes a capture filename as its command-line argument.",
    "No licence file in the repository."
  ],
  "requirements_zh": [
    "客户端目标为《战双帕弥什》。",
    "抓包解析器以抓包文件名作为命令行参数。",
    "仓库中没有许可证文件。"
  ],
  "targets": [
    "game",
    "protocol"
  ],
  "url": "https://github.com/rafi1212122/AscNet",
  "verification": "source-reviewed",
  "verified_at": "2026-11-06"
}
