보안/악성코드 분석

악성코드 동적 분석 도구 올리디버거 활용

2024. 8. 12. 00:12
목차
  1. 올리디버거(OllyDBG)란 무엇인가?
  2. 올리디버거 활용
  3. 결론

그림0 - 올리디버거 초기 실행 화면

올리디버거(OllyDBG)란 무엇인가?

  • 디버깅 프로그램 중 하나로, 디스어셈블리와 디버그가 모두 가능한 도구로 리버싱에서 사용된다.
  • 디버거에 탑재된 Disassembler(디스어셈블러) 모듈이 기계어를 어셈블리어로 번역해서 보여준다.
  • Debugger(디버거)는 다른 대상 프로그램을 테스트하고 디버그하는데 쓰이는 컴퓨터 프로그램이다.
  • 디버그란? 컴퓨터 프로그램의 정확성이나 논리적인 오류(버그)를 찾아내는 과정

 

 

올리디버거 활용

그림1 - 올리디버거 아이콘

올리디버거 아이콘을 더블클릭하여 실행해도 되지만, 분석할 파일을 마우스 우측 클릭 후 Open as OllyDbg를 클릭하여 실행도 가능하다. 

그림2 - 올리디버거 실행

분석할 파일을 올리디버거로 실행 후 화면을 보면 여러 코드들과 메모리 값들이 확인된다.

그림3 - 올리디버거 실행 화면

1. 주소 창: 명령어가 실행될 주소를 가르키는 창

2. OP 코드 창: 기계어를 보여주는 창

3. 디스어셈블리 창: 기계어를 어셈블리로 바꿔놓은 창

4. 레지스터 창: 레지스터의 값을 표시해주는 창 (각 주소의 기계어나 어셈블리에 따라 값이 바뀐다.)

5. 메모리 덤프 창: Address 주소, Hex dump, 각 Hex에 따른 ASCII 코드로 해석된 창을 보여준다.

6. 스택 창: 스택 주소, 스택 값, comment 순으로 표시된 창

 

Code Windows: 디스어셈블 코드를 보여주는 창 (1,2,3번)

Register Windows: 레지스터에 저장된 값을 실시간으로 보여주는 창, 수정 가능 (4번)

Dump Windows: 프로세스에서 원하는 메모리 주소 위치를 헥사값, 아스키/유니코드 값으로 보여줌. 수정 가능 (5번)

Stack Windows: ESP(스택 포인터)가 가르키는 스택 메모리를 실시간으로 보여줌. 수정 가능 (6번)

 

그림4 - 올리디버거 시작 위치

그림4의 빨간 박스를 보면 PUSH EBP로 확인된다.

올리디버거에서 해당 파일의 시작 함수에 맞춰 멈추게 된다. 

 

main() (메인 함수)의 첫 부분은 아래 두 문장으로 시작된다.
PUSH EBP → 이전 EBP 레지스터의 값을 SFP 형태로 저장하고, ESP는 4바이트 아래로 이동한다.
MOV EBP ,ESP → 방금 움직인 ESP 레지스터 주소를 EBP로 설정함으로써 새로운 EBP가 생성된다.

이 과정을 함수 프롤로그라 한다.

 

SE handler installation - 메인 함수가 실행되기 전에 앞에 실행됨 → 에러 핸들러
→  컴파일 할 때, exe 파일이 정상적으로 동작될수 있게 환경들을 흝어봄(오류 발생 시 메시지 박스 출력)

 

 

메인함수 찾을 때 run 으로 실행하여 바로 찾기
F9 → 다음으로 실행(Run), >와 동일
F7 → Step into, CALL(주소값 불러오기, 함수 불러오기)로 함수 안으로 들어감, 하나의 OP 코드 실행
F8 → 한칸씩 실행(Step over), 밖에서만 돌아감, Step into 와 같지만 CALL 만나도 따라 들어가지 않고 함수만 실행

F2 → Break Point 설정/해제, F9로 프로그램 실행 시 Break Point까지 실행된다.
ctrl + F2 → 다시 시작(Restart), 좌측 상단, <<와 동일

 

 

F9를 눌러 실행 시켜 본다.

그림5 - F9 눌러서 실행

그림5를 보면, F9를 눌러 실행 시킨 결과 Hi, Have a nice day!라는 문자열이 출력되는 것을 확인할 수 있다.

F9를 누르면 화면에 바로 뜨는 것이 아닌, 아래 창에 추가로 뜨는 것을 클릭하여 확인이 가능하다. 

