Advertisement
Guest User

aswreg_v1.py

a guest
Apr 18th, 2020
1,592
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.74 KB | None | 0 0
  1. #!/usr/bin/python
  2. from bitstring import BitArray
  3. from collections import deque
  4. from sys import argv
  5.  
  6. # games
  7. earlier_games = ['Maelstrom','Chiral','Apeiron','Swoop','Barrack','Escape Velocity','Avara','Bubble Trouble','Harry']
  8. later_games = ['Mars Rising','EV Override','Slithereens','Cythera','Ares']
  9.  
  10. def rotate(bits,num):
  11.     b = deque(bits)
  12.     b.rotate(num)
  13.     return BitArray(b)
  14.  
  15. def add(a,b):
  16.     return BitArray('0b' + format(a + b,'032b'))
  17.  
  18. def hash_code(string,number,code,extra_hash=False):
  19.     for i in range(0,len(string)):
  20.  
  21.         code[24:] = add(ord(string[i]),int(code[24:].hex,16))[24:] # add current letter
  22.  
  23.         if extra_hash:
  24.             code = rotate(code,-6) # rotate left 6
  25.             code[16:] = add(number,int(code[16:].hex,16))[16:] # add number copies
  26.             code = code ^ BitArray('0xDEADBEEF') # xor with key
  27.             code = rotate(code,1) # rotate right 1
  28.  
  29.         else: # earlier games don't seem to include XOR with $DEADBEEF
  30.             code = rotate(code,-5) # rotate left 5
  31.             code[16:] = add(number,int(code[16:].hex,16))[16:] # add number copies
  32.  
  33.     return code
  34.  
  35. def generate_code(name,number,game):
  36.     code = BitArray(32) # 4-byte code of 0's to process on
  37.     name = name.upper() # name uppercase only
  38.  
  39.     code = hash_code(name,number,code,game in later_games)
  40.     code = hash_code(game,number,code,game in later_games)
  41.  
  42.     registration = '' # ASCII string for registration code
  43.     for i in range(8):
  44.         code = rotate(code,-4) # rotate left 4
  45.         # for each LSB nibble, add ASCII offset (first 16 letters only)
  46.         registration += chr(int(code[28:].hex,16)+65)
  47.  
  48.     return registration[::-1] # reverse
  49.  
  50.  
  51. if __name__ == '__main__':
  52.     try:
  53.         if len(argv) > 4:
  54.             raise
  55.         print generate_code(argv[1],int(argv[2]),argv[3])
  56.     except:
  57.         print 'Usage: "<name>" <number> "<game>"'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement