물마중
[리버스_0x04] 함께 공부하는 Reversing_5 본문
편집자: 엔시스(sis@sis.pe.kr)
출 처: 보안인닷컴 팀 블로그[http://boanin.tistory.com]
1. Abstract
RegisterMe.Oops.exe를 분석해 보고자 한다.
이전에 간단히 학습한 PE Header에 대한 내용이 다시 언급 될 것이다.
먼저 이 프로그램을 Olly로 불러온다. 그러면 다음과 같은 에러메시지가 보일 것이다.
확인 버튼을 누르면, 이전에 봤던 정상적인 프로그램이 뜨지는 않고, 그냥 종료되어 버린다.
그리고 덤프창에도 아무런 값들이 보이지 않는다. 어떻게 된 것일까? 실제로 이런것이 Olly에서 자주 보여지는 화면은 아니다. 그리고 Olly는 crashing으로 부터 자신을 보호하기 위해 EP 대신에 시스템 BP(BreakPoint)에 의해 멈추고 있다. 하지만 이 문제는 쉽게 해결 할 수 있을 것이다.
우선, EP(== 00400000 + 1000 -> 00401000)로 이동한다.
더블클릭 혹은 F2를 눌러 BP(BreakPoin)로 설정한다. (만약, 에러메시지가 나온다면 그냥 확인 버튼을 누른다.)
우리가 설정한 BP에서 멈출 것이다.
조작하는 법과 이유는 이후의 내용에서 모두 알 수 있을 것이다.
여긴 오직 PE Header 밖에 없다. 섹션들은 어디로 갔을까?
이전에 우리는 code, data 등을 포함하는 섹션을 보지 않았었나??
그리고 이 헤더의 사이즈는 무려 5000h..보통의 헤더는 1000h라고 말하지 않았던가?
실제로 그냥 이 파일을 실행해보면, 결과는 제대로 동작하지만, olly는 혼란스러워 한다.
이상한 부분과 수정해야 할 값을 정리해보면 다음과 같이 NumberOfRvaAndSizes를 제외하고 사이즈 값을 크게 늘려놓은 것을 복원하는 것뿐이다.
상수 |
현재 설정 되어 있는 값 |
정상적인 값 |
최종 수정 값 |
SizeOfCode |
40000400 |
400 |
00 04 00 00 |
SizeOfInitializedData |
40000A00 |
A00 |
00 0A 00 00 |
BaseOfCode |
40001000 |
1000 |
00 10 00 00 |
BaseOfData |
40002000 |
2000 |
00 20 00 00 |
NumberOfRvaAndSizes |
40000004 |
10 |
10 00 00 00 |
Export Table Address |
00500000 |
0 |
00 00 00 00 |
Export Table Size |
00050000 |
0 |
00 00 00 00 |
NumberOfRvaAndSizes는 옵셔널 헤더의 디렉터리 엔트리 개수로 일반적으로 10h이며, 이 값을 변경함으로써 올리디버거가 오작동하게 만들 수 있다고 알려져있다.
값들은 위에 나와있는 표에서 제시한 값으로 변경하면 된다.
우리는 즉각 EP 영역에 도달하며, 더이상 오류에 관한 메시지가 보이지 않는다. 또한, opcode가 덤프 창에 보인다.
메모리모듈을 다시한번 확인해보자! 정상적으로 모든 섹션을 볼 수 있다.
그리고 이전에는 사이즈가 5000이었는데 지금은 정상적으로 1000으로 돌아와있다.
그리고 실행해보자!
'Reverse Engineering > Reversing 이론 설명' 카테고리의 다른 글
[리버스_0x06] [번외] Kris의 Reverse Engineering 강의 되짚어 보기_1 (0) | 2011.01.18 |
---|---|
[리버스_0x05] Reverse Engineering을 위한 준비운동 (0) | 2011.01.18 |
[리버스_0x03] 함께 공부하는 Reversing_4 (0) | 2011.01.12 |
[리버스_0x02] 함께 공부하는 Reversing_3 (0) | 2011.01.12 |
[리버스_0x01] 함께 공부하는 Reversing_2 (0) | 2011.01.12 |