Advertisement
xGeek

Untitled

Mar 25th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. from z3 import *
  2. import base64
  3. import os
  4.  
  5. solver = Solver()
  6.  
  7. input = []
  8. for i in range(0x24):
  9. input.append(BitVec('b%i' % i, 8))
  10.  
  11.  
  12. for i in range(0x24):
  13. solver.add(input[i] >= 48)
  14. solver.add(input[i] <= 122)
  15.  
  16. solver.add(input[0] == 0x63)
  17.  
  18. solver.add(input[2] == ord("V"))
  19.  
  20. # solver.add(input[0xa] == ord('V'))
  21.  
  22. solver.add(input[0xa] == input[2])
  23.  
  24. solver.add(input[1] == 0x32)
  25.  
  26. solver.add(input[3] == 0x6a)
  27.  
  28. solver.add(input[0] + 1 == input[4])
  29.  
  30. solver.add(input[0xc] == input[4] - 1)
  31. solver.add(input[4] - 1 == input[0x16])
  32. solver.add(input[4] - 1 == input[0x18])
  33.  
  34. solver.add(input[0x23] == input[0xb] + 9) # maybe 22
  35.  
  36. solver.add(input[3] - 0x20 == input[6])
  37.  
  38. solver.add(input[0xb] == 0x30)
  39. solver.add(input[0x17] == 0x30)
  40.  
  41. solver.add(input[0] - 1 == input[8])
  42.  
  43. solver.add(input[4] + 2 == input[0x1b])
  44. solver.add(input[4] + 2 == input[0x1f])
  45.  
  46. solver.add(input[0x1b] + 7 == input[9])
  47. solver.add(input[0x1b] + 7 == input[0x19])
  48.  
  49. solver.add(input[1] + 1 == input[0xd])
  50. solver.add(input[1] + 1 == input[0x11])
  51. solver.add(input[1] + 1 == input[0x15])
  52.  
  53. solver.add(input[7] == 0x70)
  54.  
  55. solver.add(input[0xf] == input[7] + 3)
  56.  
  57. solver.add(input[0xf] + 1 == input[0xe])
  58.  
  59. solver.add(input[0x13] == 0x7a)
  60. solver.add(input[0] - 0x21 == input[0x22])
  61.  
  62.  
  63. solver.add(input[5] == ord('X'))
  64. solver.add(input[0x14] == ord('X'))
  65. solver.add(input[0x1d] == ord('X'))
  66. solver.add(input[0x21] == ord('X'))
  67.  
  68. # solver.add(0x58 ^ input[5] ^ input[0x14] ^ input[0x1d] ^ input[0x21] == 0x58)
  69.  
  70.  
  71. solver.add(input[0x1a] == 0x31)
  72. solver.add(input[9] - 0x20 == input[0x10])
  73. solver.add(input[0x10] == input[0x1c])
  74.  
  75. solver.add(input[1] == 0x32)
  76.  
  77. solver.add(input[0x7] - 0x1e == input[0x12])
  78.  
  79. solver.add(input[0x12] == input[0x1e])
  80.  
  81. solver.add(input[0x4] == input[0x20])
  82.  
  83.  
  84. print("Solving...")
  85. # Solve the equations
  86.  
  87. print(solver.check())
  88. modl = solver.model()
  89. # Create an ASCII string from the resulting bytes
  90. res = ""
  91. for obj in input:
  92. try:
  93. c = modl[obj].as_long()
  94. print('b%i: %x' % (i, c))
  95. res = res + chr(c)
  96. except:
  97. pass
  98. print("Result: " + res)
  99. print(base64.b64decode(res))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement