Binary Packing
Binary packing is the technique of compressing executable files to obscure their content, making it harder for security application to detect or analyze them.
실행 파일을 압축하여 그 내용을 숨기는 기술로, 보안 애플리케이션이 해당 파일을 분석하거나 탐지하게 어렵게 만든다.
바이너리 패킹은 실행 파일을 압축하고 암호화하여 그 구조를 숨기는 방식이다.
실행될 때 패커라는 소프트웨어가 파일을 압축하고 실행 시점에서 이를 다시 압축 해제하여 정상적으로 작동하게 만든다
IDA로 UPX packing된 파일을 확인하면 프로그램의 로직적인 부분이 꼬여있는 것을 확인할 수 있다.
장점
- 코드 난독화 : 바이너리 패킹은 코드를 암호화하고 압축하여 리버싱을 통한 공격을 어렵게 만든다
- 무결성 보호 : 악성 공격자가 코드를 수정하거나 악성 코드를 삽입하는 것을 방지한다.
- 실행 시 복호화 : 앱이 실행 중에만 코드가 복호화 된다
단점
- 성능 저하 : 실행 중 복호화 과정에서 성능 저하가 발생할 수 있음
- 유지 보수 어려움
UPX
https://github.com/upx/upx/releases
Ultimate Packer for Executables의 약자로, 오픈소스로 제공되는 실행 프로그램 파일을 압축하는 도구이다.
UPX 패킹
upx -o " 생성될 패킹 파일 경로 " " 패킹에 사용할 파일 경로 "
UPX 언패킹
upx -d -o "생성될 언패킹 파일 경로" "언패킹에 사용할 파일 경로"
UPX 패킹된 파일인지 확인하기
UPX 패킹된 파일인지는 파일의 헤더를 보더라도 확인할 수 없다.
UPX 명령어로 확인
upx -t filename.exe
hex 값 확인
UPX 패킹되어있는 파일은 헤더에는 없지만, 어딘가에 UPX라는 문자열이 존재한다.
리눅스 / 맥의 경우에는
hexdump -C filename.exe | grep UPX
Windows에서는 HxD같은 GUI로 UPX 문자열을 검색하여 확인할 수 있다.
동적 분석하기
바이너리 패킹은 원본이 복원되는 과정이 바이너리 파일에 담겨있기 때문에, 동적 분석을 하면 패킹이 풀리는 과정을 확인할 수 있을 것이다.
* 얼마전에 CTF 뛰었는데 UPX 패킹된 파일이 나왔다 ... 만약 IDA로 봤을 때 로직이 계속 끊겨 보인다면 바이너리 패킹되어있는지 확인하자 -> 이런 경우에는 언패킹 해서 봐야한다.