Reversing Study - day 7
실행 압축
실행 파일을 대상으로 하는 압축으로, 파일 내부에 압축해제 코드를 포함하고 있어서 실행되는 순간에 메모리에서 압축 해제 후 실행시키는 기술이다. 실행 압축된 파일 또한 PE 파일로 존재하며, 내부에 원본 PE 파일과 디코딩 루틴이 존재한다.
EP(Entry Point)코드에 디코딩 루틴이 실행되면서 메모리에서 압축을 해제시킨 후 실행하는 원리로 일반 압축과 비교할 때 가장 두드러지는 차이점은 PE파일의 실행 가능 부분이다.
이 때 일반 PE 파일을 실행 압축 파일로 만들어 주는 유틸리티를 *패커라고 부르며 좀 더 안티리버싱 기법에 특화된 패커를 *프로텍터라고 부른다.
* 패커를 사용하는 목적은 PE 파일 크기 축소, 내부 코드와 리소스 은닉으로 볼 수 있다.
* 프로텍터를 사용하는 목적은 크래킹 방지, 코드 및 리소스 보호 등이 있다.
PE 재배치
PE 파일이 프로세스 가상 메모리에 로딩될 떄 PE헤더의 ImageBase 주소에 로딩된다. DLL 파일의 경우 ImageBase 위치에 이미 다른 DLL 파일이 로딩되어 있다면 다른 비어 있는 주소 공간에 로딩된다.
즉, PE 파일이 ImageBase에 로딩되지 못하고 다른 주소에 로딩될 때 수행되는 일련의 작업들을 의미한다.
PE 재배치 작업의 동작 원리
프로그램에서 하드코딩 된 주소 위치를 찾아 값을 읽은 후 ImageBase만큼 뺀다(VA->RVA). 그 후 실제 로딩 주소를 더한다.(RVA->VA)
이 때 핵심이 하드코딩된 주소 위치를 찾는 것인데 이를 위해 PE 파일 내부에 Relocation Table이 존재한다. 그리고 이 Relocation Table로 찾아가는 방법이 PE 헤더의 Base Relocation Table 항목을 따라가는 것이다.