gfxgfx
 
Please login or register.

Login with username, password and session length
 
gfx gfx
gfx
75207 Posts in 13169 Topics by 2632 Members - Latest Member: kmcg3413 June 23, 2017, 03:40:17 pm
*
gfx*gfx
gfx
WinMX World :: Forum  |  Technical  |  Protocol Discussion  |  TCP Encryption
gfx
gfxgfx
 

Author Topic: TCP Encryption  (Read 8147 times)

0 Members and 1 Guest are viewing this topic.

KM

  • Guest
TCP Encryption
« on: May 02, 2005, 05:14:07 pm »
WinMX uses Encryption for primary/secondary and chat connections. The same encryption is used for all protocols.

I could go in to loads of detail about exactly how each bit works, but I cant be bothered (plus its extremely complicated, and I barely understand it) so instead i'll give you a basic overview of it, followed by some example code for one possible implimentation of it.

This can be broken down in to 2 seperate stages:

The first thing you do is negotiate the encryption, during this stage you also set up the connection type so the server knows what type of client you are.
The second stage is once the encryption keys have been set, all communication from that point on is encrypted 1 byte at a time.

Negotiation

First the client connects to the server using a standard TCP connection.

Upon recieving the connection the server sends back a single byte containing 0x31 (or the ascii charecter "1") this basicly identifies that you have in fact connected to a WinMX compatible server.

The client then replies to this by sending up a crypt key, this is a 16 byte chunk of data which contains 2 encryption keys and a connection type. Although the server only cares about the connection type.

The server replies to this with a crypt key of the appropriate type (eg secondary server if the client sent a secondary client) which also contains 2 encryption keys.

The client should then extract these 2 encryption keys from the servers response (as well as checking the response is the right type - although thats not overly important) one key is the key for encrypting the data being sent, and the other is the key for decrypting the data recieved.

Communication

Once the server has given the client a key to use all data past here is encrypted. The encryption basicly consists of encrypting 1 byte of data using that key - this produces a new key which is then used to encrypt the next byte and so on.

From here on you can get away with just dealing with the data correctly for whichever protocol you are using - and just have encryption and decryption done transparently when the data is sent and recieved.

Connection Types

When a crypt key is sent it contains a message type as well as the encryption keys. The message types are:

0x0050 - Primary Client
0x0051 - Primary Server
0x0052 - Secondary Client
0x0053 - Secondary Server
0x0054 - Peer Cache
0x0057 - Chat Client
0x0058 - Chat Server

I'm not sure if any of the others are used - however the gap in the numbering indicates they may be.

How to encrypt/decrypt/deal with the keys/etc

Rather than try and explain the process (which to be honest I have trouble remembering half of the time because its so complicated) here is some (non-ANSI) C source code for you to try and follow:

Thanks to Nushi@2Sn for this.

