보안/악성코드
리버싱 기초
ByteGuard
2023. 3. 24. 23:52
악성코드 분석의 목표
의심스러운 특정 바이너리가 한는 행위와 네트워크에서 탐지하는 방법, 피해 범위 측정
악성코드 감염을 탐지할 수 있는 네트워크/호스트 기반 시그니처 생성
악성코드 분석 기법 - 기초 정적 분석, 기초 동적 분석, 고급 정적 분석, 고급 동적 분석
리버싱: 시스템, 프로그램의 구조, 기능, 동작 등을 분석하고 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 과정
리버싱 방법
- 정적 분석: 겉모습 분석, 종류, 헤더정보, 내부 문자열 등
- 동적 분석: 디버깅을 통해 코드 흐름과 메모리 상태 파악
Hello World 프로그램을 통해 실습하기
#include "windows.h" #include "tchar.h" int _tmain(int argc, TCHAR* argv[]) { MessageBox(NULL, L"Hello World", L"www.reversecore.com", MB_OK); return 0; } |
Code window Disassembly code를 표시하며 각종 comment, label을 보여주며, 코드 를 분석하여 loop, jump 위치 등의 정보를 표시 |
Register window CPU register 값을 실시간으로 표시하여 특정 register 수정 가능 |
Dump window 프로세스에서 원하는 memory 주소 위치를 Hex와 ASCII/Unicode 값으로 표시하고 수정 가능 |
Stack window ESP register가 가리키는 프로세스 stack memory를 실시간으로 표시하 고 수정 가능 |
EP(Entry Point) : 윈도우 실행 파일(exe, dll, sys)의 코드 시작점, 프로그램 실행될 때 CPU에서 가장 먼저 실행되는 코드 시작 위치
EP = Image Base + Address of Entry Point
디버거 기본 명령어
Ctrl + F2 | Restart: 시작지점부터 다시 디버깅 |
F7 | Step into: 하나의 명령어 실행, CALL 만나면 내부로 |
F8 | Step Over: 하나의 명령어 실행, CALL 만나면 함수 자체 실행 |
Ctrl + F9 | 함수 코드 내에서 RETN 명령어까지 실행(함수 탈출 목적) |
Ctrl + G | Goto: 특정주소로 이동 |
F2 | BP 설치 |
F9 | 실행 |
[;] | 주석 |