Challenges : Basic 02
Author : ArturDents
Korean :
패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오
English :
The program that verifies the password got messed up and ceases to execute. Find out what the password is.
--------------------------------------------------------------------------------.
실행시켜 보시면 파일이 깨져 실행할수 없다고 뜰 것입니다.
해서 올리디버그로도 열리지 않을 겁니다.
그럼 최후의 수단은????????
네. 헥사편집기로 열어 보죠.
그럼 무수히 많은(내려보면 양은 생각보다 적지만)
바이너리값이 펼쳐집니다.
내리다보면 이런 부분이 있을 겁니다.
요런 부분을 발견 할 수 있습니다.
사실 이렇게는 잘못된 접근법이고
정적혹은 전역 변수들은 PE구조에서 data섹션(읽기,쓰기 가능)에 저장이 됩니다. 그리고
data섹션에도 여러가지가 있는데 그중 .rdata섹션은 읽기전용 섹션으로
상수값이 저장이 되는 영역입니다. 헥사편집기에서 PE구조체에 따라
요 부분이 .rdata의 헤더 부분이고 저 부분의
17~20번째 4바이트는 "파일"에서 .rdata영역의 크기이고 ) 화면에서 00 02 00 00
21~24번째 4바이트는 "파일"에서 .rdata영역의 시작주소이다. ) 화면에서 00 06 00 00
저 값들은 "리틀 엔디언" 값이므로 크기는 200h 이고 시작주소는 600h 입니다.
최종적으로 비밀번호가 지역변수나 알고리즘에 의한 리턴값이 아닌이상
data섹션에 존재할 것이고 따라서 처음에 야매(?)로 발견한 비밀번호값이
600h~800h 사이에 있으므로 비밀번호는 상수(#define, const 등)으로 존재하는걸 알 수 있습니다.
(원래는 이런 접근을 하라고 만든 문제 인 것 같네요.)
'ctf + wargame > 코드엔진' 카테고리의 다른 글
코드엔진 Challenges : Basic 06 (0) | 2014.11.30 |
---|---|
코드엔진 Challenges : Basic 05 (0) | 2014.11.30 |
코드엔진 Challenges : Basic 04 (0) | 2014.11.30 |
코드엔진 Challenges : Basic 03 (0) | 2014.11.26 |
코드엔진 Challenges : Basic 01 (0) | 2014.11.15 |