{"id":13591706,"url":"https://github.com/misterupkeep/soe-dissector","last_synced_at":"2025-10-06T16:30:47.305Z","repository":{"id":210797159,"uuid":"325638875","full_name":"misterupkeep/soe-dissector","owner":"misterupkeep","description":"Wireshark dissector(s) for Sony Online Entertainment's Reliable UDP protocol (version string `CGAPI_527`).","archived":false,"fork":false,"pushed_at":"2020-12-31T16:59:13.000Z","size":17,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T08:04:58.891Z","etag":null,"topics":["reliable-udp","reverse-engineering","sony-online-entertainment"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/misterupkeep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-12-30T20:09:41.000Z","updated_at":"2024-07-27T14:29:46.000Z","dependencies_parsed_at":"2023-12-05T00:47:46.961Z","dependency_job_id":null,"html_url":"https://github.com/misterupkeep/soe-dissector","commit_stats":null,"previous_names":["misterupkeep/soe-dissector"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/misterupkeep/soe-dissector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/misterupkeep%2Fsoe-dissector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/misterupkeep%2Fsoe-dissector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/misterupkeep%2Fsoe-dissector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/misterupkeep%2Fsoe-dissector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/misterupkeep","download_url":"https://codeload.github.com/misterupkeep/soe-dissector/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/misterupkeep%2Fsoe-dissector/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278643330,"owners_count":26021086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["reliable-udp","reverse-engineering","sony-online-entertainment"],"created_at":"2024-08-01T16:01:00.958Z","updated_at":"2025-10-06T16:30:47.004Z","avatar_url":"https://github.com/misterupkeep.png","language":"Lua","funding_links":[],"categories":["Lua"],"sub_categories":[],"readme":"# soe-dissector\nWireshark dissector(s) for Sony Online Entertainment's Reliable UDP\nprotocol (version string `CGAPI_527`).\n\nCurrently only a Lua version exists, though a C version ought to be\nadded at some point.\n\n## Dependencies\nThe Lua dissector depends on `zlib` for decompressing packets.\nCheck the Lua version on your Wireshark; you can use `luarocks` to\ninstall it:\n```sh\nluarocks-5.2 install zlib\n```\n\n## Installation\nPlace or symlink the `.lua` file onto Wireshark's Lua plugin path. You\ncan find out all the directories Wireshark scans in `Help \u003e About \u003e\nFolders`, or run:\n```sh\nln -s ~/.local/lib/wireshark/plugins/3.4 ./lua/soe-dissector.lua\n```\n\n## The SOE RUDP protocol\nResearch (inconclusive research) shows that Jeff Petersen, while\nworking on the game Cosmic Rift, designed a Layer 7 protocol for it.\n\nThis protocol serves merely as a transport layer protocol for game\ndata. It's designed to be reliable, secure, and compact. However, it\naccomplishes only one out of three.\n\nFor one, it's sent over UDP, making reliability actually challenging,\nin that it has to be manually implemented. It's done by incrementing\npackage sequence numbers, and receiving ACKs for each sequence number.\nIn case of out of order packets, the recipient sends `OUT_ORDER_PKT`\npackets for each out of order sequence number, so that they, along\nwith the missing packets, can be resent.\n\nThe encryption is optionally 'enabled' during the two-way handshake.\nAs far as I can tell, it uses the CRC seed exchanged during the\nhandshake as a XOR pad. However, that seed is sent unencumbered by any\nencryption, meaning that anyone intercepting the `SESSION_REPLY` packet\nwould be able to eavesdrop.\n\nNot all is bad though (and I'm sure these design decisions made sense\nat the time). Packets with data too large to fit into the client's\ninput buffer (communicated during handshake) will get 'fragmented'\ninto several. Furthermore, if a series of small packets (i.e\n`OUT_ORDER_PKT` or `ACK`) need to be sent, they can be grouped\ntogether into a `SOE_MULTI_SOE` packet.\n\nIn the `SESSION_REPLY` packet, the server warns the client of possible\nuse of (and support for) compression. Subsequent data/fragmented/multi\npackets will have on them a compression flag indicating if the payload\nis compressed (for which DEFLATE/gzip/zlib is used).\n\nWhat is interesting is that the protocol supports 4 'channels' for\nsending data: Each data-containing packet is tagged to which channel\nit's for. A cute idea that, sadly, doesn't seem to be used in any game,\nthat I can find.\n\n### Remark about protocol version specificity\nWhile the layout between revisions of the SOE RUDP protocol changes\nlittle, this dissector will most likely only work for protocol\nrevision with string revision `CGAPI_527`, which itself seems to be\nwhat Free Realms uses.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmisterupkeep%2Fsoe-dissector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmisterupkeep%2Fsoe-dissector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmisterupkeep%2Fsoe-dissector/lists"}