# 50-fifty [challenge_file](https://github.com/teambi0s/InCTF/raw/master/2018/Reversing/50-fifty/Handout/50-fifty.exe) This challenge takes a string and an integer and does some checks on the inputs Using Z3 solver we can solve those constraints ```py from z3 import * #Xyz #------------------------------------------------------------------------------- a = [ BitVec("v%s"%i,32) for i in range(6)] num=BitVec('num',32) b=[70, 97, 90, 109, 107, 94] for i in range(6): b[i]+=18 s=Solver() s.add(num==((a[0]+a[1]+a[2]+a[3]+a[4]+a[5])%10)) for i in range(6): s.add(a[i]==b[i]^num) s.check() b=s.model() name='' for i in a: name+=chr(int(str(b[i]))) print("name: "+name) v6 = b[num] #------------------------------------------------------------------------------- #xyz v4=BitVec('v4',32) v5=BitVec('v5',32) s1=Solver() s1.add(v5 == (v4/306783371)) str1='qcwuycj{~s' str2='asgeiszknc' for i in range(10): s1.add(ord(str2[i])==((v5+v6)^ord(str1[i]))) s1.check() b=s1.model() print("code: "+str(b[v4])) #------------------------------------------------------------------------------- #xyZ s=Solver() a = [ BitVec("a%s"%i,32) for i in range(32)] arr=[0x7b,0x7c,0x71,0x66,0x74,0x69,0x6b,0x21 ,0x26,0x7a,0x4d,0x23,0x66,0x4d,0x65,0x26 ,0x61,0x4d,0x21,0x73,0x27,0x61,0x27,0x6b ,0x4d,0x60,0x23,0x75,0x7a,0x25,0x33,0x6f] for i in range(32): s.add(a[i] == ((v6+v6) ^ arr[i])) s.check() aa = s.model() print("flag: ",end='') for i in a: print(chr(int(str(aa[i]))),end='') print() ``` ##### Flag: `inctf{y34h_1t_w4s_3a5s5y_r1gh7!}` ###### tags: `inctf` `Z3`