Code: [Select]
char FCTable[] =
{
     0x00, 0xCA, 0x48, 0x4D, 0xC8, 0x5D, 0x5C, 0x29, 0xB6, 0x30, 0x0E, 0x5A, 0x70, 0xCB, 0x09, 0xD7,0xF2, 0xA0, 0x31, 0x10, 0x2F, 0x5D, 0x4F, 0x94, 0xE6, 0xCF, 0xA2, 0xF1, 0xE8, 0x20, 0xB0, 0x47,0x72, 0x57, 0x77, 0xEC, 0x4E, 0x7D, 0x4E, 0x19, 0x1E, 0x43, 0x1F, 0x6B, 0x05, 0x7C, 0x2E, 0xFE,0xD1, 0xAF, 0xE7, 0x0E, 0x13, 0x71, 0x71, 0x48, 0x31, 0x2F, 0xF2, 0x4F, 0x31, 0x28, 0xBB, 0xC0,0x90, 0x22, 0x1E, 0x1E, 0x46, 0x45, 0xF5, 0xCC, 0x37, 0x4F, 0xDC, 0x5E, 0x4C, 0x30, 0x69, 0x37,0xC2, 0x65, 0x99, 0xD8, 0xE9, 0x2B, 0xDD, 0x8B, 0x7A, 0xDF, 0x38, 0x69, 0x4E, 0xC2, 0xFB, 0xC8,0xA3, 0x79, 0xF2, 0x2E, 0x66, 0xE8, 0x2C, 0xAE, 0xE1, 0x80, 0xE8, 0xFC, 0x1B, 0x9C, 0xCA, 0xF8,0x8D, 0x9D, 0x28, 0x05, 0x34, 0xCC, 0xB3, 0xA1, 0x2E, 0x72, 0xF8, 0x80, 0x63, 0x3C, 0x9A, 0x75,0x61, 0xB5, 0xB8, 0xB1, 0x91, 0x32, 0x3E, 0x20, 0x75, 0x89, 0xC1, 0xFA, 0xB1, 0xAA, 0x17, 0xF9,0xC9, 0xF0, 0xDF, 0xD5, 0x6B, 0xDE, 0xCE, 0x84, 0xA9, 0xFD, 0x81, 0xD4, 0x28, 0x59, 0xCB, 0x91,0x94, 0x52, 0x7B, 0x4D, 0x52, 0xB4, 0xB6, 0x84, 0x79, 0x45, 0x24, 0x16, 0x4A, 0x9A, 0x15, 0x52,0x63, 0xAC, 0x42, 0x36, 0x73, 0xFA, 0x04, 0x33, 0x88, 0x80, 0x35, 0xAB, 0x92, 0x91, 0x52, 0x4A,0x62, 0xB6, 0x92, 0xAC, 0x28, 0x93, 0xD8, 0x70, 0x6C, 0x50, 0x44, 0x2B, 0x32, 0xFE, 0x3C, 0xFB,0x52, 0xDC, 0xA6, 0x31, 0x48, 0x9E, 0x71, 0x95, 0xB0, 0xB0, 0x0A, 0x8E, 0x7D, 0x08, 0x25, 0xE9,0xE6, 0x10, 0x3B, 0x19, 0x96, 0x97, 0x73, 0x90, 0x3C, 0x65, 0xF2, 0xD6, 0xE7, 0xA6, 0xC3, 0x7A,0xC0, 0x66, 0x18, 0x7E, 0x04, 0x05, 0x8B, 0x68, 0xAC, 0x47, 0x33, 0xB8, 0x6F, 0x35, 0xE2, 0x2F,0x71, 0x5C, 0xA4, 0xC8, 0xFA, 0x6D, 0x96, 0x4D, 0x1D, 0x82, 0xE1, 0x5F, 0x5B, 0xCB, 0x11, 0x33,0xA5, 0x48, 0x61, 0xB0, 0x24, 0x2A, 0x98, 0x1D, 0xD2, 0x37, 0xB2, 0x46, 0x06, 0x81, 0x86, 0x69,0x17, 0x6D, 0x15, 0x61, 0x25, 0x5E, 0xE4, 0x4C, 0x3A, 0x06, 0x6B, 0x87, 0x97, 0x3E, 0x5D, 0x9E,0x8E, 0x27, 0x56, 0xE4, 0x96, 0x28, 0x14, 0x03, 0xF7, 0x3F, 0x9C, 0x4C, 0x34, 0x34, 0x00, 0x0A,0xCD, 0x53, 0xDC, 0x55, 0xC2, 0x0C, 0x68, 0x42, 0x67, 0x5F, 0x70, 0xC4, 0x36, 0x90, 0xA3, 0x28,0x80, 0xD6, 0x4B, 0x21, 0xBB, 0x9E, 0x84, 0x5D, 0x42, 0x00, 0xE2, 0xF5, 0x26, 0x7F, 0x94, 0xDF,0x0B, 0x6B, 0x27, 0x0D, 0x23, 0x87, 0x39, 0xC0, 0xBD, 0xBC, 0x1A, 0x6C, 0xAA, 0xFE, 0x3B, 0xA0,0x6D, 0xCE, 0x80, 0xF1, 0x3F, 0xE6, 0x43, 0x96, 0x29, 0xA3, 0x8D, 0xA6, 0x0E, 0xF5, 0x2B, 0xBE,0x8C, 0x33, 0xF9, 0x92, 0x16, 0x69, 0xA2, 0x9A, 0x9E, 0x25, 0xD3, 0x81, 0x63, 0x43, 0xC5, 0x23,0x72, 0x06, 0x64, 0xE1, 0xA6, 0x43, 0xC0, 0x96, 0x30, 0x40, 0xE4, 0xBB, 0x23, 0x47, 0x3A, 0x95,0xED, 0x29, 0x07, 0x93, 0x33, 0xED, 0x46, 0xBD, 0x0C, 0xB9, 0xC2, 0x2F, 0x98, 0xB3, 0x0D, 0x15,0xAE, 0xD0, 0x2C, 0x69, 0x47, 0x0B, 0xD0, 0xE0, 0xFB, 0x70, 0xE7, 0xC3, 0xCE, 0x4A, 0xFE, 0x81,0x3A, 0x07, 0xFF, 0xF2, 0x79, 0x92, 0x9B, 0x0A, 0x11, 0xDC, 0x9F, 0xEF, 0x1C, 0xD4, 0x7C, 0xB0,0xDF, 0x08, 0x62, 0xB2, 0xB7, 0x69, 0x37, 0x36, 0x45, 0x58, 0xCD, 0xBF, 0x5A, 0x01, 0x27, 0xA3,0x58, 0x7B, 0x0C, 0x1C, 0x6E, 0x38, 0xEE, 0x0B, 0x82, 0x05, 0x38, 0x1F, 0x77, 0x0D, 0x4C, 0xCA,0x9B, 0xC4, 0x80, 0x42, 0xF3, 0xEB, 0xAD, 0x63, 0xAC, 0x17, 0x66, 0x39, 0xDD, 0xBE, 0xC6, 0xF9,0x55, 0xA8, 0x2F, 0x0C, 0xA1, 0x6E, 0x16, 0x6F, 0xCD, 0xBB, 0xD1, 0x73, 0xCA, 0x7B, 0x4C, 0xF2,0x9F, 0x29, 0xBE, 0xC1, 0x65, 0x64, 0x61, 0xB6, 0x35, 0x0C, 0x60, 0x00, 0x7F, 0x2C, 0x9B, 0xE1,0x55, 0xAE, 0x93, 0x24, 0x85, 0xD5, 0x20, 0xF4, 0xCB, 0x34, 0x62, 0x66, 0xAE, 0xF2, 0xBE, 0x81,0x91, 0xD8, 0x5B, 0xDE, 0x09, 0x8F, 0x23, 0x4E, 0xA8, 0xE5, 0x96, 0xD3, 0x17, 0x0D, 0x8F, 0xC7,0xD2, 0x5B, 0x7A, 0xA8, 0xFE, 0x98, 0xAB, 0xF0, 0x6A, 0x8A, 0x95, 0x21, 0x16, 0xF9, 0xB9, 0x93,0x96, 0xAF, 0xD4, 0xDC, 0x7F, 0xD9, 0xB4, 0xA5, 0xAD, 0xFC, 0x71, 0x02, 0xDE, 0x18, 0x87, 0xC0,0xD3, 0xB0, 0x59, 0xFA, 0x02, 0xB2, 0xCC, 0xED, 0x80, 0x14, 0x1D, 0xF1, 0x02, 0xBB, 0x7C, 0xB5,0x4A, 0x81, 0x11, 0x62, 0x42, 0xEC, 0xC0, 0xF3, 0x39, 0x4E, 0x4A, 0xEF, 0xA8, 0x8B, 0x88, 0xBF,0xC2, 0x4C, 0x8A, 0x19, 0xB0, 0xC6, 0x49, 0x5F, 0x4B, 0xC8, 0xF0, 0x2A, 0xFA, 0x74, 0xBC, 0x83,0x1F, 0xDB, 0xF1, 0x75, 0x9B, 0x8D, 0x2D, 0x78, 0x83, 0xE2, 0xD7, 0x63, 0xA4, 0x5A, 0x92, 0xC5,0xD5, 0x9E, 0x57, 0x59, 0xE4, 0x48, 0x0E, 0xBB, 0x70, 0x3F, 0x46, 0x49, 0x55, 0x49, 0xF3, 0xDB,0x22, 0x33, 0x2B, 0xD4, 0x87, 0x4A, 0x6F, 0x1E, 0xFC, 0x16, 0x0F, 0x9B, 0xD9, 0xD0, 0x21, 0x9F,0xA3, 0x55, 0x0C, 0x6B, 0x0F, 0x2F, 0x20, 0x44, 0xBC, 0xD1, 0x22, 0xEA, 0xCE, 0x71, 0x25, 0x8E,0x7A, 0x4B, 0x6B, 0x24, 0xA2, 0x4B, 0xE8, 0x2A, 0x5D, 0x2C, 0x74, 0x6E, 0x8D, 0xCE, 0x74, 0x01,0xEC, 0x79, 0x09, 0xE7, 0xF7, 0xF8, 0xE9, 0x56, 0xC3, 0xB4, 0xD2, 0x29, 0x26, 0x3B, 0x85, 0x5F,0x9D, 0x1D, 0x88, 0x70, 0x20, 0x08, 0x55, 0x1B, 0xEF, 0x41, 0x17, 0x11, 0x7B, 0x97, 0x83, 0x65,0x5A, 0x56, 0xBA, 0x6D, 0xA9, 0xBC, 0xE2, 0x88, 0x50, 0xE2, 0x0A, 0x54, 0xB2, 0x83, 0xA7, 0xAB,0x91, 0x8C, 0x52, 0x44, 0x26, 0x22, 0x03, 0xC6, 0x5E, 0x91, 0x36, 0xB7, 0xAC, 0xFF, 0xF0, 0x39,0x93, 0x59, 0x18, 0xAB, 0xA5, 0xAE, 0x58, 0xFA, 0x8C, 0x29, 0xED, 0xFE, 0x4D, 0x64, 0xD7, 0xB6,0x66, 0x1B, 0xBF, 0xEC, 0x38, 0xBF, 0x14, 0xBD, 0xD9, 0x67, 0xC2, 0x37, 0x8B, 0x60, 0x17, 0x18,0x68, 0x21, 0xB7, 0xCE, 0xEF, 0xDD, 0x26, 0x5D, 0x3E, 0x05, 0x7F, 0xD2, 0x20, 0xAB, 0x91, 0x6A,0x18, 0x40, 0xA7, 0x6C, 0xF2, 0xD3, 0xE0, 0xCF, 0x69, 0x39, 0x4E, 0x6E, 0x2A, 0xCF, 0xCA, 0x2F,0x2C, 0xBE, 0x39, 0x9A, 0x3E, 0xAC, 0x8C, 0x91, 0x7A, 0xA2, 0x41, 0xDF, 0x25, 0x52, 0x53, 0xF4,0x15, 0x56, 0xDE, 0x1A, 0x20, 0x89, 0x9F, 0xD3, 0x29, 0x6A, 0x28, 0x37, 0x2F, 0xD7, 0xD6, 0x17,0xFE, 0x8E, 0x1A, 0xCD, 0x45, 0x9D, 0x76, 0xEB, 0x54, 0x3F, 0x86, 0x92, 0x6F, 0xE8, 0xFF, 0x72,0x01, 0xD2, 0x6D, 0x10, 0x95, 0xF1, 0xA1, 0x8A, 0xF1, 0x3C, 0xAF, 0x66, 0xA6, 0xE4, 0x02, 0x6A,0x19, 0x68, 0xFE, 0xA8, 0x07, 0xD6, 0xFD, 0xFB, 0xCA, 0x78, 0x67, 0x3E, 0xC4, 0x3E, 0x66, 0xEE,0x0C, 0x96, 0x2D, 0x97, 0x6C, 0xC0, 0xD1, 0x9F, 0x9D, 0xA1, 0x30, 0x4B, 0xCB, 0x8F, 0x32, 0x11,0x64, 0x25, 0x34, 0xBC, 0x61, 0x6E, 0x59, 0xB8, 0x4B, 0xA1, 0x21, 0x51, 0x9A, 0x8A, 0x1F, 0xFD,0x8B, 0x10, 0xF6, 0xED, 0x1C, 0x38, 0x56, 0x2D, 0x49, 0x11, 0xAB, 0xF5, 0xFC, 0xFD, 0xC8, 0x6C,0xC0, 0x36, 0x82, 0x7E, 0x3A, 0xCD, 0x5B, 0xB4, 0xD5, 0xA5, 0xD9, 0x0C, 0xFD, 0x88, 0x7B, 0xDD,0xBC, 0x55, 0x49, 0x70, 0x8A, 0x59, 0x29, 0x2E, 0xFF, 0xC3, 0xA2, 0xFF, 0xE2, 0xA9, 0x13, 0x0B,0xB6, 0xA9, 0x07, 0x76, 0x14, 0x11, 0xB9, 0x89, 0xC5, 0x9B, 0x47, 0x15, 0x6A, 0x1A, 0xF8, 0x32,0x5F, 0x93, 0x9D, 0xB4, 0x0C, 0xC4, 0x65, 0xC7, 0x1B, 0x4F, 0x92, 0x85, 0xAD, 0x02, 0xAA, 0x62,0x93, 0x7C, 0x01, 0x27, 0x3F, 0xB5, 0xBB, 0x07, 0x13, 0x52, 0xC8, 0x42, 0xF8, 0x37, 0xBC, 0x30,0x4D, 0x75, 0x48, 0xDD, 0x59, 0xAE, 0xA6, 0x38, 0xCC, 0xB1, 0xB7, 0x47, 0x7C, 0xC9, 0x67, 0x38,0x01, 0xF7, 0x00, 0x58, 0xC7, 0x67, 0x4F, 0xA2, 0xBF, 0x2B, 0xD2, 0xEC, 0xC3, 0x42, 0xE5, 0x78,0x18, 0xC7, 0x12, 0x86, 0xB4, 0x28, 0x7D, 0x16, 0x9B, 0xE6, 0xF3, 0x0D, 0x74, 0x30, 0x30, 0x12,0xF0, 0xE1, 0xEC, 0x02, 0xDD, 0xCD, 0x3A, 0x90, 0xE1, 0x51, 0xFF, 0xD4, 0x70, 0x7D, 0xF3, 0x87,0x8F, 0x49, 0x98, 0xC4, 0x83, 0x13, 0x2B, 0x79, 0xC5, 0x11, 0xB9, 0xB2, 0x45, 0x35, 0x6E, 0x99,0x5C, 0xA7, 0x21, 0x99, 0x73, 0x7B, 0x19, 0x01, 0xB8, 0x1E, 0x3F, 0x1A, 0x57, 0x9F, 0x7D, 0xFC,0xD0, 0x0F, 0x49, 0x55, 0xF2, 0x37, 0x7A, 0x18, 0x1C, 0xE0, 0x14, 0xE5, 0xCC, 0x7C, 0x24, 0x94,0xE8, 0xE9, 0x04, 0xDA, 0x65, 0x09, 0xA4, 0xA9, 0x6C, 0x26, 0x6C, 0x03, 0x0A, 0x82, 0xCC, 0x88,0xD9, 0x64, 0x03, 0x9C, 0x2B, 0x0E, 0xA9, 0x9D, 0x40, 0x20, 0xCB, 0xE6, 0x3C, 0x70, 0xD8, 0x85,0x7F, 0x99, 0x46, 0xF7, 0x67, 0xA4, 0xBA, 0xF3, 0xF9, 0x71, 0x91, 0x3C, 0x5A, 0xAA, 0x74, 0xDB,0xCF, 0xD7, 0x78, 0x52, 0x5F, 0x4E, 0x9D, 0xAE, 0x03, 0xA7, 0x51, 0x04, 0x12, 0x2A, 0xE3, 0x61,0x40, 0x85, 0x7B, 0x3D, 0xE9, 0xEF, 0x6F, 0xFF, 0x60, 0x74, 0x35, 0x76, 0x0D, 0x87, 0x3D, 0xCD,0x5E, 0xF7, 0x37, 0xE8, 0x84, 0x75, 0x37, 0x91, 0xED, 0x62, 0xF7, 0x84, 0x2A, 0x45, 0xA7, 0x61,0x78, 0x1B, 0xCD, 0xE0, 0xDE, 0xA3, 0xD0, 0xB8, 0x1A, 0x90, 0x39, 0x53, 0xB3, 0x8D, 0x8E, 0x9B,0x5D, 0x02, 0x31, 0xC9, 0x87, 0x8E, 0x55, 0x7D, 0x51, 0xBC, 0xDB, 0xAF, 0x07, 0xC6, 0x64, 0x57,0x5D, 0x54, 0x5F, 0x35, 0xD4, 0x27, 0xD1, 0x86, 0xC8, 0xE5, 0x3A, 0x3A, 0x12, 0x83, 0x4C, 0x6D,0x57, 0xDF, 0xC6, 0x22, 0x41, 0x18, 0xB5, 0xC3, 0x32, 0xB6, 0x34, 0x97, 0xC1, 0x6C, 0xA5, 0xE7,0x68, 0x24, 0xDE, 0x9D, 0xCA, 0xF8, 0xE1, 0x2C, 0x73, 0xE0, 0x72, 0x6F, 0xB8, 0xEE, 0x19, 0x3F,0x5C, 0x8F, 0x62, 0xD0, 0x33, 0x95, 0xEA, 0x1C, 0xDD, 0xF3, 0x7E, 0x40, 0xD4, 0x04, 0x3E, 0xB5,0x28, 0x16, 0x11, 0xBA, 0x38, 0x0E, 0x82, 0x73, 0xBE, 0xA6, 0x7F, 0x82, 0x2B, 0x1F, 0xF6, 0xE9,0x53, 0x39, 0x70, 0xFF, 0xB5, 0x0D, 0xDD, 0x06, 0x47, 0xC8, 0xD0, 0xD0, 0xCF, 0xDD, 0x85, 0x7F,0xFB, 0x57, 0x03, 0xE3, 0xAA, 0xE4, 0xDE, 0x2E, 0xE0, 0x73, 0xB4, 0x46, 0xEE, 0xE9, 0x40, 0xD5,0x1E, 0x07, 0xFE, 0x13, 0xBE, 0xCC, 0xB2, 0xD9, 0xA3, 0xC0, 0x9F, 0x20, 0xD0, 0xAF, 0xC1, 0xCA,0x39, 0xD7, 0x93, 0x00, 0xE3, 0xF3, 0x6D, 0x43, 0xA1, 0xF3, 0x8D, 0x25, 0x35, 0xC5, 0x8B, 0x3B,0x3B, 0x02, 0x33, 0x98, 0x77, 0xEC, 0xE0, 0x73, 0x36, 0x2D, 0x72, 0x7C, 0xD1, 0xF6, 0x9E, 0x14,0x5C, 0xBD, 0xCF, 0xEE, 0xD3, 0xB7, 0x8D, 0xA7, 0x8F, 0xCA, 0x8E, 0x1C, 0xB7, 0x7E, 0x1C, 0x35,0x0A, 0x7E, 0x56, 0x58, 0x6D, 0x9B, 0xE7, 0x49, 0x2E, 0x1A, 0xE6, 0xB7, 0x7D, 0x42, 0xC4, 0x22,0x81, 0xE6, 0x05, 0x71, 0xE5, 0xA0, 0x57, 0x5B, 0xC6, 0x6C, 0xAD, 0x09, 0x4F, 0x84, 0x65, 0x5A,0x66, 0x24, 0xA4, 0xF7, 0x2A, 0xE2, 0xC2, 0x1A, 0xC6, 0x1B, 0x10, 0xE2, 0x9C, 0xB6, 0xFC, 0xED,0xA0, 0x57, 0xD6, 0xE0, 0x06, 0x5A, 0x20, 0xDF, 0x7D, 0xB2, 0xBC, 0xA0, 0xEA, 0x76, 0x35, 0x4B,0xEA, 0x86, 0x9C, 0x34, 0x21, 0x7A, 0xF4, 0x7B, 0xD0, 0x6B, 0xEA, 0xDC, 0xA5, 0xCD, 0xC9, 0x4A,0xF8, 0x69, 0xA1, 0xBD, 0xB6, 0xC1, 0x77, 0x6E, 0x17, 0xD6, 0xC7, 0x09, 0xBA, 0x23, 0x97, 0x3A,0x52, 0xA8, 0xD7, 0xAD, 0xF3, 0x3A, 0x2F, 0x58, 0x4A, 0xA5, 0xDF, 0x0E, 0xDB, 0x07, 0x90, 0x11,0xC9, 0xF4, 0x45, 0x3F, 0x37, 0xFE, 0x0B, 0xD6, 0xF5, 0x03, 0xE6, 0xFE, 0x33, 0xB7, 0x9D, 0x7A,0x1D, 0x39, 0xC7, 0x83, 0x2D, 0xD8, 0xB8, 0xDA, 0x48, 0x50, 0xF4, 0xBA, 0x9A, 0x54, 0x08, 0x3E,0x06, 0xEA, 0xF1, 0x0F, 0xD6, 0x7A, 0xB6, 0x50, 0x19, 0x9B, 0x02, 0x59, 0x6A, 0x98, 0x2E, 0x06,0xB3, 0x09, 0x76, 0x3A, 0x5B, 0xF9, 0x79, 0xD1, 0x51, 0xD9, 0x33, 0x2B, 0x1D, 0x87, 0x4A, 0x79,0xDE, 0x13, 0x4D, 0xE8, 0xF4, 0x8E, 0xC0, 0x55, 0xE1, 0x97, 0x89, 0x12, 0x0D, 0xEE, 0x58, 0x6D,0x90, 0xAB, 0xAA, 0xF9, 0x3D, 0x53, 0x77, 0x25, 0xA7, 0xD0, 0xBE, 0xAD, 0x4C, 0x0B, 0xA6, 0xD8,0x07, 0x4A, 0x0F, 0xF5, 0xFC, 0x94, 0x12, 0x12, 0x1A, 0x90, 0xB0, 0x5A, 0xBD, 0x16, 0x8F, 0xAA,0x16, 0xAD, 0x50, 0x60, 0xEE, 0xE8, 0x1D, 0x97, 0x78, 0xC7, 0x2E, 0x7C, 0x9F, 0x9A, 0xDD, 0xF8,0xBA, 0xEC, 0xE8, 0x76, 0x79, 0xFA, 0x1A, 0xC2, 0x8D, 0x4D, 0xD9, 0x06, 0xB5, 0x15, 0x25, 0x74,0xF6, 0x73, 0x4B, 0x77, 0xDC, 0xDC, 0x0F, 0x29, 0x7C, 0x53, 0xA1, 0xD0, 0x9E, 0x81, 0x43, 0xC1,0xC7, 0xCA, 0x9C, 0xCF, 0x21, 0xF8, 0xD5, 0xD3, 0x02, 0x2E, 0x12, 0x62, 0x49, 0x03, 0xD4, 0x68,0xFB, 0xF1, 0x61, 0xE8, 0xFF, 0x60, 0xE0, 0xA9, 0x38, 0xDA, 0x30, 0x31, 0xBF, 0x50, 0x41, 0x98,0xCF, 0x17, 0xAD, 0xD9, 0xE9, 0xC5, 0x10, 0xA4, 0xE5, 0xBB, 0x5C, 0x54, 0xAD, 0x9F, 0xAF, 0x27,0xA2, 0x3D, 0x4B, 0x8B, 0x05, 0xDB, 0xCD, 0x87, 0x57, 0x61, 0xCF, 0xCF, 0x2C, 0x5F, 0x3D, 0x5E,0x89, 0x21, 0x83, 0xDD, 0x41, 0xDB, 0xFC, 0x99, 0xAB, 0x17, 0xBB, 0x45, 0x4D, 0xA6, 0xFC, 0xB5,0xE0, 0xE7, 0x5D, 0x67, 0xB2, 0x98, 0x1B, 0xE1, 0xEF, 0x46, 0xFB, 0x4A, 0xAB, 0x3D, 0xCB, 0x8C,0xC6, 0xB7, 0x89, 0xF0, 0x44, 0xD4, 0xE9, 0x89, 0x40, 0xFB, 0x08, 0x2B, 0xA8, 0x19, 0x3E, 0x67,0x4F, 0xBF, 0x60, 0x72, 0x9C, 0xA2, 0x79, 0xAC, 0xDB, 0x0B, 0x3C, 0xC9, 0x8E, 0x3A, 0x81, 0xC2,0x14, 0x76, 0x6E, 0xCB, 0xF6, 0x83, 0xEE, 0x77, 0x12, 0x5C, 0x00, 0x43, 0xF9, 0xBA, 0xDA, 0x3C,0x1A, 0xB8, 0xAB, 0x39, 0x88, 0x95, 0x32, 0xC8, 0x0D, 0x66, 0x16, 0xFB, 0x56, 0x4F, 0xE4, 0x1D,0x7B, 0xAD, 0xFA, 0x4F, 0x4E, 0xD9, 0xC4, 0xB4, 0x8A, 0x41, 0xB1, 0x6A, 0x1F, 0x1F, 0xE3, 0x32,0xB8, 0x95, 0x68, 0xB9, 0xBC, 0xC0, 0x73, 0x08, 0x42, 0xB5, 0x0E, 0xA1, 0xE6, 0x85, 0x53, 0xAF,0x03, 0x61, 0x13, 0x4B, 0x9D, 0xD1, 0xD9, 0xF7, 0xF8, 0xEB, 0x32, 0x1F, 0x0B, 0x14, 0xC5, 0xD5,0x23, 0x61, 0x59, 0xE2, 0xDA, 0x0C, 0xA0, 0x30, 0x74, 0x6F, 0xB2, 0xE3, 0x3D, 0x9A, 0x9A, 0x25,0x89, 0x13, 0x90, 0xD1, 0x32, 0xFA, 0x6C, 0x9E, 0xB9, 0x93, 0x4D, 0xA6, 0xF4, 0xEE, 0xFD, 0x28,0x58, 0x15, 0xB0, 0x24, 0xFD, 0x99, 0x7C, 0xD6, 0xA7, 0xB8, 0x44, 0x51, 0x4C, 0x9F, 0x06, 0x46,0x19, 0xFF, 0xC1, 0x83, 0xB2, 0xE3, 0x36, 0x4E, 0xE3, 0xC9, 0x05, 0x7F, 0x95, 0x1E, 0xA0, 0x8C,0x7E, 0x25, 0x5A, 0x9E, 0x8E, 0xE1, 0xA0, 0x80, 0x14, 0xC9, 0x5E, 0xA3, 0x50, 0x15, 0xB5, 0x08,0xEE, 0xF4, 0xEC, 0xE2, 0x46, 0xDA, 0x69, 0x75, 0xFD, 0x94, 0xAA, 0x4F, 0x90, 0x6A, 0xF7, 0x4C,0x15, 0xFD, 0xED, 0x07, 0xBA, 0xFC, 0x95, 0xCA, 0x22, 0xBF, 0x47, 0x32, 0x48, 0xC3, 0x22, 0xB6,0x08, 0x91, 0x78, 0x36, 0xA0, 0x12, 0x87, 0xAA, 0x87, 0xDE, 0xD4, 0xC6, 0x05, 0x92, 0x7E, 0x96,0xC4, 0x4C, 0xBD, 0x8A, 0x9E, 0xA2, 0x05, 0xEE, 0x60, 0x12, 0xF5, 0xA5, 0x3D, 0xDE, 0x75, 0x8C,0xB1, 0x3C, 0xAF, 0xD1, 0xC3, 0x55, 0xA5, 0xF6, 0x62, 0x51, 0x54, 0x64, 0xD6, 0x0A, 0x50, 0x50,0xE7, 0xB3, 0x04, 0x45, 0x97, 0x72, 0x91, 0x05, 0x1E, 0x54, 0x1B, 0x26, 0xC0, 0x23, 0x60, 0x54,0x53, 0x2E, 0xF0, 0x8D, 0xA4, 0xF2, 0x9E, 0xAA, 0x98, 0x36, 0x57, 0x22, 0xDA, 0xD3, 0x23, 0x5C,0x13, 0x92, 0x84, 0x60, 0xDF, 0x32, 0x02, 0xEF, 0x68, 0x9D, 0xE1, 0x02, 0x04, 0x80, 0xA3, 0x1E,0x51, 0xED, 0x2D, 0x74, 0x00, 0x7D, 0x2C, 0x9C, 0x82, 0xE1, 0xEE, 0x31, 0x53, 0xC6, 0x99, 0x0F,0xEB, 0xE7, 0x6A, 0x3C, 0xFF, 0x1C, 0x6F, 0xCE, 0xE2, 0x49, 0xC5, 0x86, 0x0F, 0x5C, 0x66, 0x33,0xC1, 0x10, 0x1C, 0x2D, 0xE5, 0x4E, 0x72, 0xBC, 0x75, 0x46, 0x8C, 0xDB, 0x72, 0x1A, 0xA5, 0x95,0x6F, 0x78, 0xF1, 0xCC, 0x3C, 0xA9, 0xF9, 0xB3, 0x3B, 0x44, 0x86, 0x0D, 0x09, 0xCF, 0xEF, 0xA2,0x8C, 0x26, 0x64, 0xCE, 0xFA, 0x88, 0xF5, 0xCC, 0xED, 0x7F, 0xB3, 0xF8, 0x76, 0x79, 0x1E, 0x07,0x34, 0xAA, 0x4A, 0xF0, 0x5F, 0xC8, 0x47, 0x65, 0xF4, 0xBA, 0x4E, 0x57, 0x8A, 0xF5, 0xEB, 0x8D,0x2E, 0xCE, 0x88, 0x1B, 0x04, 0xE5, 0x84, 0xC1, 0xA2, 0x48, 0xDB, 0xBA, 0xA6, 0x1D, 0x94, 0x3E,0x1B, 0x1C, 0x70, 0x7D, 0x94, 0xB8, 0xFD, 0xB1, 0x84, 0x72, 0x2A, 0xB7, 0xAF, 0x5E, 0x1D, 0xE4,0xF0, 0xE3, 0x8F, 0x0A, 0x01, 0xDD, 0xBA, 0x41, 0x99, 0x99, 0x28, 0x3D, 0xE3, 0xBA, 0x6C, 0xB3,0x58, 0x19, 0xFA, 0xF4, 0xD1, 0xFF, 0x5A, 0xFD, 0x76, 0x58, 0xC6, 0x77, 0xA4, 0xE0, 0xF9, 0xC9,0x89, 0xB9, 0x94, 0x0B, 0x7E, 0x04, 0xCE, 0x8A, 0x31, 0x35, 0xBD, 0xDA, 0x30, 0xD1, 0x01, 0x20,0x85, 0x6F, 0xA8, 0x52, 0xCE, 0x62, 0xEA, 0x89, 0x5E, 0x73, 0x29, 0x9F, 0x67, 0x5E, 0x0D, 0xF2,0x82, 0xE4, 0xE6, 0x8F, 0x7E, 0xC4, 0xAE, 0xA2, 0xDA, 0x77, 0xE5, 0xF6, 0x62, 0xD8, 0x9B, 0x5B,0x86, 0xA3, 0x48, 0xC2, 0x9C, 0x23, 0x2A, 0x5D, 0x49, 0x63, 0x0B, 0x7E, 0x43, 0xF0, 0x6D, 0x41,0xCD, 0x84, 0x54, 0x53, 0x56, 0xB0, 0x13, 0x15, 0x83, 0xFB, 0xB5, 0x10, 0x2B, 0xA4, 0x6E, 0xC5,0x36, 0xB2, 0x5B, 0xFC, 0x54, 0x6E, 0x31, 0x26, 0x6E, 0x4C, 0x79, 0x7D, 0x77, 0x00, 0x50, 0xAD,0x10, 0x77, 0x69, 0x74, 0x61, 0x27, 0xD3, 0x08, 0x2C, 0xB1, 0xBF, 0x93, 0xCC, 0x6B, 0x55, 0xD7,0x84, 0x75, 0x8E, 0x7B, 0xD7, 0x1E, 0x7A, 0xEB, 0xF0, 0x84, 0x85, 0x8F, 0x81, 0x01, 0x38, 0x03,0x1F, 0x4D, 0x97, 0x90, 0x29, 0xB1, 0x5D, 0x85, 0xE7, 0x14, 0xF4, 0x5B, 0x11, 0x5B, 0xA3, 0x3B,0x41, 0x56, 0x9E, 0x2C, 0x69, 0x19, 0xEF, 0x6B, 0xA0, 0x9C, 0x5E, 0xA3, 0x3E, 0xE3, 0xD2, 0x40,0xBB, 0xB3, 0xB6, 0x88, 0xB7, 0x77, 0xB4, 0x8D, 0x3F, 0xAB, 0xBF, 0x17, 0x6D, 0x63, 0x5A, 0x13,0x35, 0xC2, 0xD3, 0x64, 0xD8, 0x68, 0x24, 0x04, 0xFE, 0x5F, 0x75, 0xF3, 0x00, 0x6A, 0xCC, 0x6F,0xE0, 0x44, 0xF8, 0x50, 0x27, 0xA1, 0x6A, 0xC4, 0x10, 0xF0, 0x4F, 0x80, 0x2D, 0x5B, 0xEB, 0xBC,0x2F, 0x26, 0x5F, 0x94, 0x44, 0xDA, 0x54, 0xC5, 0x88, 0x8C, 0x7F, 0x98, 0x50, 0xA0, 0x10, 0x14,0x2D, 0x1F, 0x18, 0x40, 0x81, 0x18, 0x2A, 0xBB, 0x00, 0x5D, 0x07, 0x49, 0xCB, 0x03, 0x01, 0x57,0x27, 0x3E, 0x1F, 0x82, 0x54, 0xF4, 0x1E, 0x28, 0x99, 0x31, 0x0A, 0x9B, 0xB5, 0x66, 0x45, 0x92,0xD4, 0x36, 0x78, 0xB2, 0x18, 0xCC, 0xE3, 0xE5, 0x11, 0xF6, 0xC9, 0x7C, 0xF1, 0xB9, 0x8C, 0xA4,0x92, 0x96, 0x58, 0x3D, 0x6E, 0xCB, 0x65, 0x01, 0xD7, 0xA5, 0xBD, 0xEA, 0xF7, 0xBD, 0x1C, 0xA7,0xC9, 0x31, 0x90, 0x09, 0xDF, 0x68, 0xF6, 0xE9, 0x97, 0xD3, 0x83, 0x00, 0xB9, 0xED, 0xB7, 0xEA,0x6B, 0x65, 0xC9, 0x04, 0x24, 0x1C, 0xE9, 0xD7, 0xD6, 0x0E, 0xA9, 0x9D, 0xB4, 0x31, 0x06, 0xA5,0x7B, 0x6D, 0xDC, 0xDE, 0xEA, 0x3B, 0x22, 0xA8, 0xEB, 0x00, 0x26, 0xBE, 0x9F, 0x46, 0xDB, 0x72,0xBB, 0x63, 0xAC, 0x53, 0x8F, 0x1D, 0x42, 0x71, 0xF5, 0x2F, 0xCA, 0x7B, 0x64, 0xD2, 0xCE, 0xDC,0x92, 0x96, 0xA9, 0x68, 0x30, 0x42, 0x3C, 0x18, 0x95, 0x76, 0x67, 0x2A, 0xB3, 0x5A, 0x87, 0x17,0x9A, 0x70, 0x23, 0x5E, 0x08, 0x09, 0x40, 0xD9, 0x99, 0x2E, 0x8A, 0x0C, 0x86, 0x6F, 0xA8, 0x21,0x6B, 0x86, 0x93, 0x44, 0x75, 0x06, 0x96, 0x64, 0xD8, 0x67, 0x73, 0xB3, 0xE4, 0x0A, 0x8B, 0xA6,0x5B, 0xEB, 0x63, 0xB0, 0x76, 0xC5, 0x63, 0xD8, 0xAE, 0x9C, 0xED, 0xB9, 0xF3, 0xDF, 0x3F, 0xDE,0x85, 0xF5, 0xB1, 0x26, 0x25, 0x60, 0x76, 0xE5, 0xAA, 0x3D, 0x80, 0x2C, 0xB9, 0x2A, 0x41, 0x78,0x8B, 0x78, 0xD8, 0xAC, 0xEC, 0xF7, 0x89, 0x63, 0x27, 0x51, 0x3D, 0x5C, 0xE2, 0x21, 0x5C, 0x48,0x43, 0xE7, 0xC7, 0x35, 0x43, 0xD5, 0xEB, 0x60, 0x24, 0xBE, 0x19, 0x1B, 0xA9, 0x7A, 0xC3, 0xA0,0xB0, 0x24, 0x0D, 0xCD, 0xC8, 0xC1, 0x34, 0xA7, 0x47, 0x22, 0xDA, 0x48, 0x74, 0x88, 0xF7, 0x7F,0xD5, 0xF2, 0x5F, 0x34, 0x08, 0x47, 0x97, 0x8F, 0x37, 0x2C, 0xB8, 0xE6, 0x4F, 0xFC, 0x8A, 0x43,0xAB, 0xAC, 0x95, 0xE6, 0x59, 0x44, 0x1B, 0xC3, 0xB4, 0x85, 0xFA, 0xBF, 0x03, 0xC2, 0xB3, 0xE7,0xF1, 0x01, 0x26, 0x2D, 0x71, 0x2B, 0x09, 0x4E, 0x98, 0x74, 0xAC, 0xCB, 0x0E, 0x8B, 0xAC, 0x8E,0x09, 0x04, 0x16, 0x71, 0xE8, 0x38, 0x08, 0x56, 0x0F, 0x8A, 0x42, 0xB1, 0xD2, 0xEA, 0xEF, 0x47,0xDC, 0x3B, 0x3B, 0xAF, 0xB1, 0x0A, 0x75, 0x1D, 0xEC, 0x0F, 0x53, 0x14, 0xC4, 0x94, 0x44, 0x05,0x21, 0xC3, 0x6B, 0xFD, 0xC5, 0x8B, 0xD5, 0x30, 0x0B, 0x20, 0x45, 0x38, 0x4B, 0xF9, 0x4D, 0xC7,0x65, 0x62, 0xA8, 0x3F, 0xF6, 0xF6, 0x52, 0x34, 0x0A, 0xEA, 0x81, 0x23, 0xF5, 0x4B, 0x36, 0x16,0x59, 0x12, 0x51, 0x5C, 0xEB, 0xB4, 0xC3, 0x9C, 0x94, 0x3A, 0x7E, 0xF6, 0x22, 0x8C, 0xB1, 0x51,0xC7, 0x6C, 0x0C, 0x56, 0x7C, 0x2D, 0x7D, 0xD2, 0xAF, 0x0F, 0xC8, 0xE4, 0xAF, 0x8D, 0xD5, 0x13,0xF9, 0xC7, 0x15, 0x27, 0xE4, 0x41, 0xCF, 0x65, 0xDC, 0x82, 0xAE, 0xA1, 0xBD, 0xF1, 0x43, 0x9A,0x60, 0xBD, 0x29, 0xE3, 0xD3, 0x7E, 0xDF, 0x66, 0x3B, 0x34, 0xD6, 0x23, 0x71, 0x4D, 0xAE, 0x41,0xC1, 0xC1, 0x82, 0xD2, 0x80, 0xEF, 0x5E, 0x79, 0x86, 0x89, 0xEC, 0x1F, 0x93, 0xA8, 0x6A, 0xC6,0x44, 0xA7, 0xDA, 0xA9, 0x0E, 0xFB, 0x40, 0x82, 0xDB, 0xA4, 0xE5, 0x0E, 0xBE, 0x58, 0x51, 0xAE,0xD8, 0xE9, 0x27, 0xB9, 0x46, 0x2D, 0x98, 0x8B, 0x69, 0x33, 0xC4, 0x0F, 0x56, 0x86, 0x0B, 0x7A,0x64, 0xD2, 0xFB, 0xA4, 0x15, 0xD4, 0x68, 0x3B, 0x78, 0xD5, 0x2F, 0x67, 0x39, 0xAD, 0x06, 0x59,0xBF, 0x32, 0x63, 0xEB, 0x10, 0xEF, 0x99, 0x45, 0xA1, 0x40, 0x3F, 0xBE, 0xD7, 0x7F, 0x9A, 0xCB,0xA7
};
char MXTCPTable_0[256] =
{
     0x3F, 0xAF, 0x25, 0x93, 0xBD, 0xB4, 0x23, 0xF3, 0x55, 0xB9, 0xC5, 0xAD, 0x31, 0xB1, 0x8B, 0x48,0x2E, 0x27, 0xB6, 0xDD, 0xD6, 0x74, 0x99, 0xEF, 0x5C, 0x19, 0x90, 0x46, 0x59, 0xFC, 0x7D, 0xAB,0x52, 0x5B, 0x5D, 0x07, 0x33, 0xF4, 0x12, 0x15, 0x82, 0x26, 0x0E, 0xB8, 0x62, 0x4A, 0xFA, 0xEE,0x69, 0x3A, 0x06, 0x57, 0x0A, 0x72, 0xF9, 0x2D, 0x9B, 0x35, 0x28, 0xC9, 0xE2, 0x88, 0xF0, 0xEB,0x21, 0x49, 0x4B, 0x44, 0x18, 0x2A, 0x13, 0xE1, 0x95, 0x60, 0x36, 0xE3, 0x0D, 0x84, 0xFF, 0xBE,0xA6, 0xE6, 0x20, 0x6C, 0x8F, 0x71, 0x37, 0xD7, 0x50, 0xC6, 0xF7, 0x65, 0xFE, 0x75, 0xA9, 0x0C,0xD9, 0xEA, 0x0B, 0x64, 0xF8, 0x70, 0x6B, 0x4D, 0xAE, 0x83, 0xEC, 0x6F, 0x6D, 0xBF, 0xD8, 0xE4,0xBB, 0x4F, 0x42, 0xDC, 0x6E, 0x02, 0x98, 0xDA, 0x22, 0x24, 0xC1, 0x53, 0xD2, 0x3C, 0x38, 0xE5,0x17, 0x0F, 0x9A, 0x1C, 0x78, 0x81, 0x45, 0x7E, 0x3B, 0x86, 0xA1, 0x97, 0x5F, 0x73, 0x1B, 0x94,0xF2, 0xD1, 0x43, 0xCE, 0x7C, 0xA5, 0xFD, 0x11, 0x58, 0x7B, 0x91, 0x01, 0x7F, 0x76, 0xDF, 0x77,0xE0, 0x9F, 0xBC, 0x7A, 0xCF, 0x30, 0xA4, 0x32, 0x34, 0x9C, 0x54, 0xCA, 0x3D, 0xE7, 0x56, 0x89,0x08, 0xB2, 0x6A, 0x67, 0x16, 0xDB, 0xC7, 0xE8, 0x03, 0xED, 0x40, 0x1F, 0x63, 0xD0, 0xF6, 0x61,0x9D, 0x8A, 0x9E, 0xB5, 0x29, 0x47, 0xC8, 0x1A, 0x8E, 0x80, 0x5A, 0xCC, 0x68, 0x2C, 0xD4, 0xDE,0xC4, 0x39, 0xA2, 0x4E, 0x79, 0x1E, 0xA8, 0xCD, 0xA0, 0xD3, 0x96, 0xF5, 0xB0, 0x66, 0x05, 0x00,0xF1, 0xAC, 0xC2, 0xE9, 0xD5, 0x85, 0x04, 0xA3, 0x51, 0xFB, 0x8D, 0x09, 0x2B, 0x4C, 0x5E, 0xBA,0x10, 0x41, 0xB3, 0x92, 0xA7, 0x87, 0x3E, 0x8C, 0xC3, 0xB7, 0xAA, 0x2F, 0x14, 0x1D, 0xCB, 0xC0
};
char MXTCPTable_1[256] =
{
     0xDF, 0x9B, 0x75, 0xB8, 0xE6, 0xDE, 0x32, 0x23, 0xB0, 0xEB, 0x34, 0x62, 0x5F, 0x4C, 0x2A, 0x81,0xF0, 0x97, 0x26, 0x46, 0xFC, 0x27, 0xB4, 0x80, 0x44, 0x19, 0xC7, 0x8E, 0x83, 0xFD, 0xD5, 0xBB,0x52, 0x40, 0x78, 0x06, 0x79, 0x02, 0x29, 0x11, 0x3A, 0xC4, 0x45, 0xEC, 0xCD, 0x37, 0x10, 0xFB,0xA5, 0x0C, 0xA7, 0x24, 0xA8, 0x39, 0x4A, 0x56, 0x7E, 0xD1, 0x31, 0x88, 0x7D, 0xAC, 0xF6, 0x00,0xBA, 0xF1, 0x72, 0x92, 0x43, 0x86, 0x1B, 0xC5, 0x0F, 0x41, 0x2D, 0x42, 0xED, 0x67, 0xD3, 0x71,0x58, 0xE8, 0x20, 0x7B, 0xAA, 0x08, 0xAE, 0x33, 0x98, 0x1C, 0xCA, 0x21, 0x18, 0x22, 0xEE, 0x8C,0x49, 0xBF, 0x2C, 0xBC, 0x63, 0x5B, 0xDD, 0xB3, 0xCC, 0x30, 0xB2, 0x66, 0x53, 0x6C, 0x74, 0x6B,0x65, 0x55, 0x35, 0x8D, 0x15, 0x5D, 0x9D, 0x9F, 0x84, 0xD4, 0xA3, 0x99, 0x94, 0x1E, 0x87, 0x9C,0xC9, 0x85, 0x28, 0x69, 0x4D, 0xE5, 0x89, 0xF5, 0x3D, 0xAF, 0xC1, 0x0E, 0xF7, 0xEA, 0xC8, 0x54,0x1A, 0x9A, 0xF3, 0x03, 0x8F, 0x48, 0xDA, 0x8B, 0x76, 0x16, 0x82, 0x38, 0xA9, 0xC0, 0xC2, 0xA1,0xD8, 0x8A, 0xD2, 0xE7, 0xA6, 0x95, 0x50, 0xF4, 0xD6, 0x5E, 0xFA, 0x1F, 0xE1, 0x0B, 0x68, 0x01,0xDC, 0x0D, 0xB1, 0xF2, 0x05, 0xC3, 0x12, 0xF9, 0x2B, 0x09, 0xEF, 0x70, 0xA2, 0x04, 0x4F, 0x6D,0xFF, 0x7A, 0xE2, 0xF8, 0xD0, 0x0A, 0x59, 0xB6, 0xC6, 0x3B, 0xAB, 0xFE, 0xCB, 0xD7, 0x93, 0xA4,0xBD, 0x91, 0x7C, 0xD9, 0xCE, 0xE4, 0x14, 0x57, 0x6E, 0x60, 0x77, 0xB5, 0x73, 0x13, 0xCF, 0x9E,0xA0, 0x47, 0x3C, 0x4B, 0x6F, 0x7F, 0x51, 0xAD, 0xB7, 0xE3, 0x61, 0x3F, 0x6A, 0xB9, 0x2F, 0x17,0x3E, 0xE0, 0x90, 0x07, 0x25, 0xDB, 0xBE, 0x5A, 0x64, 0x36, 0x2E, 0xE9, 0x1D, 0x96, 0x5C, 0x4E
};
char MXTCPTable_2[256] =
{
     0xD2, 0x3A, 0x74, 0xAF, 0xB5, 0xA9, 0xCE, 0x93, 0x46, 0x96, 0x47, 0xCD, 0xA8, 0x69, 0xF7, 0x23,0x81, 0x78, 0xFB, 0x13, 0x8D, 0x2D, 0x45, 0x8E, 0x1B, 0xAE, 0x0F, 0x22, 0xB9, 0x38, 0x67, 0x4A,0xE4, 0x27, 0xAA, 0x52, 0x20, 0x4C, 0x99, 0x3C, 0x29, 0x94, 0x30, 0xE8, 0xBC, 0x42, 0x7B, 0xFD,0xE5, 0xFC, 0x40, 0x91, 0x3B, 0xEF, 0x4F, 0xF2, 0xBA, 0x65, 0x31, 0xF3, 0xE0, 0xA5, 0x18, 0xDB,0x66, 0x2E, 0x43, 0x6B, 0xB4, 0xB6, 0x50, 0x2A, 0x12, 0xF9, 0x36, 0xF8, 0x8A, 0x2F, 0xC7, 0xB3,0xB2, 0xE6, 0xC3, 0x33, 0x76, 0x72, 0x80, 0xF5, 0x92, 0xAB, 0x85, 0x10, 0xC2, 0xCB, 0x97, 0x1D,0xD4, 0xCF, 0x54, 0x58, 0xC5, 0x48, 0x4D, 0x5F, 0xC1, 0xB7, 0x5C, 0x25, 0x34, 0xF0, 0x73, 0xEB,0xAD, 0x14, 0xBF, 0x5E, 0x06, 0x1F, 0xFE, 0x61, 0x71, 0xEA, 0x01, 0x24, 0x7D, 0x08, 0x9D, 0x84,0x5B, 0x2B, 0x4E, 0xF4, 0x41, 0x57, 0xA3, 0x53, 0x00, 0x0B, 0x5D, 0x0C, 0x1E, 0xA1, 0x3F, 0x4B,0x1C, 0x64, 0x28, 0x8C, 0x9A, 0x60, 0xC6, 0x26, 0x19, 0xCC, 0x63, 0x88, 0xF1, 0x09, 0x8F, 0x0D,0x04, 0xBD, 0x8B, 0xD5, 0xDC, 0x9F, 0x87, 0xDE, 0xBE, 0x7E, 0x95, 0x51, 0xC8, 0x5A, 0x11, 0xDA,0x70, 0x3D, 0x68, 0x7F, 0x3E, 0xE9, 0xC9, 0x59, 0xD7, 0x6E, 0x79, 0x6A, 0x15, 0xD0, 0x77, 0x89,0x6F, 0xA2, 0x02, 0x86, 0xE3, 0x90, 0xA6, 0x9E, 0x6C, 0x05, 0x0E, 0xFA, 0xD3, 0xD9, 0x62, 0x6D,0x16, 0xC0, 0xE2, 0x03, 0x83, 0x17, 0xD6, 0xA4, 0x0A, 0x7C, 0x39, 0x1A, 0xDF, 0xEC, 0x21, 0x2C,0xB0, 0x44, 0x9B, 0xBB, 0x75, 0x07, 0x7A, 0xC4, 0xA0, 0xA7, 0xF6, 0xB8, 0xB1, 0xAC, 0xFF, 0xED,0xCA, 0x82, 0xE1, 0xD1, 0x9C, 0x98, 0x55, 0xD8, 0xE7, 0x56, 0xEE, 0x35, 0x49, 0xDD, 0x32, 0x37
};
char MXTCPTable_3[256] =
{
     0x88, 0x7A, 0xC2, 0xD3, 0xA0, 0xC9, 0x74, 0xE5, 0x7D, 0x9D, 0xD8, 0x89, 0x8B, 0x9F, 0xCA, 0x1A,0x5B, 0xAE, 0x48, 0x13, 0x71, 0xBC, 0xD0, 0xD5, 0x3E, 0x98, 0xDB, 0x18, 0x90, 0x5F, 0x8C, 0x75,0x24, 0xDE, 0x1B, 0x0F, 0x7B, 0x6B, 0x97, 0x21, 0x92, 0x28, 0x47, 0x81, 0xDF, 0x15, 0x41, 0x4D,0x2A, 0x3A, 0xFE, 0x53, 0x6C, 0xFB, 0x4A, 0xFF, 0x1D, 0xDA, 0x01, 0x34, 0x27, 0xB1, 0xB4, 0x8E,0x32, 0x84, 0x2D, 0x42, 0xE1, 0x16, 0x08, 0x0A, 0x65, 0xFC, 0x1F, 0x8F, 0x25, 0x66, 0x82, 0x36,0x46, 0xAB, 0x23, 0x87, 0x62, 0xF6, 0xF9, 0x85, 0x63, 0xB7, 0xAD, 0x80, 0x6A, 0x8A, 0x73, 0x67,0x95, 0x77, 0xCE, 0x9A, 0x91, 0x39, 0x40, 0x1E, 0xB2, 0x0D, 0xBB, 0x43, 0xC8, 0xCF, 0xB9, 0xC0,0xB0, 0x78, 0x55, 0x6E, 0x02, 0xE4, 0x54, 0xBE, 0x11, 0xBA, 0xE6, 0x2E, 0xD9, 0x7C, 0xA9, 0xB3,0x56, 0x10, 0xF1, 0xD4, 0x7F, 0x5A, 0xC3, 0xA6, 0x9B, 0xBF, 0x4C, 0xA2, 0x93, 0x14, 0x17, 0x9E,0xC5, 0x33, 0x58, 0x07, 0x29, 0xAA, 0x09, 0x5E, 0xF5, 0x26, 0x94, 0xE2, 0xF4, 0x7E, 0xC7, 0xA5,0xE8, 0x8D, 0xC1, 0x86, 0xD7, 0x3D, 0xC6, 0xE9, 0x0C, 0x05, 0x22, 0x59, 0xED, 0x70, 0x19, 0x03,0xE0, 0xEC, 0x50, 0x4F, 0x44, 0x04, 0x45, 0x69, 0xEB, 0x1C, 0x38, 0xE3, 0x2C, 0xA1, 0xA8, 0x72,0xD1, 0x68, 0x5C, 0x52, 0xE7, 0x64, 0x96, 0x4E, 0xAC, 0xB6, 0xF0, 0x5D, 0x99, 0x0B, 0x06, 0x61,0xBD, 0xF3, 0x00, 0xCC, 0x60, 0xA3, 0xD6, 0xB8, 0xF7, 0xCD, 0xAF, 0x3F, 0xA4, 0xFD, 0xA7, 0xDC,0x3C, 0xF2, 0xD2, 0xC4, 0x20, 0x30, 0x51, 0xF8, 0x2B, 0xB5, 0x79, 0x6F, 0xDD, 0xEF, 0xFA, 0x35,0x6D, 0x9C, 0x37, 0x3B, 0x83, 0x57, 0xEA, 0x0E, 0x4B, 0x49, 0xCB, 0x12, 0x31, 0x2F, 0x76, 0xEE
};
char MXTCPTable_4[512] =
{
     0x16, 0x24, 0xED, 0x25, 0xA8, 0x55, 0x5D, 0x1A, 0xE1, 0x03, 0x68, 0x4C, 0x4E, 0xFA, 0xFD, 0x6E,0x3A, 0xEA, 0xF1, 0xF4, 0xF6, 0x21, 0x9D, 0x7F, 0x44, 0xCF, 0x2D, 0x4D, 0x0D, 0x96, 0x63, 0x13,0x8F, 0xDC, 0x07, 0xC9, 0xEB, 0x3E, 0x31, 0x4A, 0xA4, 0xA6, 0x7A, 0x72, 0xF0, 0x04, 0xE3, 0x6C,0x05, 0x19, 0xB7, 0x48, 0x3D, 0xAB, 0x14, 0xF3, 0xBA, 0xD6, 0xD9, 0xB5, 0x0B, 0x6B, 0xD4, 0x77,0xD7, 0x8D, 0x58, 0x2E, 0x87, 0xE6, 0x66, 0x40, 0x34, 0xFC, 0x18, 0xF5, 0x85, 0xDE, 0x27, 0xC6,0x1B, 0x7C, 0x20, 0x11, 0xC8, 0x90, 0x8B, 0x6F, 0x28, 0x94, 0x17, 0xA1, 0x54, 0xE7, 0xEC, 0x12,0xE2, 0x00, 0xF8, 0xA5, 0xD5, 0x8E, 0xDA, 0xC3, 0x22, 0xFB, 0x80, 0xB8, 0xD1, 0x6A, 0x39, 0x51,0xF2, 0x7E, 0x5E, 0x06, 0xBF, 0x4B, 0x82, 0x98, 0x8A, 0x61, 0xE9, 0x49, 0x7D, 0x1C, 0xAF, 0x99,0x9A, 0x46, 0xC0, 0x83, 0x0A, 0x15, 0xC1, 0xA0, 0x1F, 0xEF, 0xA9, 0x5C, 0xDB, 0x86, 0xB3, 0xAC,0x1E, 0x42, 0x81, 0x69, 0x3F, 0xDF, 0xD2, 0xB4, 0x26, 0x9B, 0x56, 0x29, 0x62, 0x6D, 0x09, 0xA2,0xE0, 0x3C, 0x36, 0xCD, 0x88, 0x74, 0x65, 0x95, 0x92, 0xC7, 0xB1, 0x30, 0x76, 0xC2, 0x3B, 0x2B,0xD8, 0x5F, 0x35, 0x10, 0x75, 0x2C, 0x8C, 0x60, 0xAD, 0x08, 0x84, 0xD3, 0xE5, 0x5A, 0xA7, 0xCB,0x0C, 0x2A, 0x33, 0x37, 0x32, 0x23, 0xBE, 0x59, 0xC4, 0xCA, 0xB2, 0xBD, 0x7B, 0x97, 0x4F, 0xB9,0xA3, 0xAE, 0xB0, 0xC5, 0x0E, 0x45, 0x73, 0x71, 0x57, 0x5B, 0xF9, 0xFE, 0x41, 0xEE, 0x91, 0x93,0x79, 0xB6, 0xAA, 0x47, 0x38, 0x89, 0x01, 0x64, 0xBB, 0x2F, 0x1D, 0x9E, 0xDD, 0xD0, 0x78, 0x50,0x43, 0xE8, 0x70, 0xE4, 0xCC, 0x52, 0x02, 0x67, 0xF7, 0x9C, 0xBC, 0xCE, 0x0F, 0x53, 0x9F, 0xFF,0x61, 0xE6, 0xF6, 0x09, 0x2D, 0x30, 0x73, 0x22, 0xB9, 0x9E, 0x84, 0x3C, 0xC0, 0x1C, 0xD4, 0xFC,0xB3, 0x53, 0x5F, 0x1F, 0x36, 0x85, 0x00, 0x5A, 0x4A, 0x31, 0x07, 0x50, 0x7D, 0xEA, 0x90, 0x88,0x52, 0x15, 0x68, 0xC5, 0x01, 0x03, 0x98, 0x4E, 0x58, 0x9B, 0xC1, 0xAF, 0xB5, 0x1A, 0x43, 0xE9,0xAB, 0x26, 0xC4, 0xC2, 0x48, 0xB2, 0xA2, 0xC3, 0xE4, 0x6E, 0x10, 0xAE, 0xA1, 0x34, 0x25, 0x94,0x47, 0xDC, 0x91, 0xF0, 0x18, 0xD5, 0x81, 0xE3, 0x33, 0x7B, 0x27, 0x75, 0x0B, 0x1B, 0x0C, 0xCE,0xEF, 0x6F, 0xF5, 0xFD, 0x5C, 0x05, 0x9A, 0xD8, 0x42, 0xC7, 0xBD, 0xD9, 0x8B, 0x06, 0x72, 0xB1,0xB7, 0x79, 0x9C, 0x1E, 0xE7, 0xA6, 0x46, 0xF7, 0x0A, 0x93, 0x6D, 0x3D, 0x2F, 0x9D, 0x0F, 0x57,0xF2, 0xD7, 0x2B, 0xD6, 0xA5, 0xB4, 0xAC, 0x3F, 0xEE, 0xE0, 0x2A, 0xCC, 0x51, 0x7C, 0x71, 0x17,0x6A, 0x92, 0x76, 0x83, 0xBA, 0x4C, 0x8D, 0x44, 0xA4, 0xE5, 0x78, 0x56, 0xB6, 0x41, 0x65, 0x20,0x55, 0xDE, 0xA8, 0xDF, 0x59, 0xA7, 0x1D, 0xCD, 0x77, 0x7F, 0x80, 0x99, 0xF9, 0x16, 0xEB, 0xFE,0x87, 0x5B, 0x9F, 0xD0, 0x28, 0x63, 0x29, 0xBE, 0x04, 0x8A, 0xE2, 0x35, 0x8F, 0xB8, 0xD1, 0x7E,0xD2, 0xAA, 0xCA, 0x8E, 0x97, 0x3B, 0xE1, 0x32, 0x6B, 0xCF, 0x38, 0xE8, 0xFA, 0xCB, 0xC6, 0x74,0x82, 0x86, 0xAD, 0x67, 0xC8, 0xD3, 0x4F, 0xA9, 0x54, 0x23, 0xC9, 0xBF, 0xF4, 0xA3, 0xFB, 0x19,0xED, 0x6C, 0x96, 0xBB, 0x3E, 0x64, 0x39, 0x40, 0xB0, 0x3A, 0x66, 0x8C, 0x21, 0xEC, 0x4D, 0x95,0xA0, 0x08, 0x60, 0x2E, 0xF3, 0xBC, 0x45, 0x5D, 0xF1, 0x7A, 0x11, 0x24, 0x5E, 0x02, 0xDD, 0x89,0x2C, 0x12, 0x70, 0x37, 0x13, 0x4B, 0x14, 0xF8, 0x62, 0xDA, 0x0D, 0x69, 0x49, 0x0E, 0xDB, 0xFF
};
char MXTCPTable_6[256] =
{
     0xAD, 0x33, 0x6E, 0x35, 0x3B, 0x91, 0x63, 0x45, 0x50, 0x4F, 0xF9, 0x23, 0x60, 0xF2, 0xF4, 0x02,0x3E, 0xD5, 0x69, 0x94, 0xD3, 0xFF, 0x98, 0x29, 0xB4, 0xF3, 0x6C, 0xA0, 0x52, 0x9F, 0x90, 0xCF,0xDD, 0x30, 0x0F, 0x70, 0xCC, 0x86, 0x7B, 0xD8, 0x38, 0x9D, 0xFE, 0x21, 0xB8, 0x78, 0x6D, 0x1F,0x8E, 0x8C, 0x40, 0x7F, 0x4D, 0x3C, 0x9A, 0x1C, 0xF0, 0x11, 0x41, 0x44, 0xEA, 0x5F, 0xC2, 0xAA,0x22, 0xD4, 0xDE, 0x20, 0x36, 0x97, 0x2E, 0x13, 0xCD, 0x03, 0x77, 0x07, 0x17, 0x75, 0x68, 0x59,0xAC, 0xD6, 0xB6, 0xE4, 0x2C, 0x79, 0x55, 0x54, 0x34, 0x8A, 0xA5, 0xE5, 0xEC, 0xC9, 0x2F, 0x09,0x4E, 0xE3, 0xD2, 0xCA, 0x4A, 0x06, 0x0B, 0xA7, 0xA1, 0xC4, 0x85, 0xAB, 0x89, 0x27, 0x93, 0x42,0x81, 0x9E, 0x05, 0xAE, 0xDB, 0xE8, 0x8B, 0x74, 0x00, 0x61, 0x8F, 0xDA, 0x3A, 0xF5, 0xBC, 0xE2,0x12, 0x9B, 0xC5, 0x87, 0x6B, 0xB1, 0x2A, 0xC8, 0x95, 0xA6, 0x88, 0xB5, 0x56, 0xA3, 0x48, 0x46,0x64, 0x9C, 0xBE, 0xA2, 0x67, 0xA4, 0xEB, 0x5B, 0x71, 0x83, 0xB2, 0xE6, 0x6F, 0x2B, 0xC0, 0x31,0x1E, 0xA9, 0x57, 0xA8, 0x6A, 0x62, 0xB7, 0x5A, 0x8D, 0x82, 0x1B, 0x28, 0x47, 0x39, 0x0C, 0x7C,0xB9, 0xEE, 0x01, 0x14, 0x0D, 0x04, 0x51, 0x49, 0xF7, 0xD9, 0xB0, 0x2D, 0x1A, 0xEF, 0xBA, 0x43,0x84, 0xAF, 0xD0, 0xFD, 0x96, 0xC1, 0xC6, 0xF8, 0x16, 0x25, 0xF1, 0x5E, 0x7E, 0x58, 0x08, 0x0E,0xE0, 0x66, 0xC7, 0x26, 0x24, 0x80, 0x5C, 0x10, 0xE7, 0x3F, 0x92, 0xED, 0x53, 0xBF, 0xE9, 0x18,0x73, 0xE1, 0xD1, 0xF6, 0xDF, 0xFB, 0xFC, 0x76, 0xD7, 0x19, 0x5D, 0x65, 0xBD, 0x1D, 0x7A, 0x72,0x3D, 0x4B, 0x4C, 0x99, 0x0A, 0xCE, 0x32, 0xC3, 0x37, 0xCB, 0xFA, 0xB3, 0x7D, 0x15, 0xBB, 0xDC
};
char MXTCPTable_7[256] =
{
     0x78, 0xB2, 0x0F, 0x49, 0xB5, 0x72, 0x65, 0x4B, 0xCE, 0x5F, 0xF4, 0x66, 0xAE, 0xB4, 0xCF, 0x22,0xD7, 0x39, 0x80, 0x47, 0xB3, 0xFD, 0xC8, 0x4C, 0xDF, 0xE9, 0xBC, 0xAA, 0x37, 0xED, 0xA0, 0x2F,0x43, 0x2B, 0x40, 0x0B, 0xD4, 0xC9, 0xD3, 0x6D, 0xAB, 0x17, 0x86, 0x9D, 0x54, 0xBB, 0x46, 0x5E,0x21, 0x9F, 0xF6, 0x01, 0x58, 0x03, 0x44, 0xF8, 0x28, 0xAD, 0x7C, 0x04, 0x35, 0xF0, 0x10, 0xD9,0x32, 0x3A, 0x6F, 0xBF, 0x3B, 0x07, 0x8F, 0xAC, 0x8E, 0xB7, 0x64, 0xF1, 0xF2, 0x34, 0x60, 0x09,0x08, 0xB6, 0x1C, 0xDC, 0x57, 0x56, 0x8C, 0xA2, 0xCD, 0x4F, 0xA7, 0x97, 0xD6, 0xEA, 0xCB, 0x3D,0x0C, 0x79, 0xA5, 0x06, 0x90, 0xEB, 0xD1, 0x94, 0x4E, 0x12, 0xA4, 0x84, 0x1A, 0x2E, 0x02, 0x9C,0x23, 0x98, 0xEF, 0xE0, 0x77, 0x4D, 0xE7, 0x4A, 0x2D, 0x55, 0xEE, 0x26, 0xAF, 0xFC, 0xCC, 0x33,0xD5, 0x70, 0xA9, 0x99, 0xC0, 0x6A, 0x25, 0x83, 0x8A, 0x6C, 0x59, 0x76, 0x31, 0xA8, 0x30, 0x7A,0x1E, 0x05, 0xDA, 0x6E, 0x13, 0x88, 0xC4, 0x45, 0x16, 0xF3, 0x36, 0x81, 0x91, 0x29, 0x71, 0x1D,0x1B, 0x68, 0x93, 0x8D, 0x95, 0x5A, 0x89, 0x67, 0xA3, 0xA1, 0x3F, 0x6B, 0x50, 0x00, 0x73, 0xC1,0xBA, 0x85, 0x9A, 0xFB, 0x18, 0x8B, 0x52, 0xA6, 0x2C, 0xB0, 0xBE, 0xFE, 0x7E, 0xEC, 0x92, 0xDD,0x9E, 0xC5, 0x3E, 0xF7, 0x69, 0x82, 0xC6, 0xD2, 0x87, 0x5D, 0x63, 0xF9, 0x24, 0x48, 0xF5, 0x1F,0xC2, 0xE2, 0x62, 0x14, 0x41, 0x11, 0x51, 0xE8, 0x27, 0xB9, 0x7B, 0x74, 0xFF, 0x20, 0x42, 0xE4,0xD0, 0xE1, 0x7F, 0x61, 0x53, 0x5B, 0x9B, 0xD8, 0x75, 0xDE, 0x3C, 0x96, 0x5C, 0xDB, 0xB1, 0xBD,0x38, 0xCA, 0x0D, 0x19, 0x0E, 0x7D, 0xE3, 0xB8, 0xC7, 0x0A, 0xFA, 0xE5, 0xE6, 0xC3, 0x2A, 0x15
};

