티스토리 뷰

write up

YISF 2018 reversing 50

slyfizz 2018. 8. 16. 22:55


이문제는 내가 순천향대 정보보호 페스티벌에 나가서 몇시간을 투자했지만 풀지 못했었던 문제이다.하지만 오늘 다른 사람의 wrtie up의 한 부분을 보고 내가 연산실수를 해서 풀지 못하였다는 사실이 아쉬워서 이해한 내용들을 바탕으로 write up을 쓴다.


주의사항: 내가 이해한 방식으로 write up을 작성하였으므로 객관적으로 봤을 때 틀린 부분이 있을 수 있음


함수 401970이 이 프로그램의 main 격인 부분이다. 10번동안 가위 바위 보를 실행하면서 입력을 받은 후에 11번째가 되면 아래 함수들을 실행한다.

 

 함수 4013D0을 보면 이전에 입력했던 4045A4의 값이 해당 문자에 해당하지 않으면 ++v4를 하는것을 볼수 있는데 아래쪽에 v4>0이면 exit하는 것을 볼 수 있다. 나는 v4를 0보다 크게 만들지 않기 위해 v4를 ++시키지 않는 조건들을 모두 충족하기로 했다. 

4045A4[0],4045A4[3],4045A4[6]이 b가 아니면 4가 0보다 커지므로 이 3자리의 값은 b가 된다.

%3을 했을때 1이 나오고 4가 아닌 4045A4[1]에는 v7의 값인 2가,4045A4[7]에는 v7에서 1을 뺀 1이 들어간다.

4045A4[5]에는 v2의 값인 i가 들어가고 4045A4[4]에는 i보다 1이 큰 j가 들어간다.

4045A4[2]에는 u가,4045A4[8]에는 n이 들어가고

4045A4[9]에는 3이 들어간다.

즉 4045A4의 배열은 b2ubjib1n3이 된다. 

이제 위의 배열에 값들을 한 자리씩 입력하면 10번째 자리를 입력했을 때 프로그램이 종료되고

 

파일을 생성하는 함수를 통해서 C드라이브에 YISF라는 디렉토리가 만들어진다.


그리고 위의 함수를 통해 Iamkey.txt 에 KEY가 만들어진다.  KEY는 PK_iw@nn@Pa$sKey이다.

추가--------------------------------------

1
2
3
4
table=[0xB,0x45,0x35,0xC,0x4,0x29,0x32,0x50,0x4A,0x40,0x29,0x57,0xC]
flag="b2ubjib1n3"
for i in range(len(table)):
  print(chr(table[i]^ord(flag[i%10])),end="")
cs

복호화 소스코이다.

이 KEY를 다시 프로그램을 키고 p를 누르고 입력하면 다음과 같은 플래그가 나온다

플래그:YISF{W@W_h2re_1s_the_Flag!!_And_n@w_The_Beginning_@f_R3ver$ing}

'write up' 카테고리의 다른 글

x-mas ctf Endless Christmas  (0) 2018.12.24
2018 OtterCTF Hopity Hop  (2) 2018.12.11
BSides Delhi CTF 2018  (0) 2018.10.27
picoCTF 2018  (0) 2018.10.13
제 18회 하계 해킹캠프 What is END?  (0) 2018.09.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함