파일 포맷을 알아야 할 필요성?
- 프로세스 적재를 위한 정보가 들어있음
- API 호출을 위한 IAT가 어떻게 존재하고 있는지 살펴볼 수 있음
- 코드 사이즈와 각 섹션의 위치를 담고 있음
- 언패킹, 안티 디버깅 방법 알 수 있음
- 바이러스 분석 시 필요함
PE 파일
: 파일(File)이 이식 가능한 다른 곳에 옮겨져도(Portable) 실행 가능하도록(Executable) 만든 포맷(Format)
프로그래머가 작성한 코드는 CPU가 실행할 수 없다. 따라서 컴파일, 어셈블 과정을 거쳐 CPU가 이해할 수 있는 기계어로 이루어진 목적 파일로 변경된다. 하지만 이 목적 파일(obj)은 직접 실행할 수 없는 파일이다. 표준 라이브러리, 사용자 라이브러리 등을 포함하고 있지 않기 때문. 따라서 링킹을 통해 필요한 라이브러리를 obj 파일과 연결하는 과정(링킹)이 필요하고, 이 과정이 끝나면 실행 가능한 exe 파일이 생성된다.
<PE헤더 복구 실습>
패커(Packer)
: 실행 파일 압축기
- 사용 목적 : PE 파일 내부 코드와 리소스(string, API 등)를 감추기 위한 목적
+ 프로텍터 (패킹 기술로 리버싱을 막기 위한 다양한 기법을 추가하는 것. 쓰레기 코드를 넣어 원본보다 크기가 커질 수 있음)
※ 각종 백신 우회 방법
- 시그니처 변경 (단순히 변수 몇 개를 추가 및 함수 위치를 변경하여 리빌드)
- 쓰레기 코드를 통한 우회 방법 (네 줄이 수행된 결과를 보면 아무것도 바뀌는 것이 없음(대칭 구조))
- 헤더 변조 (TimeDateStamp, Optional Header의 CheckSum, 메모리 속성 변조) -> 해시값 변경
- 대체 가능한 어셈블리어 (sub ebp, 7 >> add ebp, 7..)
- 실행조차 되지 않는 코드
* Themida
: 지상 최고의 패커, 안티 디버깅과 안티 분석, 언패킹 분석을 매우 어렵게 하는 안전한 패커이다.
VMware, 디버거, 프로세스 모니터(ProcMin, Process Monitor) 분석을 방지하는 기능(자신을 분석하는 줄 알고)
패킹된 실행 파일은 이례적으로 크기가 큼
언패커가 존재하나 Themida 버전과 프로그램을 패킹할 때 사용한 설정에 따라 성공률이 다르다
<UPX>
UPX의 특징? PUSHAD & POPAD
먼저, 01015320 PUSHAD 명령어를 통해 EAX~EDI 레지스터 값이 스택에 저장,
그 후 POPAD를 통해 레지스터 복구 후 원래 코드의 Entry Point로 가게 된다.
00401000 이 OEP인 것을 확인할 수 있다.
(원본 프로그램 시작)
여기서의 Import 내용을 DUMP 뜬 파일에 수동으로 재구축할 것이다.
'Study > Reversing' 카테고리의 다른 글
악성코드 분석 (0) | 2021.11.03 |
---|---|
Lena 2번 풀이/Rena's Reversing Tutorial 02 (0) | 2021.10.27 |
리버싱 기초 & reverseMe.exe 분석 (0) | 2021.09.28 |
악성코드 유형 (0) | 2021.09.18 |
Suninatas_11번 문제 풀이 (0) | 2021.05.19 |