파일 포맷을 알아야 할 필요성?

- 프로세스 적재를 위한 정보가 들어있음

- API 호출을 위한 IAT가 어떻게 존재하고 있는지 살펴볼 수 있음

- 코드 사이즈와 각 섹션의 위치를 담고 있음

- 언패킹, 안티 디버깅 방법 알 수 있음

- 바이러스 분석 시 필요함

 

 

PE 파일

: 파일(File)이 이식 가능한 다른 곳에 옮겨져도(Portable) 실행 가능하도록(Executable) 만든 포맷(Format)

 

출처 : 인프런_윈도우 악성코드(malware) 분석 입문 과정 강의자료

프로그래머가 작성한 코드는 CPU가 실행할 수 없다. 따라서 컴파일, 어셈블 과정을 거쳐 CPU가 이해할 수 있는 기계어로 이루어진 목적 파일로 변경된다. 하지만 이 목적 파일(obj)은 직접 실행할 수 없는 파일이다. 표준 라이브러리, 사용자 라이브러리 등을 포함하고 있지 않기 때문. 따라서 링킹을 통해 필요한 라이브러리를 obj 파일과 연결하는 과정(링킹)이 필요하고, 이 과정이 끝나면 실행 가능한 exe 파일이 생성된다.

 

 

<PE헤더 복구 실습>

실행되지 않는 파일
PE 헤더 부분에 어떠한 값이 들어있다.
크기 비교 결과 역시나 16바이트가 더 많다.
HxD를 통해 해당 줄을 지워주고 저장
정상 복구

 

 

또 다른 파일 예시. HxD의 [Analysis] - [File-compare] - [Compare] 등을 통해서도 쉽게 비교 가능

 

 

패커(Packer)

: 실행 파일 압축기

 

- 사용 목적 : PE 파일 내부 코드와 리소스(string, API 등)를 감추기 위한 목적

               + 프로텍터 (패킹 기술로 리버싱을 막기 위한 다양한 기법을 추가하는 것. 쓰레기 코드를 넣어 원본보다 크기가 커질 수 있음)

 

※ 각종 백신 우회 방법

- 시그니처 변경 (단순히 변수 몇 개를 추가 및 함수 위치를 변경하여 리빌드)

- 쓰레기 코드를 통한 우회 방법 (네 줄이 수행된 결과를 보면 아무것도 바뀌는 것이 없음(대칭 구조))

- 헤더 변조 (TimeDateStamp, Optional Header의 CheckSum, 메모리 속성 변조) -> 해시값 변경

- 대체 가능한 어셈블리어 (sub ebp, 7 >> add ebp, 7..)

- 실행조차 되지 않는 코드

 

 

* Themida

출처 https://www.oreans.com/Themida.php

: 지상 최고의 패커, 안티 디버깅과 안티 분석, 언패킹 분석을 매우 어렵게 하는 안전한 패커이다.

VMware, 디버거, 프로세스 모니터(ProcMin, Process Monitor) 분석을 방지하는 기능(자신을 분석하는 줄 알고)

패킹된 실행 파일은 이례적으로 크기가 큼

언패커가 존재하나 Themida 버전과 프로그램을 패킹할 때 사용한 설정에 따라 성공률이 다르다

 

 

<UPX>

오리지널 notepad 파일
upx.exe ori_notepad.exe 명령어로 패킹
언패킹은 이렇게. -d 옵션을 주면 됨
원본 파일을 건드리지 않고 패킹된 새로운 파일 생성할 떄는 -o 옵션
새로 생성된 파일

 

ori_notepad_upx 의 어셈블리 코드

UPX의 특징? PUSHAD & POPAD

 

먼저, 01015320 PUSHAD 명령어를 통해 EAX~EDI 레지스터 값이 스택에 저장, 

그 후 POPAD를 통해 레지스터 복구 후 원래 코드의 Entry Point로 가게 된다.

 

 

upx 로 패킹되어 있는 파일
PUSHAD 실행
ESP 위치로 가서 Hardware Breakpoint를 건다
그러면 POPAD 명령어까지 실행된 이후의 상황이 된다. 원래 처음의 레지스터 상태로 돌아온 것 

00401000 이 OEP인 것을 확인할 수 있다.

(원본 프로그램 시작)

 

 

OllyDBG의 플러그인을 사용해 덤프를 뜨겠다
Rebuile Import 체크 해제, DUMP 파일 따로 저장

여기서의 Import 내용을 DUMP 뜬 파일에 수동으로 재구축할 것이다.

 

OEP와 Import Size를 변경해주었다.
Fix 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

+ Recent posts