K-Shadow Posted February 29, 2012 Posted February 29, 2012 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now