OK를 클릭하면 RETN으로 가게된다.

그림6 - RETN으로 이동

RETN(RET)는 CALL을 통해 호출된 함수에서 다시 복귀하기 위해 사용하는 명령이다.

분석하다가 놓친 경우 ctrl + F2를 눌러서 다시 시작한다.

그림7 - 분석 Restart

ctrl + F2(Restart)를 눌러서 시작 위치로 다시 왔다.

 

그림8 - Debug에서 조작키 확인

좌측 상단에 Debug를 클릭하면 조작키 확인이 가능하다.

F8을 눌러서 step over를 통해 한칸씩 실행하다가, 의심되는 함수를 만나면 F7을 눌러 CALL로 해당 함수 안으로 들어간다.

함수 내부의 코드를 분석하여 해당 함수가 어떤 행위를 하는지 분석 할 수 있다.

그림9 - F8을 눌러 한칸씩 진행

F8을 눌러 MOV EBP, ESP로 이동한다.

우측의 EIP를 보면 다음에 이동할 주소창이 확인되며(00401033), F8을 한번 더 누르면 EBP와 ESP가 동일한 값으로 변하게 된다. MOV EBP, ESP → ESP 값을 EBP에 대입한다는 의미.

특정 함수를 실행하기 전에(어떤 변수를 넣기 전에) 초기화하는 단계로 볼 수 있다.

앞의 코드는 SE handler installation을 세팅하기위한 일종의 작업으로 자세하게 분석할 필요가 없다.

F8을 눌러서 한칸씩 실행한다. 

그림10 - SE handler 세팅 완료

앞의 코드는 SE handler의 세팅을 하는 코드로, 에러가 발생했을때 제어할 수 있도록 세팅하는 구간으로 볼 수 있다.

SE handler - 에러가 발생했을때 제어할 수 있도록 세팅함.

 

아래 코드는 레지스터를 사용하기 위한 작업이다. 세팅을 해야 연산을 하고 수행을 할 수 있다.

PUSH EBX

PUSH ESI

PUSH EDI

 

그림11 - CALL 함수로 진입

F8을 눌러 계속 한칸씩 실행하고, CALL에 도착했을 때 F7를 눌러 함수 안으로 들어간다.(Step into)

그림12 - CALL 함수 내부

F7를 눌러 함수(GetVersion)로 진입하게 되면 새로운 코드들이 확인된다.

 

그림13 - F8로 한칸씩 실행 시켜 RETN 도달

CALL 함수 (GetVersion) 내부에서 F8을 눌러 한칸씩 실행시킨다.

RETN(RET) 명령이 나올 때 까지 실행시킨다.

RETN 이 확인되면 CALL을 통해 호출된 함수에서 다시 복귀. → GetVersion 의 기능을 하는 함수의 종료

F8을 눌러 RETN에서 함수 밖으로 나간다.

그림14 - 0040105C 주소로 이동

F8을 눌러 RETN에서 함수 밖으로 나오게 되면, CALL에서 F7을 입력해서 진입했던 GetVersion 함수(윈도우 버전 확인 작업) 다음 코드로 이동하게 된다.

그림15 - 여러개의 CALL 함수 확인

F8을 눌러 한칸씩 실행하다 보면 CALL 함수가 여러 개 있는 것을 확인할 수 있다.

Sample_0.00401000 이 확인되는데, 이는 이 프로그램의 베이스코드로 실제 메인함수에서 사용한다.

이전까지의 코드는 stub code 라고 한다.

stub code는 실행 정보를 가져오고 Image Base Address 값을 구하는 등, 프로그램 실행에 필요한 정보를 얻어오는 코드로 구성되어 있다.

stub code는 스킵하고 메인 함수 코드를 찾아서 분석하는것이 중요하다.

그림16 - Sample_0.00401000에 break 걸기

F8을 눌러서 한칸씩 실행 시켜 메인 함수 Sample_0.00401000에 도달한다.

또는 F9를 눌러서 한번에 메인 함수에 도달할 수 있다.

F2를 눌러 break를 걸어준다.

분석하다가 여러 번 분석하기 위해 break를 걸어 현재 EIP에서 break point가 걸린 곳까지만 실행하도록 설정한다.

그림17 - 메인 함수로 진입

Sample_0.00401000 에서 F7을 눌러 함수로 들어간다.

그림17의 빨간 박스 영역이 메인 함수 영역으로 Message Box를 띄우고 Beep 음을 발생시키는 간단한 코드로 확인된다.

