본문 바로가기

리버싱(Reversing)13

리버싱 핵심원리 18장(UPack PE 헤더 상세 분석) 1. UPack 이란? UPack(Ultimate PE 패커)은 실행 압축기(PE Run-Time 패커)이다. UPack의 특징은 PE 헤더를 독특한 방식으로 변형 하는 것으로, 중국의 dwing이라는 사람이 만든 PE 패커이다. 2 UPack으로 notepad.exe 실행 압축하기 우선 첫번째로 UPack.exe를 이용해 notepad.exe를 실행압축 해줄 것이다. upack.exe와 notepad.exe를 복사한 뒤, cmd 창에서 'upack notepad.exe' 명령을 내린다. 참고로 UPack은 원본 파일 자체를 실행 압축하기 때문에 따로 백업해놓지 않으니, 중요 파일을 실행 압축할 때는 꼭 미리 백업을 해둬야 한다! 헤더 겹쳐쓰기 IMAGE_DOS_HEADER와 IMAGE_NT_HEADER.. 2020. 11. 14.
리버싱 핵심원리 17장 (실행파일에서 .reloc 섹션 제거하기) EXE 형식의 PE 파일에서 Base Relocation Table 항목은 실행에 큰 영향을 끼치지 않고, 실제로 제거 후 실행을 해봐도 정상적으로 실행이 잘 된다. VC++에서 생성된 PE 파일의 Relocation 섹션이름이 바로 '.reloc'인데, 이 섹션이 제거되면 PE 파일 크기가 약간 줄어드는 효과를 볼 수 있다. .reloc 섹션은 보통 마지막에 위치하는데, 이렇게 마지막에 위치한 섹션을 제거하는 건 PEView와 Hex editor만 가지고도 수동으로 충분히 할 수 있다. 실습파일의 끝에 존재하는 '.reloc'섹션을 정확히 제거하려면 아래의 4단계 작업을 해야한다. 1단계- .reloc 섹션 헤더정리 PEView를 이용해 실습 파일의 .reloc 섹션 헤더 영역을 확인해보면, 섹션 헤더.. 2020. 11. 14.
리버싱 핵심원리 16장(Base Relocation Table) PE 파일 재배치 PE 파일 재배치란, PE 파일이 ImageBase 주소에 로딩되어야 하는 이미 다른 파일이 로딩되어 있는 등의 문제로 그 주소에 로딩되지 못하고, 다른 주소에 로딩될 때 수행하는 일련의 작업들을 의미한다. 프로세스가 생성될 때 exe 파일은 가장 먼저 메모리에 로딩되기 때문에 exe 에서는 재배치를 고려할 필요가 없었다. 하지만 Windows Vista 이후부터는 보안 강화를 위해, exe 파일이 실행될 때마다 랜덤한 주소에 로딩하는 ASLR(Address Space Layout Randomiziation) 기능이 추가 되었다. 이렇게 ASLR 기능에 의해 랜덤하게 하드코딩 된 메모리 주소를 현재 로딩된 주소에 맞게 변경해주는 작업을 PE 재배치라고 할 수 있다. PE 재배치 동작원리.. 2020. 11. 9.
리버싱 핵심원리 15장(UPX 실행 압축된 notepad 디버깅) 15장에서는 UPX 실행 압축된 notepad_upx.exe를 디버깅하여 실행압축에 대한 개념을 이해하는 것이 목표이다. 즉, 코드를 트레이싱하면서 원본 notepad.exe 코드를 찾아내는 것이라고 할 수 있다. 1. 코드 트레이싱 명령 Notepad_upx.exe를 디버거로 열어보면 위와 같이 UPX EP 코드가 나타난다. EP 주소는 01015330이며, 실제로 압축된 notepad 원본 코드는 EP주소(01015330) 위쪽에 존재한다. UPX 파일 트레이싱을 해볼 것인데, 이때 “루프(Loop)를 만나면 그 역할을 살펴본 후 탈출한다” 라는 방대한 코드에 대한 원칙이 있다고 한다. 압축 해제 과정은 무수히 많은 루프의 연속임으로, 적절히 루프를 탈출할 줄 알아야 한다. 방대한 코드를 트레이싱 할.. 2020. 11. 7.
리버싱 핵심원리 (14장) 14.1 데이터압축 데이터 압축은 컴퓨터 공학의 주요분야로, 어떤 형태의 파일이라도 내부는 바이너리로 되어있으며, 이를 적절한 압축 알고리즘을 사용하여 크기를 줄이는 것이다. 이 압축된 파일을 100% 복원할 수 있으면 비손실 압축, 복원할 수 없으면 손실압축이라고 부른다. 비손실 압축 파일 크기를 줄여서 보관 및 이동에 용이하도록 하려는 목적으로 사용된다. 대표적인 비손실 압축 알고리즘은 Run-Length, Lempel-Ziv, Huffman 등이 있으며, 대표적인 압축 포맷인 ZIP, RAR 등도 근본압축개념은 앞의 예시와 같다고 볼 수 있다. 손실압축 손실압축은 파일에 의도적인 손상을 주어서 그 댓가로 압축률을 높이는 목적으로 사용된다. 주로 멀티미디어 파일(jpg, mp4)은 대부분이 이 기법을.. 2020. 11. 2.
리버싱 핵심원리 13.5~13.8(PE File Format) 13.5 IAT DLL은 Windows OS의 근간을 이루는 개념으로, Dynamic Linked Library, 즉 동적 연결 라이브러리라고 한다. 16bit DOS 시절에는 코드가 해당 함수의 binary 코드를 그대로 가져와 프로그램에 삽입시켜버리는 구조로 실행되어 DLL없이 Library만 존재했는데, 이는 멀티태스킹이 지원되면서 심각한 메모리 낭비를 불러오게 됐다. 32bit Windows 환경에서는 매우 많은 라이브러리 함수가 필요하게 되면서, 아래와 같은 DLL 개념이 고안됐다. 1. 프로그램에 라이브러리를 포함시키지 말고 별도의 파일(DLL)로 구성하여 필요할 때마다 불러 쓸 것 2. 일단 한번 로딩된 DLL의 코드, 리소스는 Memory Mapping 기술로 여러 Process에서 공유해.. 2020. 11. 2.