Dll Injection p311


출처 : https://www.joinc.co.kr/w/man/4200/CreateThread


DLL Injection p311 


pragma comment(lib, "urlmon.lib")

- 명시적인 라이브러리의 링크

 해당 라이브러리를 링크 시켜준다. (라이브러리 링크?)

 파일헤더와 라이브러리의 차이


-----------------------------------------------------------------------------------------------

현재 어플리케이션의 디버거창에 스트링을 출력하는 함수

OutputDebugString(LPCTSTR lpOutputString)


--------------------------------------------------------------------------------------------------

쓰레드 생성함수(호출한 프로세스의 가상 주소에 쓰레드를 생성해서 실행)


함수가 성공적으로 실행되면 생성된 쓰레드의 handle이 리턴

실패면 NULL 리턴

GetLastError()함수 호출시 자세한 에러 내역 확인 가능


실제로 신경써 줄 부분은 lpStartAddress 와 lpParameter 두 가지 뿐이며

나머지는 디폴트 값 (0 혹은 NULL 포인터)으로 전달하면 된다.


HANDLE CreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes, 

SIZE_T dwStackSize,  

LPTHREAD_START_ROUTINE lpStartAddress, 

LPVOID lpParameter, 

DWORD dwCreateionFlags,

LPDWORD lpThreadId 

);


- LPSECURITY_ATTRIBUTES lpThreadAttributes : SECURITY_ATTRIBUTES 구조체 포인터 (NULL 사용하면 기본 보안특성 사용)


typedef struct _SECURITY_ATTRIBUTES 

{

    

DWORD nLength;   // 이 구조체의 크기

    

LPVOID lpSecurityDescriptor;    // 공유 제어에 대한 보안 descriptor 포인터.

    

BOOL bInheritHandle;    // Child Process 로 Kernel Object Handle를 넘겨줄 것인지.


}


- SIZE_T dwStackSize : 스택의 크기를 초기화 한다. 단위는 byte (0이면 기본 크기 사용)


- LPTHREAD_START_ROUTINE lpStartAddress : 실행할 쓰레드 함수의 포인터


- LPVOID lpParameter : 쓰레드에 넘겨줄 변수의 포인터


- DWORD dwCreateionFlags : 쓰레드가 생성될 때 사용할 추가적인 플래그 값(0이면 쓰레드 생성 즉시 cpu에 스케쥴링)


- LPDWORD lpThreadId : 쓰레드 식별 번호 (NULL 이면 쓰레드 식별번호를 반환하지 않는다.)


--------------------------------------------------------------------------------------------------

이 함수 사용 이유 -> http://rockdrumy.tistory.com/381


BOOL WINAPI CloseHandle(_In_ HANDLE hObject)

- _In_ HANDLE hObject : CreateThread()함수 리턴값


쓰레드를 종료하는 함수가 아니라 참조 하지 않을때 사용하는 함수


-----------------------------------------------------------------------------------------------------------------------


실행 파일의 경로 얻을때 사용하는 함수


DWORD GetModuleFileName(HMODULE hModule, LPTSTR lpFilename, DWORD nSize)


- HMODULE hModule : DLL을 임포팅한 실행프로그램 경로를 확보하려면 이 값을 NULL로 전달

- LPTSTR lpFilename : 실행 경로를 받을 포인터

- DWORD nSize : 실행 경로가 들어갈 버퍼의 길이


----------------------------------------------------------------------------------------------------------------------------------------

_tcsrchr 함수 = strrchr의 TCHAR 용


----------------------------------------------------------------------------------------------------------------------------------------

_tcscpy_s(char *_Dst, rsize _t _SizeInBytes, const char* _Src)

(버퍼 오버플로우를막거나 잘못된 메모리 연산 방지를 위해 사용)


- char *_Dst : 저장변수

- rsize _t _SizeInBytes : 쓰려고 하는 데이터 크기 + 1

- const char* _Src : 쓰려고 하는 데이터 


------------------------------------------------------------------------------------------------------

인터넷에서 파일을 다운로드 할때 사용하는 함수


HRESULT URLDownloadToFile(

LPUNKNOWN pCaller, 

LPCTSTR szURL,

LPCTSTR szFileName,

DWORD dwReserved,

LPBINDSTATUSCALLBACK lpfnCB

);

- LPUNKNOWN pCaller : ActiveX container에 대한 포인터

- LPCTSTR szURL : 다운받을 파일의 URL

- LPCTSTR szFileName : 다운받은 파일을 저장할 위치와 파일명

- dwReserved : reserved

- LPBINDSTATUSCALLBACK lpfnCB : IBindStatusCallback 포인터



+ Recent posts