Advertisement
Guest User

Untitled

a guest
Feb 3rd, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.74 KB | None | 0 0
  1. # uncompyle6 version 3.2.5
  2. # Python bytecode 2.7 (62211)
  3. # Decompiled from: Python 3.6.7 (default, Oct 22 2018, 11:32:17)
  4. # [GCC 8.2.0]
  5. # Embedded file name: source/keepass.py
  6. # Compiled at: 2019-02-02 20:55:37
  7. import sys, os, time
  8. os.system('./masterkeyauth_01_keygenass >/dev/null')
  9. NSA_MODE = False
  10. ALARM_SEC = 5
  11. import signal
  12.  
  13. def alarm_handler(signum, frame):
  14. print 'Timed out'
  15. fd = os.open('/tmp/key', os.O_WRONLY)
  16. os.write(fd, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
  17. os.close(fd)
  18. os._exit(0)
  19.  
  20.  
  21. signal.signal(signal.SIGALRM, alarm_handler)
  22. signal.alarm(ALARM_SEC)
  23. unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0)
  24. sys.stdout = unbuffered
  25. import tinydb, tinyrecord
  26. PASSWORDS_DB = tinydb.TinyDB('./passwords.kdbx')
  27. fd = os.open('/tmp/key', os.O_RDONLY)
  28. if fd < 0:
  29. print "Can't get NSA master key"
  30. exit()
  31. MASTER_KEY = os.read(fd, 16)
  32. os.close(fd)
  33. if len(MASTER_KEY) != 16:
  34. print 'Bad NSA master key'
  35. exit()
  36. with tinyrecord.transaction(PASSWORDS_DB) as (tr):
  37. tr.remove(tinydb.where('expire') < time.time())
  38. while True:
  39. print '\n __ __ _______ \n| |/ |.-----.-----.-----.| _ |.-----.-----.\n| < | -__| -__| _ || ||__ --|__ --|\n|__|\\__||_____|_____| __||___|___||_____|_____|\n |__| '
  40. print '[L] Login'
  41. print '[R] Register'
  42. print '[W] Who is registered'
  43. print '[Q] Quit'
  44. signal.alarm(ALARM_SEC)
  45. choice = raw_input().strip().upper()
  46. if choice == 'L':
  47. try:
  48. sys.stdout.write('Username: ')
  49. sys.stdout.flush()
  50. signal.alarm(ALARM_SEC)
  51. username = raw_input().strip()
  52. if len(username) < 3 or len(username) > 30:
  53. raise Exception('Length should be >= 3 and <= 30')
  54. sys.stdout.write('Password: ')
  55. sys.stdout.flush()
  56. signal.alarm(ALARM_SEC)
  57. password = raw_input().strip()
  58. if not NSA_MODE and not PASSWORDS_DB.search((tinydb.where('type') == 'user') & (tinydb.where('username') == username) & (tinydb.where('password') == password)):
  59. raise Exception('Bad username or password')
  60. print '%s logged in' % username
  61. while True:
  62. print
  63. print "=== %s's credential database ===" % username
  64. print '[S] Show credentials'
  65. print '[A] Add credentials'
  66. print '[P] Log in to website'
  67. print '[Q] Log out'
  68. signal.alarm(ALARM_SEC)
  69. choice = raw_input().strip().upper()
  70. if choice == 'S':
  71. print 'Credentials:'
  72. emptyList = True
  73. for i, u in enumerate(PASSWORDS_DB.search((tinydb.where('type') == 'cred') & (tinydb.where('owner') == username))):
  74. emptyList = False
  75. print '%d) Website: %s\tLogin: %s' % (i + 1, u['website'], u['login'])
  76.  
  77. if emptyList:
  78. print '(empty list)'
  79. elif choice == 'A':
  80. sys.stdout.write('Website: ')
  81. sys.stdout.flush()
  82. signal.alarm(ALARM_SEC)
  83. website = raw_input().strip()
  84. sys.stdout.write('Login: ')
  85. sys.stdout.flush()
  86. signal.alarm(ALARM_SEC)
  87. login = raw_input().strip()
  88. sys.stdout.write('Password: ')
  89. sys.stdout.flush()
  90. signal.alarm(ALARM_SEC)
  91. password = raw_input().strip()
  92. with tinyrecord.transaction(PASSWORDS_DB) as (tr):
  93. tr.insert({'expire': time.time() + 5400, 'type': 'cred', 'owner': username, 'website': website, 'login': login, 'password': password})
  94. print '%s@%s added' % (login, website)
  95. elif choice == 'P':
  96. sys.stdout.write('Website: ')
  97. sys.stdout.flush()
  98. signal.alarm(ALARM_SEC)
  99. website = raw_input().strip()
  100. emptyList = True
  101. for i, u in enumerate(PASSWORDS_DB.search((tinydb.where('type') == 'cred') & (tinydb.where('owner') == username) & (tinydb.where('website') == website))):
  102. emptyList = False
  103. print '%d) Website: %s\tLogin: %s\tPassword: %s' % (i + 1, u['website'], u['login'], u['password'])
  104.  
  105. if emptyList:
  106. print '(no credentials for %s)' % website
  107. elif choice == 'Q' or choice == '':
  108. break
  109.  
  110. except Exception as e:
  111. print e
  112.  
  113. elif choice == 'R':
  114. try:
  115. sys.stdout.write('Username: ')
  116. sys.stdout.flush()
  117. signal.alarm(ALARM_SEC)
  118. username = raw_input().strip()
  119. if len(username) < 3 or len(username) > 30:
  120. raise Exception('Length should be >= 3 and <= 30')
  121. sys.stdout.write('Password: ')
  122. sys.stdout.flush()
  123. signal.alarm(ALARM_SEC)
  124. password = raw_input().strip()
  125. for u in PASSWORDS_DB.search(tinydb.where('type') == 'user'):
  126. if u['username'] == username:
  127. raise Exception('User already exists: %s' % username)
  128.  
  129. with tinyrecord.transaction(PASSWORDS_DB) as (tr):
  130. tr.insert({'expire': time.time() + 5400, 'type': 'user', 'username': username, 'password': password})
  131. print '%s registered' % username
  132. except Exception as e:
  133. print e
  134.  
  135. elif choice == 'W':
  136. print 'They are registered:'
  137. emptyList = True
  138. for i, u in enumerate(PASSWORDS_DB.search(tinydb.where('type') == 'user')):
  139. emptyList = False
  140. print '%d) %s' % (i + 1, u['username'])
  141.  
  142. if emptyList:
  143. print '(empty list)'
  144. elif choice == 'NSA':
  145. try:
  146. print 'Sup. Provide knowledge of all AES keys in the world'
  147. chall = os.urandom(16)
  148. print chall.encode('hex')
  149. signal.alarm(ALARM_SEC)
  150. resp = raw_input().strip().decode('hex')
  151. import Crypto.Cipher.AES
  152. if resp == Crypto.Cipher.AES.new(MASTER_KEY).encrypt(chall):
  153. NSA_MODE = True
  154. print 'Hello.'
  155. else:
  156. raise Exception
  157. except:
  158. print 'Impostor.'
  159. os._exit(0)
  160.  
  161. elif choice == 'Q' or choice == '':
  162. break
  163.  
  164. print 'o/ Bye!'
  165. # okay decompiling keepass.pyc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement