이번 프로그램을 실행 시키면 다음과 같은 창을 띄우게 된다.
이번에는 PEiD 라는 툴을 이용하여 이 프로그램의 정보를 확인해보겠습니다.
아래쪽을 보시면 UPX 0.89 ~ 라고 쓰인 것을 볼 수 있는 데요. 이는 UPX라는 Packer를 이용하여
원래 프로그램이 Packing 되어 있다는 의미입니다. 그리고 우리가 제대로 분석을 하기 위해서는
Unpacking을 통해 원래 코드를 얻어야 함을 의미합니다.
여기서 Packing 이란?
기본적으로는 파일 압축이다. 파일의 크기를 보다 작게 줄이기 위해 사용하는 방법. 압축프로그램을 이용한 것과는 달리 바로 실행된다는 이점이 있다. 여기서 시간이 지나면서 자신의 코드를 타인의 리버싱으로 부터 보호하기 위한 Protector를 이용하여 Packing을 하기도 한다.
이를 Unpacking 하는 순서는 보통 아래와 같다.
OEP(Original Entry Point) 찾기 -> 원래 코드 Dump -> 깨진 IAT(Import Address Table) 복구
OEP: 직역하면 원래 들어가는 지점, 즉 프로그램의 진짜 시작 지점이다.
IAT: 프로그램이 사용하고 있는 외부 함수의 위치 및 이름을 저장하고 있는 장소. 외부 함수란 kernel32.dll, user32.dll 등에 있는 함수들을 말한다.
보통은 툴을 이용하여 Unpacking을 하지만 저는 공부의 목적을 위해 직접 하는 방법을 소개하겠습니다. 다만 분량을 생각하여 다음 편에서 Unpacking 및 풀이법을 알려드리겠습니다.