CTF/리버싱

[HouseplantCTF] PZ - 리버싱 / Python

SecurityMan 2022. 6. 12. 11:00

 

어려운 Java 리버싱 문제를 풀고 난 후

 

다시 머리를 식혀주는 쉬운 문제

 

문제 제목부터 PZ (EZ-PZ) 이다.

(EZ : https://hackingstudypad.tistory.com/167)

 

반응형

 

문제 설명을 읽어보면 EZ 문제보다 조금 더 잘 만든거 같다고

 

아마 플래그를 얻지 못할것이라고 한다.

 

하지만 아주 쉽게 얻을 수 있다.

 

EZ문제도 그렇고 이 문제도 그렇고 리버싱 이라기보다 그냥 틀린그림찾기 정도가 아닐까 싶다.

 

 

이번에도 역시 pass1.py 파일이 주어진다.

 

 

IDLE을 이용해 py파일을 실행시켜 보았다.

 

Enter the password: 라는 문구가 나오고,

 

123을 입력해봤더니 Incorrect password! 라는 문구가 나온다.

 

그다음 뭔가 은근 기분나쁜 느낌의 노래같은걸 출력한다;

 

def catchecKpass():
  userinput = input("pwease enter youwr password... uwu~ nya!!: ")
  if userinput == "rtcp{iT5_n0T_s1mPlY_1n_tH3_C0d3}":
      return True
  else:
      return False

def checkpasss():
  userinput = input("Enter the password: ")
  if userinput == "rtcp{wH4t_aR3_y0u_SaY1nG?}":
      return True
  else:
      return False

def acheckpass():
  userinput = input("Enter the password: ")
  if userinput == "rtcp{1_cAnt_QuiT3_hE@r_Y0u!}":
      return True
  else:
      return False

def ccheckpass():
  userinput = input("Enter the password: ")
  if userinput == "rtcp{sPe4k_Up_4_b1T}":
      return True
  else:
      return False

def checkpass():
  userinput = input("Enter the password: ")
  if userinput == "rtcp{iT5_s1mPlY_1n_tH3_C0d3}":
      return True
  else:
      return False

def bcheckpass():
  userinput = input("Enter the password: ")
  if userinput == "rtcp{tH1s_i5_4_R3aL_fLaG_t0TalLy}":
      return True
  else:
      return False
    
def catcheckpass():
  userinput = input("pwease enter youwr password... uwu~ nya!!: ")
  if userinput == "rtcp{iT5_s1mPlY_1n_tH3_C0d3}":
      return True
  else:
      return False

def main():
    access = checkpass()
    if access == True:
        print("Unlocked. The flag is the password.")
        print("b-but i wunna show off my catswpeak uwu~... why wont you let me do my nya!!")
        exit()
    else:
        print("Incorrect password!")
        print("sowwy but now you gunnu have to listen to me spweak in cat giwrl speak uwu~")
        catmain()

def catmain():
    access = catcheckpass()
    if access == True:
        print("s-senpai... i unwocked it fowr you.. uwu~")
        print("t-the fwlag is... the password.. nya!")
        exit()
    else:
        print("sowwy but that wasnt quite rwight nya~")
        catmain()

access = False
main()

 

pass1.py 파일의 내용은 위와 같다.

 

길어보이는데 쓸데없는 내용이 넘 많아서 그렇다.

 

프로그램은 main() 함수부터 시작하니 main 함수부터 살펴보자.

 

 

맨 아래쪽에 main 함수가 있는데

 

밑에 catmain 함수도 보인다.

 

당연한 얘기지만 catmain 함수는 아무런 기능도 하지 않는 훼이크다..

 

안에 적힌 내용을 봐도 아주 장난 가득한 내용이다.

 

main 함수에서는 checkpass() 함수의 결과를 access 변수에 담아주고,

 

access의 값이 True면 Unlocked. 라는 문구를 출력한다.

 

그럼 이제 위에서 checkpass() 함수를 찾아주면 된다.

 

 

checkpass 함수 역시 글자를 조금 다르게 해서 헷갈리게 만든 여러 다른 함수들 사이에 있다.

(ccheckpass, checkpasss 등..)

 

그사이에 있는 checkpass 함수를 잘 찾아서 플래그를 확인해 주면 된다.

 

 

프로그램을 실행시키고 password에 플래그를 넣어주면

 

정상적으로 Unlocked 라고 뜨는걸 볼 수 있다.

반응형