보안/악성코드

리버싱 기초

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 실행
[;] 주석