CTF | wargame

XCZ.kr / Prob21 (웹, phph소스분석)

nopdata 2016. 7. 22. 01:55

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