void DecryptFrontCode(const BYTE *pSrc, BYTE *pDst)
{
     BYTE Work[12];
     BYTE Crypt[12];
     int i, j;
     memcpy(Crypt, pSrc, 12);
     memcpy(pDst, pSrc + 12, 120);
     for(i=0 ; i < 10 ; i++)
     {
          memcpy(Work, pSrc + 12 + i * 12, 12);
          pDst[i * 12 + 0] -= Crypt[0];
          pDst[i * 12 + 1] -= Crypt[1];
          pDst[i * 12 + 2] ^= Crypt[2];
          pDst[i * 12 + 3] -= Crypt[3];
          pDst[i * 12 + 4] ^= Crypt[4];
          pDst[i * 12 + 5] ^= Crypt[5];
          pDst[i * 12 + 6] ^= Crypt[6];
          pDst[i * 12 + 7] -= Crypt[7];
          pDst[i * 12 + 8] ^= Crypt[8];
          pDst[i * 12 + 9] -= Crypt[9];
          pDst[i * 12 + 10] -= Crypt[10];
          pDst[i * 12 + 11] ^= Crypt[11];
          for (j=0 ; j < 12 ; j++) Crypt[j] = FCTable[Work[j] * 12 + j];
     }
}
void CreateCryptKeyID(const WORD wID, BYTE *pBlock)
{
     int i;
     for(i=0 ; i < 16 ; i++)pBlock[i] = rand() % 255;
     pBlock[4] = pBlock[15] ^ pBlock[13] ^ pBlock[5] ^ pBlock[2];
     pBlock[9] = (pBlock[14] ^ pBlock[8] ^ pBlock[1]) + wID;
     pBlock[11] = (pBlock[12] ^ pBlock[10] ^ pBlock[7] ^ pBlock[6] ^ pBlock[3] ^ pBlock[0]) + (wID >> 7);
     for(i=0 ; i < 105 ; i++)
     {
          BYTE K = (i)? pBlock[(i - 1) & 0x0F] : 0x57;
          if(i % 5)pBlock[i & 0x0F] += K;
          else pBlock[i & 0x0F] ^= K;
     }
}
const WORD GetCryptKeyID(const BYTE *pBlock)
{
     BYTE kb[16];
     int i;
     memcpy(kb, pBlock, 16);
     for(i=104 ; i >= 0 ; i--)
     {
          BYTE b = (i)? kb[(i - 1) & 0x0F] : 0x57;
          if(i % 5)kb[i & 0x0F] -= b;
          else kb[i & 0x0F] ^= b;
     }
     BYTE KeyID = (BYTE)(kb[9] - (kb[14] ^ kb[8] ^ kb[1]));
     if(kb[4] != (kb[15] ^ kb[13] ^ kb[5] ^ kb[2]) || (kb[12] ^ kb[10] ^ kb[7] ^ kb[6] ^ kb[3] ^ kb[0]) != (BYTE)(kb[11]-(KeyID >> 7))) return 0xFFFF;
     return KeyID;
}
inline const BYTE Decrypt1(const BYTE s, BYTE* ckey)
{
     register BYTE r;
     switch(ckey[2] & 0x03)
     {
          case 0:
          r = MXTCPTable_2[ckey[1] ^ s];
          break;
          case 1:
          r = MXTCPTable_6[ckey[1] ^ s];
          break;
          case 2:
          r = ckey[0] ^ MXTCPTable_0[s];
          break;
          case 3:
          r = ckey[3] ^ MXTCPTable_6[s];
          break;
     }
     ckey[0] += ckey[1];
     ckey[1] ^= ckey[3];
     ckey[2] += MXTCPTable_4[s];
     ckey[3] ^= ckey[2];
     ckey[1]++;
     ckey[2]++;
     ckey[3]++;
     return r;
}
inline const BYTE Encrypt1(const BYTE s, BYTE* ckey)
{
     register BYTE r;
     switch(ckey[2] & 0x03)
     {
          case 0:
          r = ckey[1] ^ MXTCPTable_3[s];
          break;
          case 1:
          r = ckey[1] ^ MXTCPTable_7[s];
          break;
          case 2:
          r = MXTCPTable_1[ckey[0] ^ s];
          break;
          case 3:
          r = MXTCPTable_7[ckey[3] ^ s];
          break;
     }
     ckey[0] += ckey[1];
     ckey[1] ^= ckey[3];
     ckey[2] += MXTCPTable_4[r];
     ckey[3] ^= ckey[2];
     ckey[1]++;
     ckey[2]++;
     ckey[3]++;
     return r;
}
const DWORD DecryptMXTCP(BYTE *pBuf, const int iLen, const DWORD dwKey)
{
     register DWORD dwRef = dwKey;
     int i;
     for(i=0 ; i < iLen ; i++) pBuf[i] = Decrypt1(pBuf[i], (BYTE *)&dwRef);
     return dwRef;
}
const DWORD EncryptMXTCP(BYTE *pBuf, const int iLen, const DWORD dwKey)
{
     register DWORD dwRef = dwKey;
     int i;
     for(i=0 ; i < iLen ; i++) pBuf[i] = Encrypt1(pBuf[i], (BYTE *)&dwRef);
     return dwRef;
}

