<보안 study>/CTFs

[TamilCTF2021] Guesser

gosoeungduk 2021. 10. 7. 15:46
반응형

Guesser

#reversing #DotNet #IL Spy #z3


원본WriteUp - https://github.com/goseungduk/CTF_WriteUp/tree/master/Tamil_2021/rev/Guesser

처음에 바이너리를 IDA로 열어보니 .Net 바이너리로 인식하길래 바로 IL Spy 툴로 열어보았다.

소스가 매우 정직하게 잘 나오는 것을 확인할 수 있다.

Main 함수를 보면 처음에 Login 을 진행하는 것을 알 수 있는데, check 로직은 생각보다 매우 간단하다.

생각보다 어려운 로직이 없어서 실제로 풀때는 눈으로 그냥 보고 풀었지만, 소스 첨부도 해본다.

from z3 import *
s=Solver()
username=[BitVec('user_%i'%i,8) for i in range(0,7)]
password=[BitVec('pass_%i'%i,8) for i in range(0,5)]

#check part
s.add(username[0]^0x39==114)
s.add(username[0]+username[1]==127)
s.add(password[0]-17==54)
s.add(password[0]^password[1]==119)

#function_one part
s.add(password[2]^0x17==124)
s.add(password[2]+password[4]==192)
s.add(password[3]-14==103)

#function_two part
s.add(username[0]+username[2]==182)
s.add(username[2]-username[3]==10)
s.add(username[4]==ord('R'))
s.add(username[4]-username[5]==34)
s.add(username[6]-16==100)

s.check()
m=s.model()
result=sorted([(d, chr(m[d].as_long())) for d in m], key=lambda x:int(str(x[0]).split('_')[1]))
user=""
pw=""
for i in result:
    if(str(i[0]).split('_')[0]=="user"):
        user+=i[1]
    else:
        pw+=i[1]

print("TamilCTF{"+user+":"+pw+"}")

[결과]

Thank y0u!

.
.
.
.
.

Contact : a42873410@gmail.com

반응형

'<보안 study> > CTFs' 카테고리의 다른 글

[LineCTF2021] babysandbox  (1) 2022.03.08
[TamilCTF2021] HeyImAB  (0) 2021.10.07
[TamilCTF2021] digital_play  (0) 2021.10.07
[TamilCTF2021] Fool Me  (0) 2021.10.07
[Hack.lu 2019] no_risc_no_future  (0) 2019.12.21