Reverse Engineering
-
[리버싱 핵심원리 study] 24장 DLL 이젝션Reverse Engineering 2021. 1. 8. 03:49
DLL 이젝션은 앞에서 다룬 DLL 인젝션과는 반대되는 개념으로, 특정 프로세스에 로딩된 DLL을 빼내는 방법이다. DLL 인젝션에서는 대상 process로 하여금 LoadLibrary API를 호출하도록 하는 반면, 이젝션에서는 FreeLibrary API를 호출하게끔 하는 방식으로 이루어져 있다. 1. DLL 이젝션 구현 책에 나와있는 실습 코드를 분석해보자. #include "Windows.h" #include "tlhelp32.h" #include "tchar.h" #define DEF_PROC_NAME (L"notepad.exe") #define DEF_DLL_NAME (L"myhack.dll") DWORD FindProcessID(LPCTSTR szProcessName) { DWORD dwPI..
-
[리버싱 핵심원리 study] 23장 DLL 인젝션Reverse Engineering 2021. 1. 6. 03:29
0. 들어가기 전 이번 실습은 진행하는 데 있어서 아래와 같은 오류들로 인해 발목을 잡혔다. 구글링을 해본 결과 간단한 원인은 권한이 없어 관리자 권한으로 cmd를 실행해줘야만 정상적으로 DLL 인젝션 명령이 실행되는 것이었다. 관련 내용을 아래 블로그에서 잘 다루는 것 같아 참고해보면 좋을 것 같다. SetPrivilege Function & Access Token Privilege # Introduce SetPrivilege 함수는 주로 Injector에서 많이 사용되고 Debugger와 Cheat Engine등의 Debugging을 수행하는 프로그램에 쓰일 것 같은 함수입니다. 해당 프로세스의 사용자 엑세스 토큰의(Access Token) 특 holi4m.github.io 또한 DLL 인젝션을 하는..
-
[리버싱 핵심원리 study] 21장 Windows 메세지 후킹Reverse Engineering 2021. 1. 4. 18:31
1. 훅 컴퓨터 분야에서 OS-App-User 간에 오고 가는 정보를 엿보고 조작할 수 있는데 이와 같은 행위를 후킹(Hooking)이라고 한다. 이번 장에서는 가장 기본적인 형태인 Message Hook에 대해 알아본다. 2. 메시지 훅 Windows 운영체제는 GUI를 제공하고, 이는 Event Driven 방식으로 작동한다. 이벤트란 키보드 입력, 마우스 클릭 등의 작업을 일컫는다. 이러한 이벤트가 발생할 때 OS는 미리 정의된 메시지를 해당 응용 프로그램으로 통보한다. 메시지 훅이란 이런 통보되는 메시지를 중간에서 엿보는 것이다. 일반적으로 Windows message는 다음과 같은 흐름으로 진행한다. - 키보드 입력 이벤트가 발생하고 WM_KEYDOWN 메시지가 OS message queue에 ..
-
[리버싱 핵심원리 study] 20장 인라인 패치 실습Reverse Engineering 2021. 1. 1. 22:23
1. 인라인 패치(Inline Patch) 인라인 패치는 코드를 직접 수정하기 어려울 때 간단히 코드 케이브(Code Cave)라고 하는 패치 코드를 삽입한 후 실행해 프로그램을 패치시키는 방법이다. 주로 대상 프로그램이 실행 압축되어 있어서 직접 수정하기 어려운 상황에 사용되는 기법이다. 위와 같은 그림에서 만약에 패치를 원하는 영역이 암호화된 영역에 있다면, 복호화 과정에서 그 값이 변질되므로 그냥 패치시켜서는 안 된다. 이와 같은 문제를 해결하기 위해서 복호화 과정 이후 Code Cave로 JMP 하여 원하는 패치를 진행한 후 OEP로 JMP 하는 방식을 이용할 수 있다. 2. 실습 - Patchme 리버싱 핵심원리 책에서는 ap0x 리버서가 만든 patchme 예제를 이용하여 실습을 진행한다. 먼..
-
[리버싱 핵심원리 study] 18장 UPack PE 헤더 상세 분석Reverse Engineering 2020. 12. 30. 21:38
1. UPack 설명 UPack은 중국의 dwing이라는 사람이 만든 PE 패커로, UPack의 등장으로 많은 PE 유틸리티들이 정상적으로 동작하지 않았다. 이러한 특징을 이용해 많은 악성 코드 제작자들이 자신의 코드를 UPack으로 실행 압축하여 배포하였고, 현재 대부분의 AV 제품들은 UPack으로 실행 압축된 파일들을 악성코드로 분류한다. (이번 실습을 진행하면서 Windows Defender에 지속적으로 탐지되어 매우 애먹었다.) 2. UPack으로 notepad.exe 실행 압축하기 UPack의 윈도우형 최신 버전인 WinUPack 0.39를 이용하였다. PEView로 압축된 notepad.exe를 살펴보자. 위와 같이 헤더 부분을 정확하게 읽어내지 못하는 것을 확인할 수 있다. 예전 버전의 P..
-
[리버싱 핵심원리 study] 17장 실행 파일에서 .reloc 섹션 제거하기Reverse Engineering 2020. 12. 29. 23:48
1. .reloc 섹션 EXE 형식의 PE 파일에서 Base Relocation Table은 실행에 큰 영향을 끼치지 않으므로, 제거 후 실행 테스트를 해도 정상적으로 실행이 잘 된다. (DLL, SYS는 필수) 2. reloc.exe .reloc 섹션을 제거하는 실습으로 다음과 같은 과정을 진행한다. (1) .reloc 섹션 헤더 정리 (2) .reloc 섹션 제거 (3) IMAGE_FILE_HEADER 수정 (4) IMAGE_OPTIONAL_HEADER 수정 1) .reloc 섹션 헤더 정리 위와 같이 PEView로 예제 파일을 살펴보면 270 offset에서 시작하는 것을 확인할 수 있다. 270 ~ 297 영역을 HxD를 이용하여 0으로 바꾸자. (IMAGE_SECTION_HEADER의 크기는 3..
-
[리버싱 핵심원리 study] 16장 Base Relocation TableReverse Engineering 2020. 12. 29. 23:29
1. PE 재배치 PE 파일이 메모리에 로딩될 때 ImageBase 주소에 로딩이 된다. DLL의 경우 이미 다른 DLL이 로딩되어 있다면 다른 비어 있는 주소 공간에 로딩된다. 이와 같은 것을 PE 재배치라고 한다. DLL과 달리 EXE 파일은 가장 먼저 메모리에 로딩되기 때문에 재배치를 고려할 수가 없었으나, Windows Vista 이후부터는 보안 강화를 위해 ASLR(Address Space Layout Randomization) 기능이 추가되어 실행될 때마다 랜덤 한 주소에 로딩이 된다. => 이 글을 작성하는 시점에 Windows 10 환경에서 OllyDbg로 notepad.exe를 여러번 재실행해보았지만, 로딩되는 주소에는 변화가 없었다. 해당 부분에 대한 궁금증을 해소하기 위해서 구글링을 ..
-
[리버싱 핵심원리 study] 15장 UPX 실행 압축된 notepad 디버깅Reverse Engineering 2020. 12. 29. 02:49
이전 실습에서 생성한 notepad_upx.exe를 디버깅하여 실행 압축에 대한 개념을 이해하고 원시적인 방법으로 tracing 하면서 OEP를 찾아보자. 1. notepad.exe의 EP code 우선 원본 notepad.exe의 EP 코드를 살펴보자. 010073BE에서 GetModuleHandleA API를 이용하여 notepad.exe 프로세스의 ImageBase를 구한 후, 010073B4와 010073C0 주소에서 각각 MZ와 PE Signature를 비교한다. 2. notepad_upx.exe의 EP Code EP 주소는 010154F0으로, 이곳은 두 번째 섹션의 끝부분이다. 우선 PUSHAD 명령어를 통해 EAX ~ EDI 레지스터 값을 스택에 저장하고, ESI와 EDI 레지스터를 각각 ..