그림18 - 메인 함수 내부의 기능 확인

그림18을 보면 아래 두 개의 함수가 확인된다.

KERNEL32.Beep → 스피커에서 간단한 톤을 생성

USER32.MessageBoxA → 시스템 아이콘, 단추 집합 및 상태 또는 오류 정보와 같은 간단한 애플리케이션 관련 메시지가 포함된 모달 대화 상자를 표시한다. 메시지 상자는 사용자가 클릭한 단추를 나타내는 정수 값을 반환한다.

 

그림19 - F8로 한칸씩 실행시켜 Beep 음 발생

F8로 한칸씩 실행시켜 KERNEL32.Beep 에 도달하게 되면, Beep 음을 발생시킨다.

그림20 - Dump에서 주소값 검색

Hex dump 부분을 클릭하여 ctrl + G를 입력하여 Dump 에서 주소값을 검색하여 텍스트를 찾을 수 있다.

그림21 - 메인 함수 종료

F8로 한칸씩 실행시켜 MessageBox를 띄우게되면 해당 함수가 종료된다.

F8를 누르면 화면에 바로 뜨는 것이 아닌, 아래 창에 추가로 뜨는 것을 클릭하여 확인이 가능하다. 

 

 

결론

  • 디버깅 프로그램 중 하나로, 디스어셈블리와 디버그가 모두 가능한 도구로 리버싱에서 사용된다.
  • 메인 함수를 찾아서 함수 내부로 들어가 한칸씩 실행해 보며 프로그램의 행위를 분석한다.
  • 여러 번 분석이 필요한 경우가 있으므로 F2(Break Point)를 적절하게 활용하여 분석한다.

 

'보안 > 악성코드 분석' 카테고리의 다른 글

리버싱 개념 및 어셈블리어 설명  (0) 2024.07.27
악성코드 동적 분석 도구 기능 및 사용법 (Process Monitor, Process Explorer)  (0) 2024.07.26
DLL 의존성 확인 도구 (Dependency Walker) & 리소스 확인 도구 (리소스 해커) 기능 및 사용법  (0) 2024.07.24
PE 헤더 분석 도구 (PEview, pestudio) 기능 및 사용법  (4) 2024.07.23
악성코드 분석 시 파일 내 문자열 확인 도구 (BinText, Strings) 기능 및 사용법  (4) 2024.07.22
  1. 올리디버거(OllyDBG)란 무엇인가?
  2. 올리디버거 활용
  3. 결론
'보안/악성코드 분석' 카테고리의 다른 글
  • 리버싱 개념 및 어셈블리어 설명
  • 악성코드 동적 분석 도구 기능 및 사용법 (Process Monitor, Process Explorer)
  • DLL 의존성 확인 도구 (Dependency Walker) & 리소스 확인 도구 (리소스 해커) 기능 및 사용법
  • PE 헤더 분석 도구 (PEview, pestudio) 기능 및 사용법
Security Engineer
Security Engineer
IT 공부
Security Engineer
IT-log
Security Engineer
전체
오늘
어제
  • 분류 전체보기 (171)
    • Programming (39)
      • Python 웹 스크래퍼 만들기 (39)
    • IT 지식 (64)
      • IT 정보 (27)
      • CS 기초 (24)
      • 운영체제 (8)
      • IT 인프라 기초 (5)
    • 보안 (45)
      • 악성코드 분석 (10)
      • Bandit 워게임 (25)
      • 취미로 해킹 2 (6)
      • 환경 구축 (4)
    • 웹 해킹 (23)
      • 웹 기초 지식 (8)
      • SQL 기본 (2)
      • 웹 해킹 및 시큐어 코딩 기초 (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 리눅스
  • IT 인프라
  • CS 기초
  • 시큐어 코딩
  • 운영체제
  • WarGame
  • overthewire
  • Selenium
  • CS
  • HTML
  • Def
  • 취미로 해킹
  • 워게임
  • 악성코드 분석
  • 해킹
  • flask
  • 웹
  • Beautifulsoup
  • bandit
  • 웹 개발
  • 파이썬
  • 모의해킹
  • 컴퓨터
  • CSS
  • Python
  • Web
  • 악성코드
  • webScrapper
  • 취미로해킹
  • 웹 해킹

최근 댓글

최근 글

hELLO · Designed By 정상우.
Security Engineer
악성코드 동적 분석 도구 올리디버거 활용
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.