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 포인터
'Reversing(리버싱 핵심 원리) > 공부 자료(정리x)' 카테고리의 다른 글
DLL Injection(레지스트리 수정) p331 (0) | 2018.06.23 |
---|---|
DLL Ejection p339 (0) | 2018.06.23 |
Dll Injection 공부 (injectdll.cpp ) (0) | 2018.06.22 |
Windows 메시지 후킹 공부 (0) | 2018.06.19 |