- 문제
실행 파일이 손상되었다고 했고, 실제로도 실행이 안 되는 파일이다.
이 파일을 가지고 유추해 볼 수 있는 방법은
- 패스워드가 Static으로 저장되어있다면, 파일 내에 어디인가 저장이 되어 있을 것
- 패스워드가 알고리즘으로 인증되는 것이라면, 파일 내에 알고리즘 소스가 저장되어 있을 것
- 패스워드가 네트워크를 타고 인증 받는 것이라면 인증서버의 주소가 파일 내에 있을 것
- 기타,, 여러 가지 다른 방법
문제에서 주어진 단서가 얼마 없기 때문에 유추한 모든 방법을 다 시도해 보기로 했다.
나는 이 중 1번에서 답을 찾을 수 있었다.
- 1번 방법의 자세한 설명
Windows 실행 파일은 PE 라는 구조로 되어있다. 이 PE를 전부 설명하자면 너무 길어짐으로 생략한다.(주로 정석에서나 봤을 말투를 내가 사용하다니..)
PE구조 중 IMAGE_SECTION_HEADER 안의 .data Section 이 Static으로 설정 된, 즉, 컴파일 하기 전부터 소스 내에 이미 선언된 정적 변수들을 저장하는 곳이다. .data 섹션의 자세한 설명을 하자면,
1. .data 섹션
- .data섹션은 그 속성이 읽기/쓰기 가능한 가장 일반적인 데이터 섹션이다. 여러분들이 전역변수나 정적 변수를 선언하게 되면 이러한 변수들은 모두 이 .data 섹션에 위치하게 된다. .data 섹션이 프로세스 주소 공간에 매핑되게 되면 이 섹션 내의 번지 값 그대로 사용된다. 지역 변수는 프로세스 스택에 그 영역이 할당되기 때문에 PE와는 관계가 없다는 것을 염두에 두기 바랍니다. .data 섹션은 앞서 언급한대로 특별한 구조가 없이 컴파일러가 판단하여 적당한 크기를 잡고 그 섹션 내에 여러분이 정의한 전역/정적 변수들을 위치시킨다.
출처 : http://sol9501.blog.me/70102511201
이렇게 된다.
여기까지 손상되었는지는 알 수 없다. 단지 힌트를 얻을 수는 있다. 손상이 되지 않았다는 가정하에, Section은 IMAGE_SECTION_HEADER에 나열된 순서대로 파일 내에 위치한다. 그리고 SectionAlignment 와 FileAlignment 의 규칙에 따라서 각 세션 사이에는 공백( 0x00 으로 쭉 나열된 것)이 생기게 된다. 여기서는 .data 섹션이 3번째 이므로, 3번째 섹션을 찾아가면 여러 가지 문자열을 볼 수 있고, 그 중에 패스워드를 찾을 수 있다.
'CodeEngn RCE' 카테고리의 다른 글
CodeEngn Basic RCE 19 (0) | 2011.07.05 |
---|---|
CodeEngn Basic RCE 17 (2) | 2011.07.04 |
codeengn basic rce 4 (0) | 2011.07.02 |
codeengn basic rce 3 (0) | 2011.07.02 |
Abex Crack me 1 && Codeengn Basic RCE 1 (0) | 2011.06.30 |