PicotCTF2018 - Hideout - Scriptme
Objectives
Can you understand the language and answer the questions to retrieve the flag? Connect to the service with nc 2018shell.picoctf.com 22973
So here are we connect up to the shell and are presented with the following Logic
We need to figure out how this logic works, the telnet session has a timeout so manually doing the math here is not possible. So we need to write a script that will figure out the answers
Rules:
() + () = ()() => [combine]
((())) + () = ((())()) => [absorb-right]
() + ((())) = (()(())) => [absorb-left]
(())(()) + () = (())(()()) => [combined-absorb-right]
() + (())(()) = (()())(()) => [combined-absorb-left]
(())(()) + ((())) = ((())(())(())) => [absorb-combined-right]
((())) + (())(()) = ((())(())(())) => [absorb-combined-left]
() + (()) + ((())) = (()()) + ((())) = ((()())(())) => [left-associative]
Example:
(()) + () = () + (()) = (()())
Solution
So it took me a while to figure out the logic here, but once I got it it basically falls into
what is the depth of the parenthesis on each side of the operator
if They are equal in depth you simply combine them together
however if one is large it essentially eats the small group by opening the closest parenthesis inserts the smaller group and then puts the rest of the bigger side back in. Like I've mentioned abunch of time I'm not a coder by profession so it took me alot of time to script this out and work the way its supposed to. I just copy and pasted the formula from the telnet session into my python program
Formula = input("F: ")Formula = Formula.replace(" ","")
Let's start with a warmup.
() + ((())()) = ???
> (()(())())
Correct!
Okay, now we're cookin!
() + (()(())) + (()()) = ???
> (()()(())(()()))
Correct!
Alright see if you can get this one.
() + ()() + ((())()) + (()(())) + (()()()(())()()) = ???
> (()()()(())())(()(()))(()()()(())()())
Correct!
This one's a little bigger!
(()) + (((((()))))(((())))((()))(())()) + (()()()) + () + (()()()) + ()()() + (()()()) + (()(((()()())()())()())) + (()((((
)()())()())()())) + (()()()()()()()()) = ???
> ((())((((()))))(((())))((()))(())()(()()())()(()()())()()()(()()())(()(((()()())()())()()))(()(((()()())()())()()))(()()(
)()()()()()))
Correct!
Ha. No more messin around. Final Round.
((()()())((()(())((()))(((())))()()))()) + ((()()()())(()()()()()()()())((((()))))(((())))((()))(())()) + (()()()()(((()()(
))()())()())) + ((()())(()()())((()(())((()))(((())))()()))()) + ((()()())(()()())()()()(())()()) + ((()()()()()()()(())()(
))((((()))))(((())))((()))(())()) + ((()()(())(()()()()()()()()))((()())()())()) + (()()(())()()())(()()()(())()()) + ((()(
())()()()())((((()))))(((())))((()))(())()) + ((()()())(())())(()()()(())()()) + (()())(()()()()()()()()) + ((()()(()))(()(
)()(())()())((((()))))(((())))((()))(())()) + ((()())(())()()()(())()()) + ((()(())()()())()(())((()))(((())))((((()))))) +
((()()()()(())()())()(())((()))(((())))((((()))))) + (((()())()(()))()(())((()))(((())))((((()))))) + (((()()(()))()(((()(
)())()())()()))()(())((()))(((())))((((()))))) + (())(()()()()()()()()) + ((()()()()()(((()()())()())()()))((((()))))(((())
))((()))(())()) + ((()()(()))((()())()())()) + ((()())((()())()())()) + (((()()()(())()())((()())()())())()(((()()())()())(
)())) + ((()()())()(())()()) + ((()()()())()(((()()())()())()())) + (((()()()()()()()())()(((()()())()())()()))((((()))))((
(())))((()))(())()) + ((()()())(()()())()(((()()())()())()())) + (((()())((()())()())())()(((()()())()())()())) + ((()()())
()(()))((())()) + ((()(())()(()()()))((()())()())()) + (()()()()()()()()()()()) + ((()()()()()()()()())()(((()()())()())()(
))) + (()()()(())((()))(((())))((((())))))(((((()))))(((())))((()))(())()) + (()()(())()())(()()()(())()()) + ((()()(()))((
()())()())()) + (()()()()()((()(())((()))(((())))()()))()) + ((()()()()()())((()())()())()) + (()()()()()()()()(())()()) +
(()()()()()(((()()())()())()())) + ((()()(()))((())())()(((()()())()())()())) + (((()()(()))((()())()())())()(((()()())()()
)()())) + (()()()())(()()()) + ((()())(())()()()()) + ((()()()()()())((()(())((()))(((())))()()))()) + ((()()())()(())((())
)(((())))((((()))))) + ((()())(()()())()(((()()())()())()())) + ((()()()()(((()()())()())()()))((((()))))(((())))((()))(())
()) + ((())()(()()())(()()()()()()()())) + (((()()())((()())()())())()(((()()())()())()())) + ((((()())()())())((()(())((()
))(((())))()()))()(((((()))))(((())))((()))(())())) + ((()()()())()(((()()())()())()())) = ???
> ((()()())((()(())((()))(((())))()()))()((()()()())(()()()()()()()())((((()))))(((())))((()))(())())(()()()()(((()()())()(
))()())))((()())(()()())((()(())((()))(((())))()()))()((()()())(()()())()()()(())()())((()()()()()()()(())()())((((()))))((
(())))((()))(())())((()()(())(()()()()()()()()))((()())()())())(()()(())()()())(()()()(())()())((()(())()()()())((((()))))(
((())))((()))(())())((()()())(())())(()()()(())()())(()())(()()()()()()()())((()()(()))(()()()(())()())((((()))))(((())))((
()))(())())((()())(())()()()(())()())((()(())()()())()(())((()))(((())))((((())))))((()()()()(())()())()(())((()))(((())))(
(((())))))(((()())()(()))()(())((()))(((())))((((())))))(((()()(()))()(((()()())()())()()))()(())((()))(((())))((((())))))(
())(()()()()()()()())((()()()()()(((()()())()())()()))((((()))))(((())))((()))(())())((()()(()))((()())()())())((()())((()(
))()())())(((()()()(())()())((()())()())())()(((()()())()())()()))((()()())()(())()())((()()()())()(((()()())()())()()))(((
()()()()()()()())()(((()()())()())()()))((((()))))(((())))((()))(())())((()()())(()()())()(((()()())()())()()))(((()())((()
())()())())()(((()()())()())()()))((()()())()(()))((())())((()(())()(()()()))((()())()())())(()()()()()()()()()()())((()()(
)()()()()()())()(((()()())()())()()))(()()()(())((()))(((())))((((())))))(((((()))))(((())))((()))(())())(()()(())()())(()(
)()(())()())((()()(()))((()())()())()))(()()()()()((()(())((()))(((())))()()))()((()()()()()())((()())()())())(()()()()()()
()()(())()())(()()()()()(((()()())()())()()))((()()(()))((())())()(((()()())()())()()))(((()()(()))((()())()())())()(((()()
())()())()()))(()()()())(()()())((()())(())()()()()))((()()()()()())((()(())((()))(((())))()()))()((()()())()(())((()))((((
))))((((())))))((()())(()()())()(((()()())()())()()))((()()()()(((()()())()())()()))((((()))))(((())))((()))(())())((())()(
()()())(()()()()()()()()))(((()()())((()())()())())()(((()()())()())()())))((((()())()())())((()(())((()))(((())))()()))()(
((((()))))(((())))((()))(())())((()()()())()(((()()())()())()())))
Correct!
Congratulations, here's your flag: picoCTF{5cr1pt1nG_l1k3_4_pRo_b184d89d}
Objectives
Can you understand the language and answer the questions to retrieve the flag? Connect to the service with nc 2018shell.picoctf.com 22973
So here are we connect up to the shell and are presented with the following Logic
We need to figure out how this logic works, the telnet session has a timeout so manually doing the math here is not possible. So we need to write a script that will figure out the answers
Rules:
() + () = ()() => [combine]
((())) + () = ((())()) => [absorb-right]
() + ((())) = (()(())) => [absorb-left]
(())(()) + () = (())(()()) => [combined-absorb-right]
() + (())(()) = (()())(()) => [combined-absorb-left]
(())(()) + ((())) = ((())(())(())) => [absorb-combined-right]
((())) + (())(()) = ((())(())(())) => [absorb-combined-left]
() + (()) + ((())) = (()()) + ((())) = ((()())(())) => [left-associative]
Example:
(()) + () = () + (()) = (()())
Solution
So it took me a while to figure out the logic here, but once I got it it basically falls into
what is the depth of the parenthesis on each side of the operator
if They are equal in depth you simply combine them together
however if one is large it essentially eats the small group by opening the closest parenthesis inserts the smaller group and then puts the rest of the bigger side back in. Like I've mentioned abunch of time I'm not a coder by profession so it took me alot of time to script this out and work the way its supposed to. I just copy and pasted the formula from the telnet session into my python program
Formula = input("F: ")Formula = Formula.replace(" ","")
formula_list = []formula_list = Formula.split('+')list_length = len(formula_list)
max_for_each_list = []
def get_depth(): #find the depths of each cluster depth = [] current_depth = 0 int_i = formula_list.index(i) for w in formula_list[int_i]: if w =='(': current_depth +=1 else: depth.append(current_depth) current_depth -=1 return max(depth)
def get_depth2(answerish2): current_depth2 = 0 depth2 = [] for w in answerish2: if w =='(': current_depth2 +=1 else: depth2.append(current_depth2) current_depth2 -=1 return(max(depth2))
for i in formula_list: counter_formula_list = 0 #print("For Formula: ",formula_list[counter_formula_list]) returned = str(get_depth()) max_for_each_list.extend(returned) counter_formula_list +=1
def mathseasy(left,right,formula_left,formula_right): #print("left depth is: ",left) #print("right depth is: ",right) #print("formula_left: ", formula_left) #print("formula_right: ", formula_right) left = int(left) right = int(right) if left == right: #print("they is equal") solution = formula_left + formula_right elif left < right: #print("absorb left") solution = formula_right[0] + formula_left + formula_right[1:] else: #print("absorb right") solution = formula_left[0:-1] +formula_right+formula_left[-1] return(solution)
if list_length > 2: temp = 0 temp2 = 1 answerish = "" while temp2 < list_length: if answerish == "": answerish = mathseasy(max_for_each_list[temp],max_for_each_list[temp2],formula_list[temp],formula_list[temp2]) # print("anwerish was empty now its: " ,answerish) answerish_depth = int(get_depth2(answerish)) #print("answerish depth: ",answerish_depth) else: #print("answerish_depth: ", answerish_depth) #print("else in big list") #print("") #print ("max_for_each_list[temp2] is: ", max_for_each_list[temp2]) #print("formula_list[temp2] is: ", formula_list[temp2]) answerish = mathseasy(answerish_depth,max_for_each_list[temp2],answerish,formula_list[temp2]) #print("answerish is: ", answerish) answerish_depth = int(get_depth2(answerish)) temp += 1 temp2 += 1 answer = answerish else: answer = mathseasy(max_for_each_list[0],max_for_each_list[1],formula_list[0],formula_list[1]) print("answer is: ",answer)
Let's start with a warmup.
() + ((())()) = ???
> (()(())())
Correct!
Okay, now we're cookin!
() + (()(())) + (()()) = ???
> (()()(())(()()))
Correct!
Alright see if you can get this one.
() + ()() + ((())()) + (()(())) + (()()()(())()()) = ???
> (()()()(())())(()(()))(()()()(())()())
Correct!
This one's a little bigger!
(()) + (((((()))))(((())))((()))(())()) + (()()()) + () + (()()()) + ()()() + (()()()) + (()(((()()())()())()())) + (()((((
)()())()())()())) + (()()()()()()()()) = ???
> ((())((((()))))(((())))((()))(())()(()()())()(()()())()()()(()()())(()(((()()())()())()()))(()(((()()())()())()()))(()()(
)()()()()()))
Correct!
Ha. No more messin around. Final Round.
((()()())((()(())((()))(((())))()()))()) + ((()()()())(()()()()()()()())((((()))))(((())))((()))(())()) + (()()()()(((()()(
))()())()())) + ((()())(()()())((()(())((()))(((())))()()))()) + ((()()())(()()())()()()(())()()) + ((()()()()()()()(())()(
))((((()))))(((())))((()))(())()) + ((()()(())(()()()()()()()()))((()())()())()) + (()()(())()()())(()()()(())()()) + ((()(
())()()()())((((()))))(((())))((()))(())()) + ((()()())(())())(()()()(())()()) + (()())(()()()()()()()()) + ((()()(()))(()(
)()(())()())((((()))))(((())))((()))(())()) + ((()())(())()()()(())()()) + ((()(())()()())()(())((()))(((())))((((()))))) +
((()()()()(())()())()(())((()))(((())))((((()))))) + (((()())()(()))()(())((()))(((())))((((()))))) + (((()()(()))()(((()(
)())()())()()))()(())((()))(((())))((((()))))) + (())(()()()()()()()()) + ((()()()()()(((()()())()())()()))((((()))))(((())
))((()))(())()) + ((()()(()))((()())()())()) + ((()())((()())()())()) + (((()()()(())()())((()())()())())()(((()()())()())(
)())) + ((()()())()(())()()) + ((()()()())()(((()()())()())()())) + (((()()()()()()()())()(((()()())()())()()))((((()))))((
(())))((()))(())()) + ((()()())(()()())()(((()()())()())()())) + (((()())((()())()())())()(((()()())()())()())) + ((()()())
()(()))((())()) + ((()(())()(()()()))((()())()())()) + (()()()()()()()()()()()) + ((()()()()()()()()())()(((()()())()())()(
))) + (()()()(())((()))(((())))((((())))))(((((()))))(((())))((()))(())()) + (()()(())()())(()()()(())()()) + ((()()(()))((
()())()())()) + (()()()()()((()(())((()))(((())))()()))()) + ((()()()()()())((()())()())()) + (()()()()()()()()(())()()) +
(()()()()()(((()()())()())()())) + ((()()(()))((())())()(((()()())()())()())) + (((()()(()))((()())()())())()(((()()())()()
)()())) + (()()()())(()()()) + ((()())(())()()()()) + ((()()()()()())((()(())((()))(((())))()()))()) + ((()()())()(())((())
)(((())))((((()))))) + ((()())(()()())()(((()()())()())()())) + ((()()()()(((()()())()())()()))((((()))))(((())))((()))(())
()) + ((())()(()()())(()()()()()()()())) + (((()()())((()())()())())()(((()()())()())()())) + ((((()())()())())((()(())((()
))(((())))()()))()(((((()))))(((())))((()))(())())) + ((()()()())()(((()()())()())()())) = ???
> ((()()())((()(())((()))(((())))()()))()((()()()())(()()()()()()()())((((()))))(((())))((()))(())())(()()()()(((()()())()(
))()())))((()())(()()())((()(())((()))(((())))()()))()((()()())(()()())()()()(())()())((()()()()()()()(())()())((((()))))((
(())))((()))(())())((()()(())(()()()()()()()()))((()())()())())(()()(())()()())(()()()(())()())((()(())()()()())((((()))))(
((())))((()))(())())((()()())(())())(()()()(())()())(()())(()()()()()()()())((()()(()))(()()()(())()())((((()))))(((())))((
()))(())())((()())(())()()()(())()())((()(())()()())()(())((()))(((())))((((())))))((()()()()(())()())()(())((()))(((())))(
(((())))))(((()())()(()))()(())((()))(((())))((((())))))(((()()(()))()(((()()())()())()()))()(())((()))(((())))((((())))))(
())(()()()()()()()())((()()()()()(((()()())()())()()))((((()))))(((())))((()))(())())((()()(()))((()())()())())((()())((()(
))()())())(((()()()(())()())((()())()())())()(((()()())()())()()))((()()())()(())()())((()()()())()(((()()())()())()()))(((
()()()()()()()())()(((()()())()())()()))((((()))))(((())))((()))(())())((()()())(()()())()(((()()())()())()()))(((()())((()
())()())())()(((()()())()())()()))((()()())()(()))((())())((()(())()(()()()))((()())()())())(()()()()()()()()()()())((()()(
)()()()()()())()(((()()())()())()()))(()()()(())((()))(((())))((((())))))(((((()))))(((())))((()))(())())(()()(())()())(()(
)()(())()())((()()(()))((()())()())()))(()()()()()((()(())((()))(((())))()()))()((()()()()()())((()())()())())(()()()()()()
()()(())()())(()()()()()(((()()())()())()()))((()()(()))((())())()(((()()())()())()()))(((()()(()))((()())()())())()(((()()
())()())()()))(()()()())(()()())((()())(())()()()()))((()()()()()())((()(())((()))(((())))()()))()((()()())()(())((()))((((
))))((((())))))((()())(()()())()(((()()())()())()()))((()()()()(((()()())()())()()))((((()))))(((())))((()))(())())((())()(
()()())(()()()()()()()()))(((()()())((()())()())())()(((()()())()())()())))((((()())()())())((()(())((()))(((())))()()))()(
((((()))))(((())))((()))(())())((()()()())()(((()()())()())()())))
Correct!
Congratulations, here's your flag: picoCTF{5cr1pt1nG_l1k3_4_pRo_b184d89d}
Comments
Post a Comment