const WORD GetCryptKey(const BYTE *pBlock, DWORD *pUpKey, DWORD *pDwKey)
{
     const WORD wKeyID = GetCryptKeyID(pBlock);
     BOOL bUPlus, bDPlus;
     BYTE bUK0, bUK1, bUK2, bUK3, bUD;
     BYTE bDK0, bDK1, bDK2, bDK3, bDD;
     DWORD dwUPKey = 0;
     DWORD dwDWKey = 0;
     switch(wKeyID)
     {
          case 0x0050 :
          case 0x0051 :
          bUK0 = 2;
          bUK1 = 5;
          bUK2 = 9;
          bUK3 = 11;
          bUD = 0x68;
          bUPlus = FALSE;
          // SV PR
          bDK0 = 4;
          bDK1 = 12;
          bDK2 = 10;
          bDK3 = 7;
          bDD = 0x67;
          bDPlus = FALSE;
          // SV PR
          break;
          case 0x0052 :
          case 0x0053 :
          bUK0 = 7;
          bUK1 = 3;
          bUK2 = 9;
          bUK3 = 5;
          bUD = 0x54;
          bUPlus = TRUE;
          // SV SE
          bDK0 = 2;
          bDK1 = 8;
          bDK2 = 13;
          bDK3 = 6;
          bDD = 0x55;
          bDPlus = TRUE;
          // SV SE
          break;
          case 0x0057 :
          case 0x0058 :
          bUK0 = 7;
          bUK1 = 3;
          bUK2 = 9;
          bUK3 = 5;
          bUD = 0x22;
          bUPlus = FALSE;
          // SV CH
          bDK0 = 2;
          bDK1 = 8;
          bDK2 = 13;
          bDK3 = 6;
          bDD = 0x7A;
          bDPlus = TRUE;
          break;
          default :
          return wKeyID;
     }
     dwUPKey = pBlock[bUK3];
     dwUPKey <<= 8;
     dwUPKey |= pBlock[bUK2];
     dwUPKey <<= 8;
     dwUPKey |= pBlock[bUK1];
     dwUPKey <<= 8;
     dwUPKey |= (BYTE)((bUPlus)? (pBlock[bUK0] + bUD) : (pBlock[bUK0] - bUD));
     dwDWKey = pBlock[bDK3];
     dwDWKey <<= 8;
     dwDWKey |= pBlock[bDK2];
     dwDWKey <<= 8;
     dwDWKey |= pBlock[bDK1];
     dwDWKey <<= 8;
     dwDWKey |= (BYTE)((bDPlus)? (pBlock[bDK0] + bDD) : (pBlock[bDK0] - bDD));
     if(wKeyID == 0x0051 || wKeyID == 0x0053 || wKeyID == 0x0058)
     {
          *pUpKey = dwDWKey;
          *pDwKey = dwUPKey;
     }
     else
     {
          *pUpKey = dwUPKey;
          *pDwKey = dwDWKey;
     }
     return wKeyID;
}

