Advertisement
ponyboy837

TTR Buttefly EasterEgg SRC

May 19th, 2017
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.79 KB | None | 0 0
  1. Good luck to those who wish to solve the second part. Heheheh.
  2.  
  3. # Embedded file name: secret_message.py
  4. import hashlib as _hashlib
  5. import binascii as _binascii
  6.  
  7. def _isha(m):
  8.     h = ''
  9.     for i in xrange(1048576):
  10.         h = _hashlib.sha256(h + m).digest()
  11.  
  12.     return h
  13.  
  14.  
  15. def _mrc4(key, data):
  16.     S = range(256)
  17.     j = 0
  18.     for i in xrange(256):
  19.         j += S[i] + ord(key[i % len(key)])
  20.         S[i], S[j & 255] = S[j & 255], S[i]
  21.  
  22.     i = 0
  23.     j = 0
  24.     out = ''
  25.     for b in data:
  26.         for x in xrange(1021):
  27.             i = i + 1 & 255
  28.             j = j + S[i] & 255
  29.             S[i], S[j] = S[j], S[i]
  30.  
  31.         K = S[S[i] + S[j] & 255]
  32.         out += chr(ord(b) ^ K)
  33.  
  34.     return out
  35.  
  36.  
  37. class Robot(object):
  38.  
  39.     def __init__(self):
  40.         self.__pos = (0, 0)
  41.         self.__stk = ''
  42.  
  43.     def moveDown(self):
  44.         return self.move('d')
  45.  
  46.     def moveLeft(self):
  47.         return self.move('l')
  48.  
  49.     def moveRight(self):
  50.         return self.move('r')
  51.  
  52.     def moveUp(self):
  53.         return self.move('u')
  54.  
  55.     def move(self, d):
  56.         if type(d) != str or len(d) != 1 or d not in 'dlru':
  57.             raise ValueError()
  58.         x, y = self.__pos
  59.         dx, dy = {'d': (0, 1),
  60.          'l': (-1, 0),
  61.          'r': (1, 0),
  62.          'u': (0, -1)}[d]
  63.         if not (0 <= x + dx < 32 and 0 <= y + dy < 32):
  64.             return False
  65.         cx = x if d != 'l' else x + dx
  66.         cy = y if d != 'u' else y + dy
  67.         if 1 << cx * 64 + (d in 'du') * 32 + cy & 26844546157757908605186262229192653878578790248409047522240381718974817992673833533202662261529304322744224532008175637875960981945428742173638190354788235892440952732995510455203924178576193207418500972553190155627910745959635098145735353156664378707085134514905353234797611910783409289555480200477115926243020733701292643901922536275633771162354785575544824260162252352633148807109248458792917829360718053384803485822028837181334828912816481025393310241630256069695764830281698998184918254942780357287385514160554802605448394817117940470877383879937162226135532298929876967998455401393902995434413439939832660140492L:
  68.             return False
  69.         self.__stk += d
  70.         self.__pos = (x + dx, y + dy)
  71.         for bt in ('ud', 'du', 'lr', 'rl'):
  72.             self.__stk = self.__stk.replace(bt, '')
  73.  
  74.         return True
  75.  
  76.     def solve(self):
  77.         x, y = self.__pos
  78.         if self.__pos != (31, 31):
  79.             return 'You are still %d left and %d above where you should be!' % (31 - x, 31 - y)
  80.         k = _isha(self.__stk)
  81.         if not k.endswith('\x04\x85'):
  82.             return 'Cheater! Go solve it correctly!'
  83.         return _mrc4(k[:-3], _binascii.a2b_base64('QfvfXYn4NTzBGO8yj9r0NN94zFzTJas12P2/jMTsd3PQe62HyXtYvHhlk1qdltxJxigAqwZ3s9j+a8thAeYi3n6Mf7D58x+Dg8CXI/KQRG0zPhraYzLdg4bvMZIa9xc='))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement