Reverse engineering

DLL - 1

LeeIkGyu 2022. 2. 13. 17:52

라이브러리(Library)

자주 사용되는 표준적인 함수(개발에 자주 쓰고 기초적인 함수)시간적 소모를 줄이고 신뢰성을 높이기 위해 표준화할 수 있는 함수를 미리 만들어서 모아 놓은 것

언제 메인 프로그램에 연결하느냐에 따라서 정적 링크 라이브러리(Static Link Library)동적 링크 라이브러리(Dynamic Link Library)로 나뉨

 

정적 링크 라이브러리(Static Link Library : LIB)

컴파일 시점에 라이브러리가 링커에 의해 연결되어 단일 실행 프로그램의 일부분이 되는 것을 뜻함

 

동적 링크 라이브러리(Dynamic Link Library : DLL)

실행 파일에서 해당 라이브러리의 기능을 사용시에만 라이브러리 파일을 참조 또는 다운로드 받아 기능을 호출하는 것을 뜻함 정적 링크 라이브러리와는 다르게 컴파일 시점에서 실행 파일에 함수를 복사하지 않고, 함수의 위치 정보만 가지고 그 함수를 호출할 수 있게 함


LIB DLL
장점 1. 속도가 빠름

2. 작성이 간단함

3. 컴파일시에 해당 정적 라이브러리의
내용이 실행 프로그램의 일부분이 되기 때문에 함께 배포하지 않아도 됨
1. 메인 실행 파일의 크기가 작아짐

2. DLL에 있는 함수들을 다른 곳에서도 호출하여 쓸 수 있으므로 재사용성이 증대됨
단점 1. 실행 파일의 크기가 커짐

2. 함수의 재사용성이 코드 레벨에서만 가능함
1. 사용이 복잡함

2. 속도가 LIB에 비해 느릴 수 있음

3. 컴파일시에 해당 DLL의 내용이 실행 파일 안에 포함되지 않기 때문에 반드시 실행 파일 배포 시에는 라이브러리 역시 함께 배포해야만 함

 

DLL 실습

CreateDLL 프로젝트 생성

3개의 파일 생성

dllmain.cpp 코드

DllMain의 인자

hmodule 프로그램 메모리에 실제로 올라온 DLL의 가상 메모리 주소 값
ul_reason_for_call DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_THREAD_DETACH, DLL_PROCESS_DETACH 중 하나의 값을 가짐

- DLL_THREAD_ATTACHDLL을 사용하는 클라이언트 프로세스에서 THREAD를 생성할 때마다 이값과 함께 DLLMain() 함수가 호출됨

- DLL_THREAD_DETACHDLL을 사용하는 클라이언트 프로세스에서 THREAD가 종료될 때마다 이값과 함께 DLLMain() 함수가 호출됨
lpReserved - ul_reason_for_callDLL_PROCESS_ATTACH인 경우, DLL이 명시적 연결 방식으로 로드되면 NULL, DLL이 암시적 연결 방식으로 로드되면 not NULL의 값을 가진다.

- ul_reason_for_callDLL_PROCESS_DETACH인 경우, FreeLibrary가 호출되었거나 DLL 로드가 실패한 경우라면 NULL, 프로세스가 종료 중이라면 not NULL의 값을 가진다.

MyMath.cpp의 계산기 함수

MyMath.h의 계산기 함수를 명시해 주는 코드

MyMath.h에서 사용된 함수들

#ifdef CREATEDLL_EXPORTS - CREATEDLL_EXPORTS라는 전처리기가 정의 되어 있는지 확인하는 조건문임

- 헤더파일을 DLL 생성 프로젝트와 DLL 호출 프로젝트을 따로 관리 하지 않고 같이 관리 하기 위함임
__declspec(dllexport) DLL을 사용하여 함수를 호출할 수 있다고 명시 해주는 함수
__declspec(dllimport) DLL을 사용하여 함수를 호출하는 함수
extern “C” 네임맹글링을 수행하지 않겠다고 정의하는 것
네임맹글링이란 컴파일러가 함수의 이름을 일정한 규칙을 가지고 변형하는 것

CreateDLL을 빌드 한 후

'Reverse engineering' 카테고리의 다른 글

DLL injection  (0) 2022.02.13
DLL - 2  (0) 2022.02.13
메모리 구조  (0) 2022.02.12
PE 구조 - 3  (0) 2022.02.12
PE 구조 - 2  (0) 2022.02.12