Offline ñòóKýçrÕôK

  • my name is nooks, and I approve this message
  • MX Hosts
  • *****
  • Dream BIG, Live BIGGER!!
Re: TCP Encryption
« Reply #1 on: April 20, 2006, 07:06:46 pm »
 :shock: uuummm O......K..  :?
When you wake up each morning always try to remember tomorrow is never your option, it's God's. Love like you want to. Live like you aren't afraid. And ALWAYS try to remember that even if it seems personal it's never as important as something you may have forgotten to do today.

WinMXWorld.com Help_BABA1354BABE - For WinMX help or help on other pc related matters.
WinMXWorld.com Cafe_AE182F4ECAFE - For great chat.

Offline Ace

  • Forum Member
  • *****
  • Every new creation is the sum of old and new.
Re: TCP Encryption
« Reply #2 on: April 22, 2006, 01:43:29 pm »
lol just for you nookie in layman terms
 have a read here to explain bit better  so you can understand bit better

http://www.tcpipguide.com/free/t_PPPCompressionControlProtocolCCPandCompressionAlgo.htm

KM

  • Guest
Re: TCP Encryption
« Reply #3 on: April 22, 2006, 04:49:40 pm »
* KM wonders what PPP has to do with winmx communications...

Offline Scyre

  • Forum Member
  • <Insert nothing here.>
