반응형
메모리에 접근하기 위해 OpenProcess를 사용하려면 프로세스 아이디가 필요하기 때문에 알아보겠습니다.
- CreateToolhelp32Snapshot 함수를 사용해 가져오는 방법
- FindWindow와 GetWindowThreadProcessId 함수를 사용해 가져오는 방법
CreateToolhelp32Snapshot 함수 사용
HANDLE CreateToolhelp32Snapshot(
[in] DWORD dwFlags,
[in] DWORD th32ProcessID
);
- _In_DWORD dwFlags
스냅샷에 포함할 정보, 이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.(MSDN 참고) - _In_DWORD th32ProcessID
스냅샷에 포함할 프로세스의 프로세스 식별자 (0을 넣으면 모든 프로세스 스냅샷)
편하게 비주얼 스튜디오에 복사해서 보시면 됩니다.
디버깅도 하고요.
CreateToolhelp32Snapshot 예제 코드
#include <iostream>
#include <Windows.h>
#include <tlhelp32.h>
uint32_t get_process_id(const char* process)
{
DWORD pid = 0; // 아이디를 받아올 변수
// TH32CS_SNAPPROCESS와 0을 넘겨 모든프로세스 스냅샷
HANDLE hPorcessShap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (hPorcessShap == INVALID_HANDLE_VALUE) {
printf("CreateToolhelp32Snapshot 실패\n");
}
PROCESSENTRY32 pe32; // 프로세스 정보를 담을 구조체
// MODULEENTRY32를 사용하기 위해 구조체 크기 만큼 초기화
pe32.dwSize = sizeof(MODULEENTRY32);
// Process32Next로 스냅샷한 첫번째 프로세스정보 가져오기
while (Process32Next(hPorcessShap, &pe32) == TRUE)
{
// 스냅샷 프로세스와 내가 찾는 프로세스 이름비교
if (strcmp(process, pe32.szExeFile) == 0)
{
// 맞으면 프로세스 아이디 저장
pid = pe32.th32ProcessID;
break;
}
}
// 핸들닫고 프로세스 아이디 리턴
CloseHandle(hPorcessShap);
return pid;
}
int main()
{
DWORD pid = get_process_id("notepad.exe") // 원하는 프로세스
return 0;
}
- CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)으로 프로세스 스냅샷
- MODULEENTRY32를 사용하기 위해 구조체 크기만큼 초기화
- Process32Next로 PROCESSENTRY32에 프로세스 정보를 담고 이름 비교
- 반복 찾으면 프로세스 아이디 리턴
간단한 코드라서 설명 없이도 디버깅 한 번만 해보면 바로 알 수 있습니다.
GetWindowThreadProcessId 함수 사용
DWORD GetWindowThreadProcessId(
[in] HWND hWnd,
[out, optional] LPDWORD lpdwProcessId
);
- _In_HWND hWnd
창에 대한 핸들입니다. (FindWindow로 찾은 창 핸들) - _In_LPDWORD lpdwProcessId
프로세스 식별자를 받는 변수에 대한 포인터입니다 (아이디 받을 변수, &pid 형태로 사용하면 됨)
GetWindowThreadProcessId 예제 코드
int main()
{
DWORD pid;
HWND hwnd = FindWindow(0, "제목 없음 - Windows 메모장");
GetWindowThreadProcessId(hwnd, &pid);
return 0;
}
FindWindow 함수는 첫 번째 인자로 창 클래스 이름을 두 번째 인자로 창 제목 이름을 사용하고
프로세스 해커 프로그램으로 창 클래스, 제목을 확인할 수 있습니다.
예제에서는 메모장 창 제목을 사용했습니다.
다른 글 : 프로세스 베이스 주소 가져오는 방법
반응형
'게임해킹 > 게임해킹 ,c++' 카테고리의 다른 글
기본적인 게임해킹 방법과 최근 게임해킹 방법 (안티치트 우회, 드라이버 해킹) (17) | 2022.11.15 |
---|---|
[게임해킹] 모듈 베이스 얻어오기 CreateToolhelp32Snapshot (2) | 2022.11.01 |
[게임해킹] PEB구조체로 베이스 주소 얻어오기 (2) | 2022.10.27 |
[게임해킹 C++] 입출력 cout, cin, 메모리 읽기 쓰기 (0) | 2022.09.26 |