Skip to content
Sean Proctor edited this page Mar 18, 2018 · 8 revisions

E-Access protocol definition

Authors: Marshall, Sean, Will

Disclaimer

Currently there are two official SIMU Endorsed Apps that talk with this protocol, SGE and zMUD Per Michael Niemeyer (Technical Aide, Simutronics Corporation)

"We will not disclose the method of doing account logins via the "eaccess" method. That method is what the Mac Wizard uses in standalone mode, and what the PC Windows SGE uses. This method is going to change in the future, and will no longer be available for unauthorized third-party programs, such as USGE."

Please note: This document was originally written before this comment was made. Also, the protocol has not changed since our original implementation over 10 years ago.

Server

host: eaccess.play.net
port: 7900

Protocol Order

  1. Send version Line (optional) Example: AL4334 SGE16 1 14
    if version sent, server responds with CURRENT if current version.
  2. Send K action (following line syntax)
  3. Server Sends Key. (!!NOT LINE SYNTAX!!)
  4. Send Action A. (Login)
    After this, if it fails or you want a different user... you must disconnect and reconnect
  5. Send actions to obtain information about games...
  6. Send Action G. (select Game)
  7. Send actions to obtain information about charactors
  8. Send Action L. (select charactor)
  9. Use response with any client.

Line Syntax:

NOTE: Exemption on K Action, Server does not follow protocol in response! (see K Action detail)

Action - Single Char
Details - May be multiple or no properties, each property prefixed by 0x09
Termination - 0x0a Hex Values ends server->client comm
0x0d,0x0a Hex Values ends client->server comm

Protocol Actions - Sending to server (summary only):

  • K - Server responses with Key (to encrypt password with)
  • A - This action tells the server what user/pass you're dealing with
  • M - Asks the server for a list of games
  • N - Asks server for game capabilities
  • G - Tells the server what game you want, server responds with some details
  • C - Asks the server for a list of characters specifically, other stuff included
  • L - Tells the server you want to play a character, server responds with connection info
  • F - (Unknown) SGE Sends it... Server response: NORMAL
  • B - (Unknown) zMUD Sends it... Server response: UNKNOWN
  • P - (Unknown) SGE Sends it w/ gamecode.. Server response: ?God knows what?

Version Action

INVALID LINE SYNTAX! (optional) This is where SGE checks to see if it's current.

Client> AL4334 SGE16 1 14
Server> CURRENT

TODO: See what it says if it's not a current version.

K Action

Invalid Line Syntax! This action is usually done first, as it is needed for authentication, which is also needed for almost every other step.

Example Client Server Response:

Client> K(0x0d,0x0a)
Server> |NMpR.uMjiEOmCMfGJTtrH\sWQqHdFhA(0x0a)

The server response, will always be 32 characters, then 0x0a

A Action