Re: TCP Encryption
« Reply #4 on: June 26, 2006, 03:29:57 am »
Ok, There are a few questions I have...

First, is this the initial communication between the peer cache and client,  or the client and the primary it gets sent to?

Second, if this is for both, then does the client use the same crypt keys for the primary that it did for the peer cache, or does it need to set up for using new crypt keys when it connects to the primary that the peer cache sends it to?

Third, can you send me a dollar?

Thanks, and Be Good!
Scyre
A cat will almost always blink when hit with a hammer.

KM

  • Guest
Re: TCP Encryption
« Reply #5 on: June 26, 2006, 03:45:33 am »
1. i have no idea what you mean - are you asking if winmx connects to a primary, then connects to the peer cache? that would erm, well... the peer cache is to locate the primary...

2. every connection and every communication is completely separate and completely unrelated to any other communication (except for the obvious of course like a file transfer connection is obviously related to data sent back and forth between the primaries to negotiate that connection), just join a chat room whilst not connected to any primary to see that they are unrelated, everything is separate within winmx - makes it much simpler to deal with one thing without worrying about everything else

3. no, unfortunately they don't make 0.000001p coins so i am unable to do so

Offline Zénar

  • Forum Member
  • *****
    • ZenMX
Re: TCP Encryption
« Reply #6 on: November 08, 2006, 01:13:19 am »
In the top, we have void DecryptFrontCode(const BYTE *pSrc, BYTE *pDst) but can I have the void EncryptFrontCode please?

