문제 종류 - Web
사용한 툴 - Sublime Text 3
Flag, Hint, 정답 형식
flag: ?
hint: X
정답 형식: ?
풀이
문제에 들어가면 다음과 같은 PHP 코드가 주어진다.
PHP 난독화가 되어있는 모습이다.
난독화 해제 사이트에 들어가서 난독화를 풀어보자.
PHP Beautifier를 써서 코드를 예쁘게 바꿔보자.
이렇게 정렬된 코드를 나는 Sublime Text 3에 넣어봤다.
복잡한 변수들은 모두 replace 해줬다.
코드를 해석하면 다음과 같다. ( 문자열 = key )
function h($a) 분석
1. 매개변수로 $a라는 문자열을 받는다.
2. for(int i=0; i<5; i++)문을 돈다.
3. for문 안에서 $a[i]에 맞는 ASCII to dec 값을 $b에 더한다.
4. 함수가 끝날 때 $b 값을 return 해준다. 밑에 조건문에서 계산하는 (h(key[])값이 $b 값이다.
키의 형태는 '-'으로 나뉘어져 있다.
중간에 있는 for문은 특수문자가 문자열에 존재하면 Error!을 출력한다.
4개의 조건문 분석
1)
1. key[0]의 substr(0, 2)값은 숫자여야 한다.
2. key[0]의 substr(4, 1)값은 숫자가 아니어야 한다.
3. h(key[0])의 값이 312 초과 333 미만이어야 한다.
4. key[1]의 substr(0, 1)값은 숫자가 아니어야 한다.
5. key[1]의 substr(3. 2)값은 숫자여야 한다.
2)
1. h(key[1])의 값이 300 초과 326 미만이어야 한다.
2. key[2]의 substr(0, 1)값은 숫자가 아니어야 한다.
3. key[2]의 substr(1, 1)값은 숫자여야 한다.
4. h(key[2])의 값이 349 초과 407 미만이어야 한다.
3)
1. key[3]의 substr(0,2)값은 숫자가 아니어야 한다.
2. key[3]의 substr(2,3)값은 숫자여야 한다.
3. h(key[3])의 값이 357 초과 359 미만이어야 한다.
4)
1. (h(key[0]) + h(key[1]) + h(key[2]) + h(key[3])) / 4의 반올림한 값이
h(key[4])의 값과 같아야 한다.
이렇게 모든 조건문을 다 지나면 flag 값을 얻을 수 있다.
무슨 key가 이 모든 조건문을 만족시킬 수 있는지 잘 생각해보길 바란다.
'Wargame > XCZ.KR' 카테고리의 다른 글
[XCZ.KR] 23번 풀이 (0) | 2020.05.01 |
---|---|
[XCZ.KR] 22번 풀이 (0) | 2020.05.01 |
[XCZ.KR] 20번 풀이 (0) | 2020.04.30 |
[XCZ.KR] 18번 풀이 (0) | 2020.04.30 |
[XCZ.KR] 17번 풀이 (0) | 2020.04.30 |