32bit인 process의 정보를 가져올때 사용하는 함수
성공시 생선된 스냅샷의 정보의 핸들 리턴
실패시 INVALID_HANDLE_VALUDE(-1) 리턴
HANDLE WINAPI CreateToolhelp32Snapshot(
_In_ DWORD dwFlags,
_In_ DWORD th32ProcessID
);
- dwFlags : 어떤 정보를 가져올것인가를 정하는 것(주로 사용 : TH32CS_SNAPMODULE32으로 모듈정보 가져옴)
(3번째 인자를 0으로 해서 TH32CS_SNAPPROCESS 를 사용해 process정보를 가져옴)
- th32ProcessID : 프로세스의 ID
------------------------------------------------------------------------------------------------
http://jrich.tistory.com/38
출처
스냅샷 정보에서 첫번째 모듈의 정보를 읽어올때 사용하는 함수
BOOL WINAPI Module32First(
_In_ HANDLE hSnapshot,
_Inout_ LPMODULEENTRY32 lpme
);
- hSnapshot : CreateToolhelp32Snapshot 함수 호출의 반환 값인 스냅샷 정보의 핸들
- lpme : 읽어온 모듈의 정보를 저장 할 MODULEENTRY32 구조체 변수의 주소
(구조체의 크기를 나타내는 dwSize의 멤버는 sizeof 연산자로 크기를 구하여 반드시 설정 해야한다.)
typedef struct tagMODULEENTRY32 {
DWORD dwSize; // 구조체 크기
DWORD th32ModuleID; // 사용하지 않음, 1로 설정
DWORD th32ProcessID; // 모듈이 속해있는 프로세스의 식별자
DWORD GlblcntUsage; // 모듈의 로드 횟수, 일반적으로 -1로 설정
DWORD ProccntUsage; // 모듈의 로드 횟수, 일반적으로 -1로 설정
BYTE *modBaseAddr; // 프로세스 메모리 공간에서의 모듈의 기준 주소
DWORD modBaseSize; // 모듈의 크기(바이트 단위)
HMODULE hModule; // 프로세스 메모리 공간에서의 모듈의 핸들
TCHAR szModule[MAX_MODULE_NAME32 + 1]; // 모듈 이름
TCHAR szExePath[MAX_PATH]; // 경로를 포함한 모듈 이름
} MODULEENTRY32, *PMODULEENTRY32;
------------------------------------------------------------------------------------------------
http://jrich.tistory.com/39
출처
Module32First 호출 이후 스냅샷 정보에서 다음 프로세스의 정보를 읽어온다.
BOOL WINAPI Module32Next(
_In_ HANDLE hSnapshot,
_Out_ LPMODULEENTRY32 lpme
)l;
- hSnapshot : CreateToolhelp32Snapshot 함수 호출의 반환 값인 스냅샷 정보의 핸들
- lpme : 읽어온 프로세스의 정보를저장할 MODULEENTRY32 구조체 변수의 주소
------------------------------------------------------------------------------------------------
http://jrich.tistory.com/27
출처
스냅샷 정보에서 첫 번째 프로세스의 정보를 읽어올때 사용하는 함수
BOOL WINAPI Process32First(
_In_ HANDLE hSnapshot,
_Inout_ LPPROCESSENTRY32 lppe
);
- hSnapshot : CreateToolhelp32Snapshot 함수 호출의 반환 값
- lppe : 읽어온 프로세스의 정보를 저장할 PROCESSENTRY32 구조체 변수의 주소
typedef struct tagPROCESSENTRY32 {
DWORD dwSize; // 구조체의 크기
DWORD cntUsage; // 사용하지 않음, 0으로 설정
DWORD th32ProcessID; // 프로세스 식별자
ULONG_PTR th32DefaultHeapID; // 사용하지 않음, 0으로 설정
DWORD th32ModuleID; // 사용하지 않음, 0으로 설정
DWORD cntThreads; // 프로세스의 스레드 개수
DWORD th32ParentProcessID; // 부모 프로세스 식별자
LONG pcPriClassBase; // 프로세스의 기본 우선 순위
DWORD dwFlags; // 사용하지 않음, 0으로 설정
TCHAR szExeFile[MAX_PATH]; // 프로세스의 실행 파일 이름
} PROCESSENTRY32, *PPROCESSENTRY32;
------------------------------------------------------------------------------------------------
'Reversing(리버싱 핵심 원리) > 공부 자료(정리x)' 카테고리의 다른 글
DLL Injection(레지스트리 수정) p331 (0) | 2018.06.23 |
---|---|
Dll Injection 공부 (injectdll.cpp ) (0) | 2018.06.22 |
Dll Injection 공부 (0) | 2018.06.19 |
Windows 메시지 후킹 공부 (0) | 2018.06.19 |