# nepoowen/trove-xigncode-heartbeat architecture

> Architecture diagram of the GitHub repository nepoowen/trove-xigncode-heartbeat, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nepoowen/trove-xigncode-heartbeat
- Repository: https://github.com/nepoowen/trove-xigncode-heartbeat

## Overview

Trove Xigncode is a native Windows DLL that intercepts XIGNCODE3 challenge traffic in the running game process and computes the A3 response offline. The documented workflow starts at DLL loading, freezes other threads during setup, installs socket and challenge-dispatcher hooks, captures A2, decodes its daily key, computes the MACs, and returns A3 through the intercepted handshake. The graph reflects README-documented stages where source excerpts are incomplete; it does not infer unspecified hook wiring.

Main entry points: [`project/src/challenge.hpp`](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp) (Hook initialization), [`project/src/main.cpp`](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/main.cpp) (Setup thread), [`project/minhook/include/MinHook.h`](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/minhook/include/MinHook.h) (MinHook library)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_bootstrap["DLL bootstrap"]
  node_entry["DLL entry<br/>[main.cpp]"]
  node_setup["Setup thread<br/>[main.cpp]"]
  node_freeze["Thread freeze<br/>[challenge.hpp]"]
end

subgraph group_interception["Traffic interception"]
  node_initialize["Hook initialization<br/>[challenge.hpp]"]
  node_socket_hooks["Socket hooks<br/>[challenge.hpp]"]
  node_dispatcher["Challenge dispatcher hook<br/>[challenge.hpp]"]
end

subgraph group_solver["Challenge solver"]
  node_a2["A2 challenge<br/>[challenge.hpp]"]
  node_key_decode["Daily key decoding<br/>[challenge.hpp]"]
  node_macs["M1 M2 MACs<br/>[challenge.hpp]"]
  node_response["A3 response<br/>[challenge.hpp]"]
end

subgraph group_support["Hooking and safety"]
  node_failure["Failure handling<br/>[challenge.hpp]"]
  node_minhook["MinHook library<br/>[MinHook.h]"]
end

node_game(("Trove process"))
node_socket_api["ws2_32 socket APIs"]
node_xigncode["XIGNCODE3 client"]
node_xem_file["XEM file"]

node_game -->|"loads DLL"| node_entry
node_entry -->|"starts thread"| node_setup
node_setup -->|"freezes threads"| node_freeze
node_setup -->|"calls"| node_initialize
node_setup -->|"unfreezes threads"| node_freeze
node_initialize -->|"checks size"| node_xem_file
node_initialize -->|"on size mismatch"| node_failure
node_initialize -->|"installs"| node_socket_hooks
node_initialize -->|"hooks dispatcher"| node_dispatcher
node_socket_hooks -->|"uses"| node_minhook
node_dispatcher -->|"uses"| node_minhook
node_socket_hooks -->|"intercepts"| node_socket_api
node_xigncode -->|"exchanges traffic"| node_socket_api
node_dispatcher -->|"captures"| node_a2
node_a2 -->|"decodes"| node_key_decode
node_key_decode -->|"provides key"| node_macs
node_a2 -->|"provides timestamp"| node_macs
node_macs -->|"computes"| node_response
node_socket_hooks -->|"returns A3"| node_response
node_failure -->|"terminates process"| node_game

click node_entry "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/main.cpp"
click node_setup "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/main.cpp"
click node_freeze "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_initialize "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_socket_hooks "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_dispatcher "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_a2 "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_key_decode "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_macs "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_response "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_failure "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp"
click node_minhook "https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/minhook/include/MinHook.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_setup,node_freeze,node_xigncode toneBlue
class node_initialize,node_socket_hooks,node_dispatcher toneAmber
class node_a2,node_key_decode,node_macs,node_response,node_socket_api toneMint
class node_failure,node_minhook toneRose
class node_game,node_xem_file toneIndigo
```

## Components

### DLL bootstrap

- [DLL entry](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/main.cpp): `project/src/main.cpp`
- [Setup thread](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/main.cpp): `project/src/main.cpp`
- [Thread freeze](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`

### Traffic interception

- [Hook initialization](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`
- [Socket hooks](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`
- [Challenge dispatcher hook](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`

### Challenge solver

- [A2 challenge](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`
- [Daily key decoding](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`
- [M1 M2 MACs](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`
- [A3 response](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`

### Hooking and safety

- [Failure handling](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/src/challenge.hpp): `project/src/challenge.hpp`
- [MinHook library](https://github.com/nepoowen/trove-xigncode-heartbeat/blob/main/project/minhook/include/MinHook.h): `project/minhook/include/MinHook.h`

### Other components

- **Trove process**
- **ws2_32 socket APIs**
- **XIGNCODE3 client**
- **XEM file**

## Connections

- Trove process → DLL entry: loads DLL
- DLL entry → Setup thread: starts thread
- Setup thread → Thread freeze: freezes threads
- Setup thread → Hook initialization: calls
- Setup thread → Thread freeze: unfreezes threads
- Hook initialization → XEM file: checks size
- Hook initialization → Failure handling: on size mismatch
- Hook initialization → Socket hooks: installs
- Hook initialization → Challenge dispatcher hook: hooks dispatcher
- Socket hooks → MinHook library: uses
- Challenge dispatcher hook → MinHook library: uses
- Socket hooks → ws2_32 socket APIs: intercepts
- XIGNCODE3 client → ws2_32 socket APIs: exchanges traffic
- Challenge dispatcher hook → A2 challenge: captures
- A2 challenge → Daily key decoding: decodes
- Daily key decoding → M1 M2 MACs: provides key
- A2 challenge → M1 M2 MACs: provides timestamp
- M1 M2 MACs → A3 response: computes
- Socket hooks → A3 response: returns A3
- Failure handling → Trove process: terminates process
