xcz.kr PROB:21번

Wargame/xcz.kr 2018. 1. 21. 23:43

xcz.kr PROB:21번 문제다.

두번째 웹 문제로 점수는 300 point.

소스를 확인해보니 상당히 꼴보기가 싫다. 자바 스크립트 난독화는 몇번 봤는데 php 난독화 같은 경우는 처음본다. 복호화가 필요할 것 같아 찾아봤다.

일단 디코딩은 됐는데 상당히 지저분하다. 저걸 보기 좋게 바꿔야 하는데 툴 같은걸 찾다 딱히 못찾아서

결국 수동으로.... 하.. 


토할 뻔했다.. 하... 이게뭐라고.. 별로 중요한 것도 아닌데 ㅠㅠㅠ 이제 대충 보기좋게 고쳐놨으니 이제 해석을 해보자.

우선 처음에 키 값을 받으면 explode함수를 통해 -를 기준으로 5개의 배열로 나뉘게 된다.
아마 ????-????-????-????-????

이때 이 값들이 preg_match함수를 통해 에러가 안나려면 모두 대문자,소문자 영문이거나 숫자로 이루어져야 한다.

이제 다음 if문들의 조건을 충족시켜 KEY값을 출력하면 될 것 같다.

if(is_numeric(substr($a[0],0,2))&&!is_numeric(substr($a[0],4,1))&&h($a[0])>312&&h($a[0])<333&&!is_numeric(substr($a[1],0,1))&& is_numeric(substr($a[1],3,2)))

먼저 첫 번째 조건문인데 첫번째 배열에서 1,2번째 자리는 숫자여야하고 5번째 자리는 숫자이면 안된다. 그다음 첫번째 배열의 각각의 문자의 아스키 코드값들의 총합이 312가 넘고 333보단 작아야 한다. 
그리고 두번쨰 배열의 첫번째 문자는 숫자이면 안되고 4,5번째 문자는 숫자여야 한다.

첫 번쨰 조건을 통과하려면 대충 122Fa - a??32 - ????? - ????? - ????? 이런 상태인 것 같다.

다음으로 두번째 조건문인데 해석해보면

if(h($a[1])>300&&h[$a[1])<326&&!is_numeric($a[2],0,1))$is_numeric(substr($a[2],1,1))&&h($a[2])>349&&h($a[2])<407){

두번째 배열의 아스키 총합은 300보다크고 326 보다 작다.  세번째 배열의 첫번째 글자는 숫자이면 안되고 두번째 글자는 숫자여야하며 세번째 배열의 아스키 총합은 349보다크고 407보다 작다.  

198
두 번쨰 조건을 통과하려면 대충 122Fa - a2A32 - a33dA - ????? - ????? 이런 상태인 것 같다.

다음으로 세번째 조건문인데 해석해보면

if(!is_numeric(substr($a[3],0,2))&&is_numeric(substr($a[3],2,3))&&h($a[3])>357&&h($a[3]<359)

네번째 배열의 1,2번째 글자는 숫자이면 안되고 3,4,5번째 글자는 숫자여야 한다. 그리고 아스키 총합은 357보다크고 359보다 작다. 즉 358이어야 한다.

122Fa - a2A32 - 3a3dA - aa992 - ????? 

드디어 마지막 조건이다..

if(round((h($a[0])+h($a[1])+h($a[2])+h($a[3])))/4)==h($a[4]))

1~4번째 배열의 총합을 4로 나눈후 반올림한 값과 네번째 배열의 총합이 같으면 된다. 337만들자.

122Fa(316) - a2A32(313) - a33dA(364) - aa992(358) - 22dW3

그대로 입력해보자.

성공!

귀찮아서 그렇지 문제자체의 난이도는 어렵지 않은 것 같다.


'Wargame > xcz.kr' 카테고리의 다른 글

xcz.kr PROB:18번  (0) 2018.01.21
xcz.kr PROB:17번  (0) 2018.01.21
xcz.kr PROB:13번  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,