I want to use that for one of my program  :wink:

KM

  • Guest
Re: TCP Encryption
« Reply #7 on: November 08, 2006, 04:25:43 am »
erm, that encryption is only used for secondary cache communications

Offline Zénar

  • Forum Member
  • *****
    • ZenMX
Re: TCP Encryption
« Reply #8 on: November 08, 2006, 05:21:44 pm »
I wanted to create a cache server to test how the connection is made between secondary and the server.

For the login, I must send (I've found that in the forum):
 nickname (string) + linetype (byte) + reserved (byte) + port number (2 bytes)

I just don't know where I put the character 0x00 to create the login packet for secondary...

By the ways, what is reserved?

Sharky

  • Guest
Re: TCP Encryption
« Reply #9 on: November 19, 2006, 08:43:08 am »
after the nickname, it's a string and strings are usually (not always) null terminated.

Sharky

  • Guest
Re: TCP Encryption
« Reply #10 on: November 19, 2006, 08:46:25 am »
nickname + 0x00 + linetype(byte) + reserved(byte) + port number(2 bytes)

^ 0x00(NULL) usually indicates the end of the nickname.

Offline Zénar

  • Forum Member
  • *****
    • ZenMX
Re: TCP Encryption
« Reply #11 on: November 19, 2006, 03:19:03 pm »
Yep I've found it!  :D

Offline saturnx311

  • Forum Member
Re: TCP Encryption
« Reply #12 on: January 07, 2009, 05:29:56 am »
A cat will almost always blink when hit with a hammer.

What the eff is this about? Are you sick or something?

Cats are one of God's most noble creatures. Certainly higher that the poster of such a signature as this one.

)Sorry, off topic I know, but I couldn't let this pass.

