Marco Amann  -  2022-02-02

Pandars

Pandars is an Auction House scanner for a popular MMORPG written in Rust.

It emulates an official client by speaking the same, proprietary protocol, complete with ancient cryptography and questionable security decisions. If the project would be fully implemented, a pandars instance would be indistinguishable from a real person having their character stand in the auction house and browse listings all day.

Link to the code

Info

Don’t hate Medium? You can read a post I wrote there: Link

This is the revival of the abandoned grollrs project!


Blogpost

My employer allowed me to write about this project on company time and publish on their blog, so read that post first.

Description

The basic idea is simple: The code connects to a Mists of Pandaria server and scans the AH for you. Handling of found auctions is left to you, by default they are printed to the command line. Some features were deliberately kept private to prevent misuse.

Features

Things implemented:

  • Authentaication
  • Selecting characters from the realm server
  • Joining the world with cahracters
  • Talking with AH dude
  • Starting an AH scan across all items

Things not implemented:

  • Warden. Would work on local server but any serious private server has their own custom warden checks and we don’t want to steal these. After all, this keeps all the people away from this project, that want to use this scanner to harm others.
  • Dynamic GUIDs for the AH dude. This works on a local server but the reference private server is doing things the code can’t handle.
  • Writing the found auctions to a DB backend. This should be easy but you have to do it yourself.

Another word on warden

Finding out what exactly warden does is quite tricky (by design). Warden allows the game server (!) to run arbitrary checks on the client machine, e.g. collect a list of running processes or calculate the checksum of a memory region. These checks are sent to the client at runtime (!). While I was able to hook the functions in the official client, mocking these checks would be insanely difficult.

Screenshots

Some of the results, the scanner produces:

Startup and scanning on a local test server. The entry field corresponds to the item_id.

Startup and scanning on a local test server. The entry field corresponds to the item_id.

Extract of some collected data stored in a DB. ppi shows the price per item and market is the current, estimated market value

Extract of some collected data stored in a DB. ppi shows the price per item and market is the current, estimated market value


Associated Tags: