목록Reversing/리버싱 핵심원리 (9)
Study
21. Windows 메시지 후킹 21.1 훅 - 훅(Hook) : 원하는 정보를 엿보거나 가로채는 도구 - 후킹(Hooking) : 실제로 정보를 엿보고 조작하는 행위 21.2 메시지 훅 Windows 운영체제는 GUI를 제공하고, 이는 Event Driven 방식으로 동작한다. 키보드를 입력하고, 마우스를 이용해 버튼 선택, 창 크기 변경, 창 이동 등의 클릭하는 등의 행위는 모두 이벤트이다. 이런 이벤트가 발생할 때 OS는 미리 정의된 메시지를 해당 응용 프로그램으로 통보한다. 응용 프로그램은 해당 메시지를 분석하여 필요한 작업을 진행하는 것이다. [그림 21.1] ① 키보드 입력 이벤트가 발생하면 WM_KEYDOWN 메시지가 [OS message queue]에 추가된다. ② OS는 어느 응용 프로..
20. 인라인 패치 실습 20.1 인라인 패치 - 인라인 코드 패치 : 원하는 코드를 직접 수정하기 어려울 때 간단히 코드 케이브라는 패치 코드를 삽입한 후 실행해 프로그램을 패치시키는 기법 - 대상 프로그램이 실행압축 혹은 암호화되어 있어서 파일을 직접 수정하기 어려울 경우 많이 사용하는 기법 왼쪽의 그림을 보면 EP는 원본 코드가 아닌 암호화된 원본 코드를 디코딩 하는 코드에 존재하고 그곳에서 OEP 코드를 복호화 하고 나면 OEP로 점프한다. 만약 패치하고자 하는 코드가 암호화된 OEP 코드에 존재한다면 EP의 복호화 코드를 실행시킨 후에 패치를 해야 하기 때문에 실행 시 복호화, 패치를 모두 수행할 수 있도록 Code Cave를 추가한다. 그리고 복호화가 끝난 후 점프할 주소를 OEP가 아닌 Co..
18. UPack PE 헤더 상세 분석 18.1 UPack 설명 - 중국의 dwing이라는 사람이 만든 PE 패커 - PE 헤더를 독특하게 변형하는 패커 18.2 UPack으로 실행압축된 notepad.exe ▲ PEview가 notepad의 헤더를 제대로 읽어내지 못한다. 그래서 다른 유틸리티인 Stud_PE를 이용해서 본다. 18.3 PE 헤더 비교 ▲ 원본의 PE 헤더이다. IMAGE_DOS_HEADER와 DOS Stub, IMAGE_NT_HEADER 순의 전형적인 PE header가 보인다. ▲ 그러나 실행 압축된 PE 파일을 살펴보면 맨 앞에 MZ 문자열이 나타나는 것 말고는 원본 PE와 크게 다름을 알 수 있다. 18.4 상세 분석 18.4.1 헤더 겹쳐쓰기 이는 Header를 겹쳐 쓰는 기법..
17. 실행 파일에서 .reloc 섹션 제거하기 17.1 .reloc 섹션 - exe 형식의 PE 파일에서 Base Relocation Table 항목은 실행에 큰 영향을 미치지 않는다. - PEView와 HxD만 가지고도 수동으로 충분히 제거가 가능하다. 17.2 .reloc 제거 ▶ .reloc 섹션을 제거하는 순서 ① .reloc 섹션 헤더 정리 ② .reloc 섹션 제거 ③ IMAGE_FILE_HEADER 수정 ④ IMAGE_OPTIONAL_HEADER 수정 17.2.1 .reloc 섹션 헤더 정리 섹션 헤더의 범위는 270~297이다. 이 부분을 HxD를 이용하여 0으로 덮어쓴다. 17.2.2 .reloc 섹션 제거 .reloc 헤더를 보면 file에서 .reloc 섹션의 범위는 C000~D00..
16. Base Relocation Table 16.1 PE 재배치 - PE 파일(EXE/DLL/SYS)이 프로세스 가상 메모리에 로딩될 때 PE 헤더의 ImageBase 주소에 로딩된다. - DLL(SYS) 파일의 경우 ImageBase 위치에 이미 다른 DLL(SYS) 파일이 로딩되어 있다면 다른 비어 있는 주소 공간에 로딩된다. - PE 파일이 ImageBase에 로딩되지 못하고 다른 주소에 로딩될 때 수행되는 일련의 작업을 의미한다. 16.1.1 dll/sys 이미지 베이스 10000000을 갖는 a와 b 두 dll이 있다. a.dll이 먼저 로드되어 있을 때 b.dll을 로드하려 하면 a.dll가 로드된 주소를 포기하고 다른 주소를 찾아 로드된다. ex) 메모장을 로드한 후 실행시키고 dll 인..
15. UPX 실행 압축된 notepad 디버깅 15.1 압축코드 소개 ▲ 파일을 키면 UPX EP 코드(1015330)가 나타난다. 이는 UPX1 영역에 속하는 주소이며 notepad 프로그램을 실행시키는 코드의 진입점이 아니라 원본 코드를 압축 해제하는 코드의 EP 코드이다. ※ 참고 ① UPX는 압축된 원본 코드와 압축 해제 코드를 UPX1 섹션에 저장하고, UPX0 섹션에 압축을 풀어 원본 코드를 올린다는 것을 14장에서 배웠다. ② .rsrc 섹션은 압축이 되지 않고 원본 그대로 남아있는데, 그 이유는 파일의 아이콘, 이미지, IAT 관련 정보를 담고 있기 때문이다. 실행 이전에 필요한 리소스를 담고 있으므로 압축해서는 안 된다. 원본 코드를 복원시키는 코드는 UPX1의 마지막 부분에 있으며 1..
13. PE File 13.3 IAT ▶ IAT란? 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하고 있는지를 기술한 테이블 13.3.1 DLL ▶ DLL이란? 16비트 DOS 시절은 어떠한 라이브러리 함수를 사용하고자 할 때 라이브러리에서 해당 함수의 binary 코드를 그대로 가져와 프로그램에 포함시켰다. 그러나 32비트 Windows 환경에서는 멀티태스킹을 지원하기 때문에 여러 곳에서 자주 사용되는 라이브러리 함수를 매번 프로그램에 포함시키는 방법이 비효율적이 되어버렸다. 또한 Windows 환경을 제대로 지원하기 위해서는 매우 많은 라이브러리 함수가 필요하다. (process, memory, window, message 등) 따라서 심각한 자원낭비를 방지하기 위해 고안해낸 방법이 DLL 방법이다..
13. PE File 13.1 PE File이란? - Windows 운영체제에서 사용되는 실행 파일 형식. - 기본적으로 32비트 형태의 실행 파일을 의미하며 PE32라는 용어를 사용하기도 한다. - 64비트 형태의 실행 파일은 PE+ 또는 PE32+라고 부르며 PE 파일의 확장 형태이다. 실행 계열 .scr - Screen Saver의 약자. 윈도우 화면 보호기 파일. 이 파일은 혼자서도 실행된다. - 윈도우 디렉터리나 System 디렉터리에 설치되며, 디스플레이 등록정보에서 설정하여 사용한다. .exe - Executable의 약자로 가장 기본적인 실행파일. - 그 외 실행 파일로는 .bat, .com등이 있다. 드라이버 계열 .sys - System의 약자로 시스템 운영에 꼭 필요한 파일이며, co..
07. Stack Frame 7.1 Stack Frame이란? ESP(스택 포인터)가 아닌 EBP(베이스 포인터)를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법 - ESP는 프로그램 실행 과정 중 스택 내에서 수시로 변경되기 때문에 이를 기준으로 프로그램을 작성하면 프로그래머도 힘들고, CPU도 정확한 위치를 참고할 때 어려움이 있다. - 따라서 EBP를 이용하여 함수가 실행되는 동안 일정한 위치를 유지해주면 그것을 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있다. 7.2 StackFrame.exe 분석 예제 코드를 준비하고 OllyDbg에서 열어 main()을 호출하는 CALL 명령어부터 보기로 한다. ▲ CALL StackFra.00401020 m..