WinMX is awesome; the latest patch helped me solve a frustrating router issue.
To whoever is responsible, thank you.

A cat hater will almost always blink when hit with a fist.

Offline GhostShip

  • Ret. WinMX Special Forces
  • WMW Team
  • *****
Re: TCP Encryption
« Reply #13 on: January 07, 2009, 07:05:55 pm »
The signature seems to be Scyres brand of humour, our apologies if it offends, I,m sure Scyre is a cat lover also and was not contemplating any real life activity of the sort nor encouraging it.

btw Happy new year Saturnx311

Offline wonderer

  • MX Hosts
  • *****
  • ***
Re: TCP Encryption
« Reply #14 on: January 07, 2009, 10:44:02 pm »
That cat must have recovered from that hit by now.....
That post is over a year old

Offline achilles

  • Core
  • *****
Re: TCP Encryption
« Reply #15 on: January 24, 2011, 01:47:08 am »
How many bits is the encryption for communication between clients for the file transfer protocol?
I'm a Hardware, and Cyber Security Guy.

Offline GhostShip

  • Ret. WinMX Special Forces
  • WMW Team
  • *****
Re: TCP Encryption
« Reply #16 on: January 24, 2011, 03:19:57 am »
Thats a pretty easy one Achilles, none is the answer your seeking as WinMX was constructed prior to ISP deep packet inspection technology and that single part of the the client is unencrypted, its basically a variant of the OpenNap/Napster routine with encrypted management control that delivers a small part of security but not enough for my comfort.


Offline achilles

  • Core
  • *****
Re: TCP Encryption
« Reply #17 on: January 24, 2011, 03:31:12 am »
Thanks for the answer GhostShip! I thought the traffic was encrypted.  That would be a very nice addition to add to the new client when possible.
I'm a Hardware, and Cyber Security Guy.

WinMX World :: Forum  |  Technical  |  Protocol Discussion  |  TCP Encryption
 

gfxgfx
gfx
©2005-2017 WinMXWorld.com. All rights reserved.
SMF 2.0.14 | SMF © 2017, Simple Machines
Page created in 0.049 seconds with 19 queries.
Helios Multi © Bloc
gfx
Powered by MySQL Powered by PHP Valid XHTML 1.0! Valid CSS!