Jump to content

[Code] GTS Encryption/Decryption Library


Recommended Posts

Hello, this library can be used to encrypt/decrypt GET request data for the GTS.

Usage:

Decoding: decode_data('base64datahere')

Example: decode_data('SjssYIjyfd2vGH2HWtK70g==')

Encoding: encode_data('hexdatahere')

Example: encode_data('39300000010001010A000700')

Instead of inputting 0x39 for example, you would input 39 (leave out the 0x)

So: 0x39 = 39, 0x30 = 30, 0x00, 0x01

Put them together and you get 39300001, and you would input this into the encoder.

import hashlib
from base64 import *
from binascii import *
from array import array

def decode_data(data):
   b64dec = urlsafe_b64decode(data)
   data_ar = array('B')
   data_ar.fromstring(b64dec)
   checksum = (eval('0x' + hexlify(data_ar[0:4]))) ^ 0x4a3b2c1d
   dec = data_ar[4:len(data_ar)]
   out = array('B')
   rng = checksum | (checksum << 16) & 0x7fffffff
   for i in range(len(dec)):
       rng = (rng * 0x45 + 0x1111) & 0x7fffffff
       key = (rng >> 16) & 0xff
       out.append((dec[i] ^ key) & 0xff)
   return hexlify(out.tostring())

def calcchk(data):
   check = 0
   data_chr = [data[x:x+2] for x in xrange(0,len(data),2)]
   data_r = array('B')
   for x in data_chr:
       data_r.append(eval('0x'+x+''))
   for x in data_r:
       check = check + x
   return check

def encode_data(data):
   chk = calcchk(data)
   appendchk = hex(chk ^ 0x4a3b2c1d)[2:]
   data_chr = [data[x:x+2] for x in xrange(0,len(data),2)]
   data_ar = array('B')
   out = array('B')
   for x in data_chr:
       data_ar.append(eval('0x'+x+''))
   rng = chk | (chk << 16) & 0x7fffffff
   for i in range(len(data_ar)):
       rng = (rng * 0x45 + 0x1111) & 0x7fffffff
       key = (rng >> 16) & 0xff
       out.append((data_ar[i] ^ key) & 0xff)
   outstring = "".join(out.tostring())
   outstr = unhexlify(appendchk) + outstring
   return urlsafe_b64encode(outstr)

Credits:

ProjectPokemon - GTS Protocol info

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...