물마중
[리버스_0x00] 함께 공부하는 Reversing_1 본문
0. 본격적인 강좌에 들어가기에 앞서...
이제 막 리버스 엔지니어링에 입문한 필자가
영어로 제작되어 있는 "Lenas Reversing for Newbies" 자료를 이용하여,
본인처럼 리버싱 분야에 입문하는 분들을 위하여 제작한 자료입니다.
기본 골격은 이 자료를 따라갈 것이며,
추가적으로 필요한 부분에 대해서는 여러 참고자료를 학습하여 작성할 것입니다.
아울러, 올바른 정보공유를 위하여 부디 틀린 부분이 있다면 과감히 지적해주시길 바라며,
또한, 아낌없는 칭찬도 부탁드립니다! :-)
1. Reversing?
소프트웨어를 역으로 분석하는 과정으로써,
프로그램을 구현하는 과정에서 실수할 수 있는 부분들을 분석하여 허점을 찾아내어
프로그램의 보안을 강화시키는 일련의 활동들을 말한다.
2. Tool and Target
- Ollydbg v1.10 http://www.ollydbg.de/
: Olly는 별도의 설치과정을 거치지 않고, 압축해제 만으로 실행할 수 있다.
- Quick Start : 단축키를 정리해 놓은 페이지, http://www.ollydbg.de/quickst.htm
- ARTeam-Ollydbg.ini : 파일명을 Ollydbg.ini로 변환하여 기존 Olly 폴더에 있는 원본에덮어쓰기 한다, lena 강좌 1번 패키지에 포함되어 있다.- UDD, Plugin 폴더 생성 : 압축해제된 Olly 폴더안에 새폴더 만들기로 생성,Option->Appearance->Directories 경로 설정- Jit(Just-in-time debugging) : Option->Just-in-time debugging->make ollydbg just-in-time debugger- Add explorer : Option->Add to explorer->add ollydbg to menu in windows explorer- 시작 지점 설정: Option->Debugging options->Events tab->Entry point of main module 체크- win32.hlp : Help->Select API help file,- 기타 유용한 참고자료: arteam.accessroot.com/tutorials.html 에서"portable executable file format compendium","weakness of the windows api" 로 검색
- Lenas Reversing for Newbies: http://www.tuts4you.com/search.php?q=lena&r=0
3. Brief introduce for Ollydbg
① main window : cpu window
모두 4가지 영역으로 구분되어 있다. 왼쪽부터 차례로...
- Memory Address: VA(Virtual Addresses)는 프로그램이 시작할 때,
윈도우즈 로더에 의해 특정 메모리 공간으로 로드되어 항상 똑같은 주소값을 가진다.
- Opcodes: 컴퓨터가 읽고 이해할 수 있는 형식이다.
- Assembler mnemonics: Opcode를 사람이 읽을 수 있는 형태로 번역한 것이다.
- Comments: Olly가 코드 분석을 끝낸 다음에, Comments를 적은 것이다.
그리고 사용자가 직접 코드 이해를 돕기 위한 주석을 덧붙일 수 도 있다.
(세미콜론(;)을 입력하거나, 해당 위치에서 스페이스바를 한번 누르면 새창이 뜨는데
그곳에 주석을 적으면 된다.)
- 변수값 출력: 주요 변수들에 어떤 값들이 들어갔는지 표시해준다.
② registers window: CPU가 필요할 경우 사용하는 레지스터와 플래그의 값이 어떻게 변화하는지
보여주는 부분이다.
- Register: Data를 저장하는 컴퓨터의 특정 메모리 공간이다.- 기본 레지스터들은 모두 32bit(=4Byte=1DWORD) 크기를 가지며,0~FFFFFFFF(unsigned) 값을 가진다.
③ hex dump: opcode를 16진수(1digit=4bit)로 덤프하여 보여주는 공간이다.
④ stack window: stack은 다음 사용을 위해서 여러가지들을 저장하기 위한 메모리 공간이다.
- LIFO(Last-In-Fisrt-Out) 구조로써, 마지막에 들어온(push) 자료가 가장 먼저 나온다(pop).
4. Prerequisite knowledge
리버싱을 공부하기 위한 사전 지식들에는 어떤 것들이 있을까요?
필자가 경험한 바에 따르면 다음과 같은 항목들에 대한 이해는 어느 정도 필요하다고 생각됩니다.
- Tool(Ollydbg)
- Assembly
- 기본적인 Programming Mind
1번과 2번 항목에 대해서는 앞에서도 간략히 설명하였고, 이후에도 강좌를 진행하면서 필요한 추가적인
설명들을 진행할 것이고, 시간이 허락한다면 별도의 강좌를 만들 계획도 있습니다.
3번이 의미하는 바는 프로그램을 해석하기 위해서는 프로그램을 어떤식으로 만드는가를 이해하고
있어야 한다는 것입니다. 한번이라도 제대로 된 프로그램을 만들어 본 사람은 어떤 프로그램이든지
전체적인 흐름을 보다 쉽게 이해할 수 있을 것입니다.
이런 사전 지식 뿐만 아니라 리버싱이라는 분야에 도전하기 위해서는
무엇보다도 끈기와 노력이 필요합니다.
사실, 이 모든 사전 지식이 없더라도 이런 정신적인 부분이 완전 무장되신 분들은
어떤 어려움도 이겨낼 수 있을 것입니다. :-)
5. Reference
- Lenas Reversing for Newbies, http://www.tuts4you.com/search.php?q=lena&r=0
- 리버스엔지니어링 역분석 구조와 원리, 박병익/이강석, 지앤선
'Reverse Engineering > Reversing 이론 설명' 카테고리의 다른 글
[리버스_0x05] Reverse Engineering을 위한 준비운동 (0) | 2011.01.18 |
---|---|
[리버스_0x04] 함께 공부하는 Reversing_5 (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 |