A game launcher and code injector for Conquer Online
Dragon is Chimera’s game launcher, a necessary tool for redirecting the client away from official servers to private servers. Since Conquer Online has no open-source clients, code needs to be injected for changing the behaviors of the game client. A key module injected by Dragon detours the WinSock2 API and redirects connect attempts away from official servers to Chimera. Other included modules detour ShellExecute to prevent website popups on close and LoadLibraryExW to load an older ActiveX Flash plugin from the client directory (temporary workaround).
The launcher also provides an updater and interface for players, allowing them to change settings and view recent updates while their client is patched.
How it works
The method of injection used by Dragon is APC Queue DLL Injection. Dragon first starts the game client process in a suspended state. Then, it allocates memory on the client process and writes the names of DLL modules to be loaded into the process. Each module is then queued on the main thread of the process using QueueUserAPC. Once the process and main thread is resumed, modules will be loaded on context switch. This means all modules will be loaded to the process before the entry point can be called.
An open-source version of the project can be found on my GitLab profile using the link below. The open-source version excludes the interface for Chimera, but instructions are included for integrating with Dragon’s C++ launcher program.