정적 분석
파일의 겉모습을 관찰하여 분석하는 방법
정적 분석 단게에서는 파일 실행하지 않음
파일 종류(EXE, DLL, DOC, ZIP), 크기, 헤터(PE) 정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등 다양한 내용을 확인하는 것
디스어셈블러를 사용해 내부 코드와 그 구조를 확인하는 것
이렇게 얻어내서 동적 분석 방법에 좋은 참고 자료로 활용 가능
동적 분석
파일을 직접 실행시켜서 행위를 분석하고, 디버깅을 통해 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법
파일, 레지스트리, 네트워크 등을 관찰하며 프로그램의 행위 분석
디버거를 이용해 프로그램 내부 구조와 동적 원리 분석
소스 코드, 헥스 코드, 어셈블리 코드
리버싱 취급 대상은 보통 실행 파일인 경우 많음.
소스 코드 → 프로그래밍 코드
헥스 코드(HEx code) : 2진수는 사람이 의미를 해석하기는 매우 힘들어서 16진수로 변환해서 분석
Hex Editor를 통해 확인 가능
어셈블리 코드
실행 중인 프로세스 메모리를 변경하는 작업을 패치라고 함.
비도덕적으로 변경하는 경우는 크랙!
실습 - HelloWorld 리버싱
HelloWorld.sln을 visual studio에서 열어서 Release 모드로 빌드해서 실행 파일 만듬
Release로 빌드하면 코드가 좀 더 간결해져서 빌드하기 편함
다만
__security_init_cookie
과 같은 게 /GS 옵션(스택 보호) 옵션을 끄지 않으면 호출되니 실습을 위해 옵션을 끄자. 대신 실제로 코드를 배포할때는 스택 보호는 반드시 활성화해야함.
프로젝트 속성 → "C/C++" → "코드 생성(Code Generation)"으로 이동.
"보안 검사(Security Check)"를 /GS-로 설정(기본값은 /GS).
명령줄이면 cl 명령어에 /GS- 플래그 추가 (예: cl /GS- yourfile.c).
위 옵션을 입력했는데도 수정이 안되서 예제파일 활용
우측 상단 : Register Window
왼쪽 하단 : DUmp Window
오른쪽 하단 : Stack WIndow
왼쪽 상단 : Code Window → Disassembly code 표시하여 각종 comment, label을 보여주며 코드 분석해 loop. jump 위치 등 정보 표시