mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2025-06-29 06:05:03 +07:00
finish 4.5; add 6.2.2
This commit is contained in:
42
src/Others/4.5_z3/exp.py
Normal file
42
src/Others/4.5_z3/exp.py
Normal file
@ -0,0 +1,42 @@
|
||||
from z3 import *
|
||||
|
||||
solver = Solver()
|
||||
|
||||
serial = [Int("serial[%d]" % i) for i in range(20)]
|
||||
|
||||
solver.add(serial[15] + serial[4] == 10)
|
||||
solver.add(serial[1] * serial[18] == 2 )
|
||||
solver.add(serial[15] / serial[9] == 1)
|
||||
solver.add(serial[17] - serial[0] == 4)
|
||||
solver.add(serial[5] - serial[17] == -1)
|
||||
solver.add(serial[15] - serial[1] == 5)
|
||||
solver.add(serial[1] * serial[10] == 18)
|
||||
solver.add(serial[8] + serial[13] == 14)
|
||||
solver.add(serial[18] * serial[8] == 5)
|
||||
solver.add(serial[4] * serial[11] == 0)
|
||||
solver.add(serial[8] + serial[9] == 12)
|
||||
solver.add(serial[12] - serial[19] == 1)
|
||||
solver.add(serial[9] % serial[17] == 7)
|
||||
solver.add(serial[14] * serial[16] == 40)
|
||||
solver.add(serial[7] - serial[4] == 1)
|
||||
solver.add(serial[6] + serial[0] == 6)
|
||||
solver.add(serial[2] - serial[16] == 0)
|
||||
solver.add(serial[4] - serial[6] == 1)
|
||||
solver.add(serial[0] % serial[5] == 4)
|
||||
solver.add(serial[5] * serial[11] == 0)
|
||||
solver.add(serial[10] % serial[15] == 2)
|
||||
solver.add(serial[11] / serial[3] == 0) # serial[3] can't be 0
|
||||
solver.add(serial[14] - serial[13] == -4)
|
||||
solver.add(serial[18] + serial[19] == 3)
|
||||
|
||||
for i in range(20):
|
||||
solver.add(serial[i] >= 0, serial[i] < 10)
|
||||
|
||||
solver.add(serial[3] != 0)
|
||||
|
||||
if solver.check() == sat:
|
||||
m = solver.model()
|
||||
for d in m.decls():
|
||||
print("%s = %s" % (d.name(), m[d]))
|
||||
|
||||
print("".join([str(m.eval(serial[i])) for i in range(20)]))
|
72
src/Others/4.5_z3/harder_serial.py
Normal file
72
src/Others/4.5_z3/harder_serial.py
Normal file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python
|
||||
# Looks like the serial number verification for space ships is similar to that
|
||||
# of your robot. Try to find a serial that verifies for this space ship
|
||||
|
||||
import sys
|
||||
print ("Please enter a valid serial number from your RoboCorpIntergalactic purchase")
|
||||
if len(sys.argv) < 2:
|
||||
print ("Usage: %s [serial number]"%sys.argv[0])
|
||||
exit()
|
||||
|
||||
print ("#>" + sys.argv[1] + "<#")
|
||||
|
||||
def check_serial(serial):
|
||||
if (not set(serial).issubset(set(map(str,range(10))))):
|
||||
print ("only numbers allowed")
|
||||
return False
|
||||
if len(serial) != 20:
|
||||
return False
|
||||
if int(serial[15]) + int(serial[4]) != 10:
|
||||
return False
|
||||
if int(serial[1]) * int(serial[18]) != 2:
|
||||
return False
|
||||
if int(serial[15]) / int(serial[9]) != 1:
|
||||
return False
|
||||
if int(serial[17]) - int(serial[0]) != 4:
|
||||
return False
|
||||
if int(serial[5]) - int(serial[17]) != -1:
|
||||
return False
|
||||
if int(serial[15]) - int(serial[1]) != 5:
|
||||
return False
|
||||
if int(serial[1]) * int(serial[10]) != 18:
|
||||
return False
|
||||
if int(serial[8]) + int(serial[13]) != 14:
|
||||
return False
|
||||
if int(serial[18]) * int(serial[8]) != 5:
|
||||
return False
|
||||
if int(serial[4]) * int(serial[11]) != 0:
|
||||
return False
|
||||
if int(serial[8]) + int(serial[9]) != 12:
|
||||
return False
|
||||
if int(serial[12]) - int(serial[19]) != 1:
|
||||
return False
|
||||
if int(serial[9]) % int(serial[17]) != 7:
|
||||
return False
|
||||
if int(serial[14]) * int(serial[16]) != 40:
|
||||
return False
|
||||
if int(serial[7]) - int(serial[4]) != 1:
|
||||
return False
|
||||
if int(serial[6]) + int(serial[0]) != 6:
|
||||
return False
|
||||
if int(serial[2]) - int(serial[16]) != 0:
|
||||
return False
|
||||
if int(serial[4]) - int(serial[6]) != 1:
|
||||
return False
|
||||
if int(serial[0]) % int(serial[5]) != 4:
|
||||
return False
|
||||
if int(serial[5]) * int(serial[11]) != 0:
|
||||
return False
|
||||
if int(serial[10]) % int(serial[15]) != 2:
|
||||
return False
|
||||
if int(serial[11]) / int(serial[3]) != 0:
|
||||
return False
|
||||
if int(serial[14]) - int(serial[13]) != -4:
|
||||
return False
|
||||
if int(serial[18]) + int(serial[19]) != 3:
|
||||
return False
|
||||
return True
|
||||
|
||||
if check_serial(sys.argv[1]):
|
||||
print ("Thank you! Your product has been verified!")
|
||||
else:
|
||||
print ("I'm sorry that is incorrect. Please use a valid RoboCorpIntergalactic serial number")
|
Reference in New Issue
Block a user