Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. from z3 import *
  2. import ipdb
  3.  
  4. # "String" of symbolic integer "bytes".
  5. b = [Int('b_{}'.format(i)) for i in range(23)]
  6.  
  7. s = Solver()
  8.  
  9. # We know this part.
  10. s.add(b[0] == ord('c'))
  11. s.add(b[1] == ord('y'))
  12. s.add(b[2] == ord('b'))
  13. s.add(b[3] == ord('e'))
  14. s.add(b[4] == ord('a'))
  15. s.add(b[5] == ord('r'))
  16. s.add(b[6] == ord('s'))
  17.  
  18. s.add(b[9] - b[3] - b[14] - b[16] == -114)
  19. s.add(b[6] + b[17] * b[0] == 10213 )
  20. s.add(b[14] * b[21] - b[10] * b[10] == -6190 )
  21. s.add(b[20] + b[12] - b[16] == 112 )
  22. s.add(b[6] + b[21] + b[11] == 261)
  23. s.add(b[3] * b[1] + b[10] * b[13] == 20201)
  24. s.add(b[8] + b[16] * b[7] == 6601)
  25. s.add(b[22] * b[19] - b[9] == 6290)
  26. s.add(b[12] * b[14] * b[21] == 184275)
  27. s.add(b[4] - b[17] * b[15] - b[19] == -4952)
  28. s.add(b[1] * b[1] - b[18] == 14592)
  29. s.add(b[10] - (b[8] + b[22]) == -112)
  30. s.add(b[1] - b[4] == 24)
  31. s.add(b[21] * b[19] * b[5] == 366282)
  32. s.add(b[8] + b[15] + b[11] * b[14] == 3866)
  33. s.add(b[16] + b[1] == 174)
  34. s.add(b[11] - b[6] * b[4] * b[15] == -546512)
  35. s.add(b[16] * b[21] * b[4] - b[5] == 323769)
  36. s.add(b[11] * b[3] - b[17] * b[4] == -1511)
  37. s.add(b[9] + b[16] - b[5] * b[14] == -4992)
  38. s.add(b[21] - b[6] * b[22] == -14312)
  39. s.add(b[0] - b[19] * b[17] * b[6] == -598131)
  40.  
  41. # Attempt to determine if the constraints can be satisfied.
  42. if s.check() == sat:
  43. model = s.model()
  44.  
  45. # Split out the integer tag at the end of the byte name.
  46. def z3_byte_comparator(b):
  47. return int(str(b).split('_')[1])
  48.  
  49. # This is gross, I know.
  50. ordered_results = sorted([byte for byte in model], key = z3_byte_comparator)
  51. result_characters = [chr(int(str(model[byte]))) for byte in ordered_results]
  52. print ''.join(result_characters)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement