Advertisement
Guest User

Untitled

a guest
May 2nd, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. from z3 import *
  2.  
  3. def ascii_printable(x):
  4. return And(65<= x, x <= 122)
  5.  
  6. def generate_ascii_printable_string(base_name, size, solver):
  7. bytes = [BitVec('%s%d' % (base_name, i), 8) for i in range(size)]
  8. solver.add(And(map(ascii_printable, bytes)))
  9. return bytes
  10.  
  11. def str_to_BitVecVals8(s):
  12. return map(lambda x: BitVecVal(ord(x), 8),list(s))
  13.  
  14. def voyelleInterdit(solver,username,interdit):
  15. for i in range (0,len(username)):
  16. for j in range (0,len(interdit)):
  17. s.add(username[i]!=interdit[j])
  18.  
  19. def doublonInterdit(solver,username):
  20. for i in range (0,len(username)):
  21. for j in range (0,len(username)):
  22. if i != j:
  23. s.add(username[i]!=username[j])
  24.  
  25. def fixVoyelleInterdit(string, solver):
  26. username = generate_ascii_printable_string(string, len(string), s)
  27. for i in range(len(string)):
  28. s.add(username[i] == ord(string[i]))
  29. return username
  30.  
  31. def differentChar(solver,password,username):
  32. for i in range (0,len(password)):
  33. for j in range (0,len(username)):
  34. s.add(password[i] != username[j])
  35.  
  36. def croissant(solver,username):
  37. for i in range (0,len(username)-1):
  38. s.add(username[i] < username[i+1])
  39.  
  40. def decroissant(solver,password):
  41. for i in range (0,len(password)-1):
  42. s.add(password[i] > password[i+1])
  43.  
  44. def sameSizeBin(solver,username,password):
  45. s.add(sum([ord(i) for i in username]) == sum([ord(i) for i in password]))
  46.  
  47.  
  48. for i in range (8,15):
  49. s = Solver()
  50. username = generate_ascii_printable_string("username",i,s)
  51. password = generate_ascii_printable_string("password",i,s)
  52. # s.add(len(username)!=len(password))
  53.  
  54. interdit = fixVoyelleInterdit("aeiuoy",s)
  55. voyelleInterdit(s,username,interdit)
  56. voyelleInterdit(s,password,interdit)
  57. doublonInterdit(s,username)
  58. doublonInterdit(s,password)
  59. differentChar(s,password,username)
  60. croissant(s,username)
  61. decroissant(s,password)
  62. sameSizeBin(s,username,password)
  63.  
  64. while s.check() == sat:
  65. m = s.model()
  66. s.add(([sym() != m[sym] for sym in m.decls()]))
  67. print 'username:' + ''.join(chr(m[i].as_long()) for i in username)
  68. print 'password:' + ''.join(chr(m[i].as_long()) for i in password)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement