Package: wizproxy
wizproxyA packet proxy for exfiltrating and manipulating encrypted Wizard101
network traffic.DisclaimerUsing this software bears a risk of getting your account banned. At the time of writing, it works with EU servers but that may change in the future.When in doubt, always use a burner account first to fish for a ban.How it workswizproxy sits between a client and a server, receiving and forwarding
all traffic from both parties to each other.Initially, client and server establish a session by confirming they
use the same RSA key pair and making the client generate a symmetric
encryption key and send it back encrypted to the server.wizproxy compromises this session handshake to exfiltrate said AES keys.Subsequently, wizproxy can decrypt all data passing through and implement
desirable features on top of that.SetupFollow these steps closely, no support will be provided when steps were
skipped. I do not take responsibility in case you get your account banned.RequirementsMake surePython 3.11is installed on your system,
and install withpip install -U wizproxy.Run Wizard101's patch client, login, and let it update the game. It is
important to always be up-to-date when trying to use the proxy.Patching the gameYou will not be able to connect to KingsIsle's servers anymore after this step until you run the patch client again.Download thelatest release of ki-keyringfor your operating system and run the following commands:ki-keyring-windows-amd64 eject > ki_keys.json
ki-keyring-windows-amd64 inject > injected_keys.jsonIf your installation of Wizard101 is not in the default install directory,
you may need to provide the--bin /path/to/WizardGraphicalClient.exeargument to both commands.You should then be left with two non-empty fileski_keys.jsonandinjected_keys.jsonin your working directory.Connecting to wizproxyFirst, you need to run wizproxy usingpython -m wizproxy /path/to/keyswhere/path/to/keysis the directory with the two JSONs from the previous step.After successful launch, you will see a log message along the lines of[0.0.0.0:40881] Spawning shard to SocketAddress(ip='...', port=...)...in your
console. Note the port at the start,40881in this case.Then navigate to theBin/directory of your Wizard101 installation (on Windows,
it's usuallyC:\ProgramData\KingsIsle Entertainment\Wizard101\Bin).Open a command line and run.\WizardGraphicalClient.exe -L 127.0.0.1 40881to
connect to wizproxy.Using with EU serversSkip this if you're a US player.wizproxy does support the EU servers of the game just as well as the US ones.Simply follow all the above steps and then launch the proxy using the commandpython -m wizproxy /path/to/keys -l <login server ip>.You can find the login server IP inPatchClient/BankA/PatchConfig.xmlinside
the game's installation directory, XML keyLoginHostname.For the German servers for example, you would usepython -m wizproxy /path/to/keys -l login-de.eu.wizard101.com.Dumping capturesThe wizproxy CLI supports several configuration options for customization,
which can be found using the--helpflag.Notably,-c /path/to/capture.pcapngdumps all packets passing through the
proxy to a pcapng file. Each packet will be annotated with a comment saying
what shard produced it and what client ID it was.A Wireshark plugin that enables filtering expression for KingsIsle frames
is provided inextra/.Moonlightcan be used for
post-processing these captures.FAQClient X crashed: Invalid signatureThis means your client is out of date. Open the patch client and let it run
to completion, then follow the above setup steps again to inject a custom
key ring into the updated binary.If that still doesn't resolve it, the client version is unsupported.Is injection supported?Yes and no.Injection as in arbitrarily injecting any amount of packets at any given time
is not supported and, for many use cases where this would be considered, can
get your account banned.Interception and manipulating the contents of specific packet types, however,
is supported and is the encouraged way of interacting with the packet stream.I'm gettingjson.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)This is because you are on Windows and the JSON files you dumped are UTF-16
encoded. Use any text editor of your preference to convert them to UTF-8.