prob21 - PHP Obfuscation Crack
php 소스코드를 보고 분석을 해야하는 문제이다.
엄청나게 복잡하다. 헥스값을 되어 있으나 그냥 웹서버에 올려놓으면 자동으로 변환이 되나보다.
일일히 변환할 수 없기 때문에 파이썬에 넣어서 소스를 풀어냈다.
>>> data='''암호화된소스코드'''
>>> data
... 결과물
여전히 지저분하다. 따로 정리해주는 툴을 찾아보았지만 딱히 없어서 그냥 하나씩 직접 정리하였다.
아직도 지저분하다. 보면 똑같은 변수 ${"a"} 임에도 보기 불편하게 그냥 여러번 선언한 경우가 있다. 이를 다시 정리하면 아래와 같다.
꽤 깔끔해졌다. 소스의 행동방식은 간단하다.
GET으로 key를 받고 key에 해당하는 값이 맞으면 정답을 출력해준다.
GET으로 넘겨야할 인자 key의 조건은 다음과 같다.
간단히 하면 다음과 같다.
key=숫숫??문-문??숫숫-문숫???-문문숫숫숫-?????
round((h(숫숫??문)+h(문??숫숫)+h(문숫???)+h(문문숫숫숫))/4=h(?????)
따라서 넘기는 key의 값은 여러개가 나올 수 있다.
h함수는 입력한 시리얼 덩어리의 각 위치의 아스키 값을 더해준다. 가령 11111을 입력하였을 경우 1의 리턴 아스키값은 49이며 h함수의 결과값으로 245를 리턴한다.
답을 얻기 위해 내가 제출한 key는 아래와 같다.
key=1999a-a0099-z001z-ar111-113aa
h("1999a") = 317
h("a0099") = 307
h("z001z") = 389
h("ar111") = 358
h("113aa") = 343
(317+307+389+358)/4=342.75 이며 round함수를 통해 343이 된다.
XCZ.KR Answer : what_the_fuckin_0bfuscati0n
'CTF | wargame' 카테고리의 다른 글
XCZ.kr / Prob23 (기타, qr코드) (0) | 2016.07.22 |
---|---|
XCZ.kr / Prob22 (포렌식, 디스크 분석) (0) | 2016.07.22 |
XCZ.kr / Prob18 (웹, php소스분석) (0) | 2016.07.22 |
XCZ.kr / Prob15 (암호학, 돼지우리) (0) | 2016.07.22 |
XCZ.kr / Prob8 (기타, 이미지검색) (0) | 2016.07.22 |