Kioku
Kotlin · Devirtualization · SQLite · Maven
Server reimplementation of Boom Online (Crazy Arcade). It is reverse-engineered from the Vietnamese client (v2.66), and the original, unmodified game client connects to it.
Demo





Demo gameplay: Here
Overview
Kioku is a game server for Boom Online, the Vietnamese release of Nexon's Crazy Arcade. The official servers were shut down years ago, so the game can't be played anymore. Kioku fixes that: the original ca.exe client connects to Kioku as if it were the official server, with no client patches.
There was no protocol documentation or server source to start from. All of the server's behavior was rebuilt from the client binary using static analysis in IDA, runtime tracing with Frida, and repeated testing on the real client. Every packet layout is checked against client version 2.66. A feature only counts as done once it works in the original client.
Features
- Accounts & persistence: login, levels/EXP, two currencies (Xu/Bạc), inventory with item expiry, and equipped outfits, all stored in SQLite. Purchases are atomic and replay-safe.
- Lobby & multi-room play: channels, the lobby room list, 8-slot rooms, teams, ready checks, chat, and shared match results.
- Core battle mechanics: bomb placement and chain explosions, kicking and throwing bombs, pushable boxes, item drops, Needle/Dart/Bond items, and death and revival.
- Game modes: Arena with AI bots, PvP, the White Angel event, Boss Mission, and the Zombie, Wriggle, Clover, Rabbit Farm and Treasure (Bula) modes.
- Shop: a catalog of 6,800+ items (bomb skins, outfits, accessories, trails, fanfares).
- Social: pets, the Square hub (walk around with other players, square bombs, fishing).
How it's built
- Custom network layer: implements the game's proprietary binary protocol (framing, integrity checks and sequencing) so the stock client accepts the server as genuine.
- Declarative packet registry: each packet is declared once and wired up automatically at startup, so adding a message takes very little code.
- Deterministic game loop: all game logic runs on one serialized event loop, which removes whole classes of race conditions. Stale timers from finished rounds are rejected.
- Shared simulation: human players and AI bots go through the same validation paths, so bots can't do anything a player couldn't.
- Asset tooling: a custom-built asset studio that reads the game's proprietary archive formats. It can extract maps, items and localized strings, and it can also import new or modified assets back into the game, so content can be added without touching the client code.
What I learned
- Reverse engineering a binary network protocol from scratch: inferring packet layouts from decompiled code, then proving each one with runtime evidence.
- Designing server-authoritative game state when the client cannot be changed.
- Debugging desyncs and race conditions between several real game clients.