티스토리 뷰
이문제는 내가 순천향대 정보보호 페스티벌에 나가서 몇시간을 투자했지만 풀지 못했었던 문제이다.하지만 오늘 다른 사람의 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 |