본문으로 바로가기

[D+12] DLL Injection (1)

category 해킹&보안/리버싱 2017. 4. 18. 20:59
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

6. DLL Injection


1) 프로세스 실행흐름


▣ DLL Injection?

- 시스템 해킹 시간때는 코드를 주입하고 RET 정보를 수정해줘야 실행이 됐음.

- DLL Injection은 dll 주입만 하면 dll 자체가 PE 구조라 알아서 E.P 참조해서 EIP 정해서 코드 실행까지 됨.

- 편하지만 알아서 실행되기 때문에 굉장히 위험할 수 있음.


▣ 가상 메모리 공간

- 가상 메모리 공간이 생김으로써 각각의 프로세스들이 서로 다른 프로세스의 메모리 공간에 접근을 못하게 됨.

- 보안 상 이유로 생겨남.

- 그러나 DLL Injection은 해당 사고를 파괴시킴. (한 프로세스의 가상메모리 상에 올라가서 동작을 함)


▣ 프로세스

- DLL Injection은 원래 프로그램이 정상동작을 해야하는 경우가 많기 때문에 주의해야한다.

☞ 시스템 해킹 시간에는 /bin/sh 실행 후 그 뒤의 상황은 처리하지 않았으나 DLL Injection은 주의해야함.

- 쓰레드를 새로 추가하여 해당하는 새로운 쓰레드에서 DLL 코드가 실행되도록 함.

Thread Injection



2) DLL (Dynamic Linked Library)


▣ DLL 이란?

- 프로그램 실행 후 동적으로 로드되는 라이브러리.

- 별도의 파일로 존재.

- 이미 실행중인 프로세스의 메모리 공간에 침투.


▣ DLL 장점

- 실행 파일의 크기를 줄임.

- 기능의 모듈화가 가능.

- 패치, 기능 개선의 효율성


 DLL 만들기

- Visual -> Win32 Dynamic Link Library -> simple DLL project -> dll파일 이외의 파일 지우기.

- Project setting -> c/c++ -> category : Precompile... Not using체크

#include <windows.h>

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	switch(ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		MessageBox(NULL, "DLL ATTACH!!!", "ATTACH", MB_OK);
		break;
	case DLL_PROCESS_DETACH:
		MessageBox(NULL, "DLL DETACH!!!", "DETACH", MB_OK);
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	}
    return TRUE;
}

- DLLMain 인자값

☞ HANDLE hModule : 모듈 핸들. 메모리상 올라와있는 PE이미지 하나하나(=모듈) 구분하는 핸들.

--> 주소는 겹칠일이 없으니까 DLL 파일의 Image Base값을 핸들값으로 사용함.

☞ DWORD  ul_reason_for_call : 로딩형식, 상태값.

--> DLLMain은 4번 실행될 수 있음. 위의 case별로.

☞ LPVOID lpReserved : 호출방식 (로딩방식)

--> 명시적 : 프로그램 실행(IMPORT)  /  암시적 : 실행중에 DLL 넣기 (필요에 의해 로딩)


▣ DLL 파일 로드하기

- 가상 메모리 공간에서 LoadLibrary를 하면 하드에서 원하는 DLL 파일을 읽음.

- 해당 DLL 파일이 Mapping 되면 가상메모리 공간에 추가됨.

LoadLibrary 함수는 Kernel32.DLL에 있음. (고로 Kernel32.DLL이 내가 넣고자하는 원본프로그램에 존재해야함)

☞ Kernel32.DLL : 파일I/O, 메모리, 객체, 프로세스, 쓰레드 관리.






i2sec 대구지점 23기 수료생.

'해킹&보안 > 리버싱' 카테고리의 다른 글

[D+14] 악성코드 분석  (0) 2017.04.21
[D+13] DLL Injection (2)  (0) 2017.04.20
[D+11] 안티 디버깅  (0) 2017.04.17
[D+10] 패킹&언패킹 (2)  (0) 2017.04.12
[D+9] 패킹&언패킹 (1)  (0) 2017.04.11