SUA 리버싱 스터디 4번째, 3부 DLL 인젝션
- DLL 이란?
Dynamic Linked Library 의 약자이다. 여기서 Library란 함수, 데이터, 타입 등 여러가지 프로그래밍 요소들의 집합으로 LIB확장자를 가지는 것이 대부분이다. 자주 쓰는 객체를 매번 직접 작성하기 보다 여러모로 편리하게 만들어두는 "라이브러리" 라고 이해했다.
컴파일시 라이브러리 코드를 실행파일에 복사하는 정적 링크 방식(Static Linked Library)과 달리
동적 링크 방식(Dynamic Linked Library) 은 실행시 라이브러리가 실행파일에 연결되어 실행파일엔 포출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않아 실행파일의 크기가 작아진다.
이때 실행 파일은 실제 코드를 가지고 있는 것이 아니므로 프로그램 실행시 DLL이 꼭 포함되어 있어야 한다.
만드는 절차는 까다롭지만 메모리 절약, 속도, 성능 향상, 리소스 교체 가능, 디버깅 용이, 혼합 프로그래밍 가능, 재사용성 면에서 뛰어나 널리 사용된다.
21장_Window Message Hooking
- Hooking 이란?
원하는 것을 낚아챌때 사용하는 도구인 훅(HOok) 에서 확장한 말로 정보를 엿보거나 가로채는 경우에 사용
- Message Hook 이란?
Window 운영체제는 GUI(Graphic User Interface) 제공
-> Event Driven 방식으로 동작 _/언제 동작할 지 모르는 Event가 일어났을때 즉각적으로 처리,변경되는 방식/_
이벤트 발생시 응용 프로그램은 해당 메세지를 분석, 작업을 진행하게 되는데 메세지 훅 이란 이러한 메세지를 중간에 엿보는 것이다.
메세지 훅이 설치되었다면, (OS Message Queue <-> Application Message Queue) 이 사이 설치된 훅 체인(HOok Chain)에 있는 키보드 메세지 훅 들이 응용 프로그램 보다 먼저 메세지를 엿볼 수 있다. 키보드 메세지 훅 함수 내에서는 단순히 엿보는 것 뿐 아니라 메세지 자체의 변경도 가능하며 가로채서 사라지게 할 수 도 있다.
- SetWindowsHookEx()
메세지 훅 API, 아래에 정의.
HHOOK SetWindowsHookEX(int idHook, //Hook typeHOOKPROC Lpfn, //Hook procedureHINSTANCE hMod, //DLL Handle included Hook procedureDWORD dwThreadId //Thread's ID wanna hooking);
hook procedure은 운영체제가 호출해주는 콜백 함수로 메세지 훅을 걸때 procedure은 DLL 내부에 존재해야 하며 DLL의 인스턴스 핸들이 hMod 이다.
이렇게 API를 이용해 훅을 설치해 두면 어떤 프로세스에서 해당 메세지 발생시 OS가 해당 DLL파일을 해당 프로세스에 강제 인젝션 하고 등록된 hook procedure을 호출. 편리하다. 인젝션을 위한 일을 다 해주는 것
'잰이_IT > 보안 - 리버싱' 카테고리의 다른 글
리버싱 핵심원리_ 어셈블리를 이용한 code Injection (0) | 2018.08.10 |
---|---|
리버싱 핵심원리_ DLL Ejection (0) | 2018.08.04 |
리버싱 핵심원리_ 3부 DLL인젝션_이해2 (0) | 2018.08.01 |