This is the client sending the username and the hashed password (hashed by the K action's key)

2nd detail seems to always contain something about the success

  • KEY - Successful auth, giving you a key to work with
  • NORECORD - There is no user with that username
  • PASSWORD - That's an incorrect password
  • REJECT - For suspended accounts, etc. There may be others for other types of account restrictions.

Code to hash password (pretty basic, works though):

char *sge_encrypt_password (char *passwd, char *hash) {
    int i;
    char *final;

    final = g_new (char, 33); /* i.e. malloc (sizeof (char) * 33) */
    for (i = 0; i < 32 && passwd[i] != '\0' && hash[i] != '\0'; i++) {
        final[i] = (char)((hash[i] ^ (passwd[i] - 32)) + 32);
    }
    final[i] = '\0';

    return final;
}

Client sends 2 details:

  1. username (plain text)
  2. hashed password

Successful auth: Server Responds with 4 details:

  1. Username (may be different capitalization the one sent)
  2. the word KEY in all caps (does this mean there may be more later?)
  3. the key, this can be matched with the one that the server sends with Action L
  4. full name of person registered with account

Bad User or Pass: Sever responds with 2 details:

  1. EMPTY
  2. NORECORD if bad user, PASSWORD if bad password

Example Exchange:

Client> A(0x09)blahuser(0x09)hashedkey(0x0d,0x0a)
Server> A(0x09)BLAHUSER(0x09)KEY(0x09)15352427991eea6e21e8e5f6aae3432c(0x09)JOHN DOE(0x0a)

G Action

This is the client telling the server what game we want to play, the server responds with some info. '''Keep in mind that if a trial is available, you will start the trial with this action.'''

Client sends 1 detail:

  1. Game Code (ex: DR)

Server Responds with 5+ details:

  1. Game Name
  2. Account Type (PREMIUM|NORMAL|TRIAL <-- are known ones)
  3. (Unknown) 0?
  4. (Unknown) Blank... nothing in it The rest is a config file, which appears to have URLs/Filepaths in it: (a whole lot)
  5. ROOT=sgc/dr
  6. MKTG=info/default.htm
  7. MAIN=main/default.htm
  8. GAMEINFO=information/default.htm
  9. PLAYINFO=main/default.htm
  10. MSGBRD=message/default.htm
  11. CHAT=chat/default.htm
  12. FILES=files/default.htm
  13. COMMING=main/default.htm
  14. STUFF=main/comingsoon.htm
  15. BILLINGFAQ=account/default.htm
  16. BILLINGOPTIONS=offer/payment.htm
  17. LTSIGNUP=https://account.play.net/simunet_private/cc-signup.cgi
  18. BILLINGINFO=http://account.play.net/simunet_private/acctInfo.cgi?key={KEY}
  19. SITE=sgc.GAMES=main/games.htm
  20. FEEDBACK=feedback/default.htm
  21. MAILFAIL=/sgc/dr/feedback/mailfail.htm
  22. MAILSUCC=/sgc/dr/feedback/mailsent.htm
  23. MAILSERVE=SGC
  24. SIGNUP=http://ad-track.play.net/sgc/signup_redirect.cgi
  25. SIGNUPA=http://ad-track.play.net/sgc/signup_again.cgi

Example transaction:

Client> G(0x09)DR(0x0d,0x0a)
Server> G(0x09)DragonRealms(0x09)PREMIUM(0x09)0(0x09)(0x09)ROOT=sgc/dr(0x09)MKTG=info/default.htm(0x09)MAIN=main/default.htm(0x09)GAMEINFO=information/default.htm(0x09)PLAYINFO=main/default.htm(0x09)MSGBRD=message/default.htm(0x09)CHAT=chat/default.htm(0x09)FILES=files/default.htm(0x09)COMMING=main/default.htm(0x09)STUFF=main/comingsoon.htm(0x09)BILLINGFAQ=account/default.htm(0x09)BILLINGOPTIONS=offer/payment.htm(0x09)LTSIGNUP=https://account.play.net/simunet_private/cc-signup.cgi(0x09)BILLINGINFO=http://account.play.net/simunet_private/acctInfo.cgi?key={KEY}&SITE=sgc(0x09)GAMES=main/games.htm(0x09)FEEDBACK=feedback/default.htm(0x09)MAILFAIL=/sgc/dr/feedback/mailfail.htm(0x09)MAILSUCC=/sgc/dr/feedback/mailsent.htm(0x09)MAILSERVE=SGC(0x09)SIGNUP=http://ad-track.play.net/sgc/signup_redirect.cgi(0x09)SIGNUPA=http://ad-track.play.net/sgc/signup_again.cgi(0x0a)

C Action

This is the client requesting a list of charactors, it also returns how many char slots are available. It also returns how many are used.

Client Sends No Details

Server Responds with 3+(2xn) details:

  1. Unsure, guessing number of characters used (more experimentation required)
  2. Number of Character Slots Available
  3. Unknown
  4. Unknown

Repeat the next two for each character

  1. Character Code
  2. Character Name

Example Server Exchange:

Client> C(0x0d,0x0a)
Server> C(0x09)1(0x09)16(0x09)1(0x09)1(0x09)J_BLAHUSER_000(0x09)BlueGrass(0x0a)

L Action

Tells the server you want to play a character, server responds with connection info. With this, you can create a character, just put a 0 in place of where you would specify the character code from the C action. The server responds with a PAL format file where 1 line = 1 detail. The keycode in that file should match with the one we received after doing the A action.

Client Sends 2 Details:

  1. Character Code of character to play (0 if new char)
  2. the type of client to use "PLAY" for wizard, "STORM" for StormFront. We use "STORM" in Warlock2, "PLAY" in Warlock-GTK

Server Sends Details

    • Word "OK"? Assuming this means you're cool, and can join that game. The rest seems to be the contents of the PAL file to connect. (Each line it's own detail) I assume it doesn't have to generate these lines in order, or this number of lines BEWARE
  1. UPPORT=5535
  2. GAME=WIZ or GAME=STORM
  3. GAMECODE=DR
  4. FULLGAMENAME=Wizard Front End or StormFront
  5. GAMEFILE=WIZARD.EXE or STORMFRONT.EXE
  6. GAMEHOST=dr.simutronics.net this is the host that we use
  7. GAMEPORT=4901 this is the port that we use
  8. KEY=15352427991eea6e21e8e5f6aae3432c this is the key that we use

HEX CODES -> KEY (0x09) = Tab or \t (0x0d) = CR or \r (carriage return) (0x0a) = LF or \n (new line)

ENDING NOTES

File based off of Sean and Marshal's SGE_INFO file, Will took and reorganized existing information, while adding new things found when using zMUD.