본문으로 바로가기

리버싱 4장 API 정리

category [ IT ]/리버싱 2015. 11. 28. 19:41

SetWindowTextW()

Bool SetWindowText(

HWND hWnd,

LPCTSTR lpString

);

HWND는 윈도우 핸들, HANDLE은 오브젝트의 핸들 (HWND는 HANDLE이지만 HANDLE은 HWND가 아닐수도 있다)

LPCSTR은 const char*라고 생각하면 됨 (char* = LPSTR) (*가 LP라고 생각하면 됨) C는 const의 의미, LP는 long pointer의 의미

STR은 NULL 포인터로 끝난다는 의미

T는 TCHAR라는 의미. char는 1바이트, wchar는 2바이트, TCHAR는 ASCII 타입의 일반 char 또는 wchar. (구별 하지 않고 그냥 코딩하면 됨)

참고 : https://wooya510.wordpress.com/2006/06/26/char-lpctstr-tchar-%ec%9d%98-%ec%b0%a8%ec%9d%b4/


파라미터로 창 핸들(hWnd)와 문자열 포인터(lpString)을 받음

API 이름 뒤 'W'는 API의 'Wide character'(윈도우에서 유니코드) 버전, 'A'는 'ASCII character' 버전

SetWindowText 함수는 hWnd의 이름을, lpString으로 바꾸고 변환에 성공하면 TRUE(1)를, 실패했다면 FALSE(0)를 반환


CreateToolhelp32Snapshot() & EnumProcesses()

HANDEL WINAPI CreateToolhelp32Snapshot(

DWORD dwFlags,

DWORD th32ProcessID

);

BOOL EnumProcesses(

DWORD* pProcessIds,

DWORD cb,

DWORD* pBytesReturned

);

위 두가지 API는 내부적으로 ntdll.ZwQuerySystemInformation() API를 호출


ZwQuerySystemInformation()

NTSTATUS ZwQuerySystemInformation(

SYSTEM_INFORMATION_CLASS SystemInformationClass,

PVOID SystemInformation,

ULONG SystemInformationLength

PULONG ReturnLength

);

NTSTATUS : 윈도우 커널에서 제공하는 API들을 호출한 후 해당 결과값들을 체크하기 위해 DDK에서 제공하는 리턴값 형식

해당 API의 성공/실패 뿐만이 아니라 실패했으면 해당 실패의 원인등의 각종 정보가 미리 정해진 비트 포맷으로 제공

http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=50&MaeulNo=20&no=543123&ref=543123

https://msdn.microsoft.com/en-us/library/cc231200.aspx


ZwQuerySystemInformation() API는 실행 중인 모든 프로세스의 정보(구조체)를 연결 리스트 형태로 얻을 수 있음

이 연결 리스트를 조작하여, 해당 프로세스를 은폐 (탐지 가능한 것들을 다 없애버림으로써 은폐되는 효과)


CreateToolhelp32Snapshot()

HANDLE WINAPI CreateToolhelp32Snapshot(

_IN_ DWORD dwFlags,

_IN_DWORD th32ProcessID

);

이 API는 스냅샷 핸들을 얻어오고, 성공시 올바른 핸들을 반환 (http://skensita.tistory.com/130)

특정 프로세스뿐만 아니라 힙, 모듈, 이 프로세스에쓰이는 스레드의 스냅샷을 가져옴

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms682489(v=vs.85).aspx


Process32First()

BOOL WINAPI Process32First(

_IN_ HANDLE hSnapshot,

_INOUT_ LPPROCESSENTRY32 lppe

);

시스템 스냅샷에서 발행하는 첫번째 프로세스에 대한 정보를 검색

hSnapshot [in]

A handle to the snapshot returned from a previous call to the CreateToolhelp32Snapshot function.

이전 호출 부터CreateToolhelp32Snapshot 함수까지 반환된 스냅샷에 대한 핸들 

lppe [in, out]

A pointer to a PROCESSENTRY32 structure. It contains process information such as the name of the executable file, the process identifier, and the process identifier of the parent process.

PROCESSENTRY32 구조의 포인터. 실행파일의 이름, 프로세스 식별자, 부모 프로세스의 프로세스 식별자와 같은 정보를 포함함.

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms684834(v=vs.85).aspx

'[ IT ] > 리버싱' 카테고리의 다른 글

API 후킹 - API 코드 패치 동작 원리  (0) 2015.11.29
hInstance와 imagebase  (0) 2015.11.28
프로세스 핸들과 PID의 차이, getprocaddress()  (0) 2015.11.28
리버싱 3장 API 정리  (0) 2015.11.19