GetComputerName ( API 모든 출처는 MSDN 아닌 경우 별도 표시)
로컬 컴퓨터의 NetBIOS 이름을 검색하는 함수이다. 이 이름은 시스템 시작시 시스템이 레지스트리에서 읽을 때 설정된다. GetComputerName은 로컬 컴퓨터의NetBIOS 이름 만 검색하기 때문에 DNS 호스트 이름, DNS 도메인 이름 또는 정규화된 DNS 이름을 검색하려면 GetComputerNameEx 함수를 호출해야한다.
함수의 원형 :
BOOL WINAPI GetComputerName ( _Out_ LPTSTR lpBuffer, _Inout_ LPDWORD lpnSize );
매개 변수 :
lpBuffer : 컴퓨터 이름 또는 클러스터 가상 서버 이름을 수신하는 버퍼에 대한 포인터이다. 버퍼의 크기는 컴퓨터이름의 길이보다 1커야한다.
lpnASize : 입력시 버퍼의 크기를 TCHAR로 지정합니다. 출력시, 종료 널 문자를 제외하고 대상 버퍼에 복사 된 TCHAR의 수/버퍼가 너무 작으면 함수가 실패하고 GetLastError가 ERROR_BUFFER_OVERFLOW를 반환합니다.
반환값 :
함수가 성공하면 반환 값은 0이 아닌 값입니다.
이 함수에 대해서 알아야 할 점 :
※ LPTSTR : 분리해보자면 ...
LP : Long Pointer 현재 LP는 64bit pointer를, VC++6.0과 그 이전 버전에는 32bit pointer를 나타낸다.
T : 자신의 운영체제가 multi-byte환경이면, char 형으로 unicode환경이면, w_char, wide char형으로 type casting이 된다.
STR : String
결론 : char * !!!!! (즉 버퍼의 주소값을 넘겨주면 되는 것이다.)
※ LPDWORD : 요것은 쉽다 Long Point에 DWORD (usinged long) unsinged long * !! (즉, 버퍼의 크기를 주소값으로 넘겨주면 된다. : ) )
(출처 : http://egloos.zum.com/pelican7/v/1768951 )
GetLogicalDriveStrings
버퍼를 시스템의 유효한 드라이브를 지정하는 문자열로 채 운다.
함수의 원형 :
DWORD WINAPI GetLogicalDriveStr ings ( _In_ DWORD nBufferLength, _Out_ LPTSTR lpBuffer );
매개 변수 :
nBufferLength : 버퍼의 최대 크기가 기리키는 lpBuffer에 TCHARs. 이 크기에는 종료 널 문자가 포함되지 않는다.
lpBuffer : 문자열을 수신하는 버퍼에 대한 포인터와 추가 null 문자가있는 포인터이다.
반환값 :
함수가 성공하면 반환 값은 버퍼에 복사 된 문자열의 길이이며, 종료 null문자는 포함되지 않는다. 실패하면 0을 반환한다.
WIN32_FIND_DATA (구조체)
FindFirstFile, FindFirstFileEx 또는 FindNextFile 함수에서 찾은 파일에 대한 정보가 들어 있다.
구조체의 원형 :
typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; } WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
멤버 :
dwFileAttributes - 파일의 속성
ftCreationTime - 파일 또는 디렉토리가 작성된시기를 지정 하는 FILETIME
ftLastAccessTime - 파일의 경우 파일이 마지막으로 읽거나, 쓰거나, 실행 파일을 실행 한 시점을 지정, 디렉터리는 작성된 시기 지정
ftLastWriteTime - 파일이 마지막으로 기록되거나, 잘리거나 덮어쓰기 된 시점을 지정
nFileSizeHigh - 파일 크기의 상위 DWORD 값 입니다. 파일의 크기는 nFileSizeHigh * (MAXDWORD +1) + nFileSizeLow와 같다
nFileSizeLow - 파일 크기의 하위 DWORD 값
cFileName - 파일의 이름
cAlternateFileName - 파일의 대체 이름
FindFirstFile
함수의 원형 :
HANDLE WINAPI FindFirstFile( _In_ LPCTSTR lpFileName, _Out_ LPWIN32_FIND_DATA lpFindFileData );
매개 변수 :
lpFileName : 디렉터리 또는 경로 및 파일 이름이다. 파일 이름에는 와일드 카드 문자 * 또는 ?가 포함될 수 있다. 이 매개 변수는 NULL 또는 백 슬래시(\)로 끝나지 않아야 한다. 문자열이 와일드 카드, 마침표 또는 디렉토리 이름으로 끝나면 사용자는 경로의 루트 및 모든 하위 디렉토리에 대한 액세스 권한이 있어야 한다.
lpFindFileData : 찾은 파일이나 디렉터리에 대한 정보를받는 WIN32_FIND_DATA 구조체에 대한 포인터
반환값 :
함수가 성곡하면 반환 값은 FindNextFile 또는 FindClose에 대한 후속 호출에서 사용되는 검색 핸들이고 lpFindFileData 매개 변수에는 찾은 첫 번째 또는 디렉토리에 대한 정보가 들어 있다. 함수가 실패하거나 lpFileName 매개 변수에서 검색 문자열의 파일을 찾지 못하면 반환값은 INVALID_HANDLE_VALUE이다.
CreateProcess
새 프로세스와 기본 스레드를 작성한다. 새 프로세스는 호출 프로세스의 보안 컨텍스트에서 실행된다. 호출하는 프로세스가 다른 사용자를 가장하는 경우 새 프로세스는 호출 프로세스에 토큰을 사용하고 가장 토큰은 사용하지 않는다. 가장 프로세스 토큰이 나타내는 사용자의 보안컨텍스트에서 새 프로세스를 실행하려면 CreateProcessAsUser 또는 CreateProcessWithLogonW 함수를 사용해야한다.
함수의 원형 :
BOOL WINAPI CreateProcess ( _In_opt_ LPCTSTR lpApplicationName, _Inout_opt_ LPTSTR lpCommandLine, _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ BOOL bInheritHandles, _In_ DWORD dwCreationFlags, _In_opt_ LPVOID lp 환경, _In_opt_ LPCTSTR lpCurrentDirectory, _In_ LPSTARTUPINFO lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInformation );
매개 변수 :
lpApplicationName [in, 선택 사항] : 실행될 모듈의 이름.
'Malware Analysis > - Knowledge storage' 카테고리의 다른 글
size_t??? (0) | 2018.06.21 |
---|---|
Difference between Multiprocessing and Multithreading (0) | 2018.03.15 |
Remote deburger (0) | 2018.03.04 |
해시(hash) vs 암호화(encryption) (0) | 2018.02.26 |
adc, sbb, carry flag, overflow flag 이해하기(+cmp) (0) | 2018.02.01 |