https://github.com/aasb13/mope-io
A mope io utility client, with almost all packets reverse engineered
https://github.com/aasb13/mope-io
client mope-io mopeio mopeio-engine packet reverse-engineering server
Last synced: about 10 hours ago
JSON representation
A mope io utility client, with almost all packets reverse engineered
- Host: GitHub
- URL: https://github.com/aasb13/mope-io
- Owner: aasb13
- License: mit
- Created: 2026-06-25T03:56:32.000Z (11 days ago)
- Default Branch: master
- Last Pushed: 2026-06-25T04:20:33.000Z (11 days ago)
- Last Synced: 2026-06-25T06:13:05.022Z (11 days ago)
- Topics: client, mope-io, mopeio, mopeio-engine, packet, reverse-engineering, server
- Language: JavaScript
- Homepage:
- Size: 3.59 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Mope.io reverse engineered
A simple mope.io client that injects into the websocket. (Most packets were completely reverse engineered, 64 packets as of now)
## Overview
This project builds and injects a userscript into mope.io to intercept all WebSocket packets. A Python controller manages the browser session via SeleniumBase (UC mode), injects the userscript, and drains packet logs.
## Installation
### Prerequisites
- Python 3.8+
- Chromium/Chrome browser
### Setup
1. Clone the repository:
```bash
git clone https://github.com/aasb13/mopeio
cd mopeio
```
2. Create a virtual environment:
```bash
python3 -m venv .venv
source .venv/bin/activate
```
3. Install dependencies:
```bash
pip install -r requirements.txt
```
## Usage
### Build the Userscript
```bash
python3 scripts/build_userscript.py
```
This compiles the source files from `src/userscript/` into a fat `userscript.js`.
### Launch the Controller
```bash
python3 run_controller.py
```
### Command-Line Options
- `--browser`: Browser to use (chromium, chrome, edge) [default: chromium]
- `--url`: Target URL [default: https://mope.io/]
- `--headless`: Run browser in headless mode
- `--browser-profile-dir`: Persistent browser profile directory
- `--no-browser-profile`: Use temporary profile instead
- `--skip-build`: Skip userscript rebuild
- `--script`: Path to prebuilt userscript.js
- `--packet-log-file`: Write packet logs to JSONL file [default: packet_logs.jsonl]
- `--no-packet-log-file`: Disable file logging
- `--packet-log-stdout`: Pretty-print packet logs to stdout
- `--packet-log-viewer`: Start web-based packet viewer
- `--no-open-packet-log-viewer`: Start viewer server without opening browser
- `--no-debug-log-viewer`: Disable debug viewer
- `--no-open-debug-log-viewer`: Start debug viewer without opening browser
## Project Structure
```
mopeio/
├── assets/ # Deobfuscated game source files
│ └── deobf.js # Primary reference for packet structure
├── controller/ # Python controller logic
│ ├── browser.py # Browser configuration and driver creation
│ ├── inject.py # Userscript injection
│ ├── browser_log_pump.py # Log collection from browser
│ ├── log_viewer.py # Log viewer server setup
│ └── main.py # Main entry point
├── scripts/
│ └── build_userscript.py # Userscript build script
├── src/userscript/ # Userscript source files
│ ├── core/ # Core packet handling
│ ├── event/ # Event system
│ ├── module/ # Modular features
│ ├── network/ # Packet parsers
│ ├── structures/ # Game data structures
│ ├── ui/ # UI components
│ └── utils/ # Utility functions
├── viewer/ # Web viewer HTML files
│ ├── index.html # Packet viewer UI
│ └── debug.html # Debug log viewer UI
├── userscript.js # Built userscript (generated, excluded from git)
├── requirements.txt # Python dependencies
└── run_controller.py # Controller entry point
```
## Packet File Naming
Packet parsers in `src/userscript/network/` follow the pattern:
```
{ID}_{C/S}{PacketName}.js
```
- `ID`: Packet ID number
- `C`: Client-sent packet
- `S`: Server-sent packet
- `PacketName`: Descriptive packet name
Example: `5_CMovementPacket.js` (ID 5, client-sent, movement data)
## Dependencies
- seleniumbase>=4.40,<5
- python-socketio>=5.12,<6