No img

실행 압축


실행 파일을 대상으로 하는 압축으로, 파일 내부에 압축해제 코드를 포함하고 있어서 실행되는 순간에 메모리에서 압축 해제 후 실행시키는 기술이다. 실행 압축된 파일 또한 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 항목을 따라가는 것이다.

 

'Security > Reversing' 카테고리의 다른 글

코드엔진 Basic RCE L06  (0) 2020.03.13
코드엔진 Basic RCE L05  (0) 2020.03.12
코드엔진 Basic RCE L04  (0) 2020.03.12
코드엔진 Basic RCE L03  (0) 2020.03.12
Reversing Study - day 6(PE File)  (0) 2020.03.12
Reversing Study - day 5(함수 호출 규약)  (0) 2020.03.12
Reversing Study - day 4  (0) 2019.11.28
Reversing Study - day 3(스택 프레임)  (0) 2019.11.27