c++ setWindowHookEx함수에 대해서...
조회수 560회
DWORD getProcessId() {
PROCESSENTRY32 process_infor;
process_infor.dwSize = sizeof(PROCESSENTRY32);
HANDLE snap_handle = CreateToolhelp32Snapshot(
TH32CS_SNAPALL, //스냅 단계
NULL //스냅할 pid
);
if (snap_handle != INVALID_HANDLE_VALUE) {
Process32First(snap_handle, &process_infor);
do {
wchar_t* temp = process_infor.szExeFile;
wstring ws(temp);
string name(ws.begin(), ws.end());
if (name == process_name) {
cout << name << " : " << process_infor.th32ProcessID << endl;
return process_infor.th32ProcessID;
}
} while (Process32Next(snap_handle, &process_infor));
}
CloseHandle(snap_handle);
return FALSE;
}
BOOL inject() {
HMODULE dll_handle;
HOOKPROC func;
HHOOK process_hook;
dll_handle = LoadLibrary(L"hello.dll");
func = (HOOKPROC) GetProcAddress(dll_handle, "injectSuccess");
cout << "handle : " << dll_handle << endl;
cout << "pid : " << getProcessId() << endl;
process_hook = SetWindowsHookEx(
WH_KEYBOARD,
func,
dll_handle,
getProcessId("notepad.exe")
);
cout << "pook : " << process_hook << endl;
cout << "err : " << GetLastError() << endl;
FreeLibrary(dll_handle);
return FALSE;
}
dll 파일
#include <Windows.h>
using namespace std;
int injectSuccess(int code, WPARAM wParam, LPARAM lParam) {
MessageBox(nullptr, L"dll파일 심기 성공(dll injection)", L"알림", MB_OK);
return CallNextHookEx(nullptr, code, wParam, lParam);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
MessageBox(nullptr, L"안녕", L"알림", MB_OK);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
요기서 맨위의 inject함수에서 dll파일도 잘 로드되고 안의 injectSuccess함수까지도 잘 가져와지고 실행도 잘 되는데 setWindowHookEx에서 막히네요 ㅜㅜ. 함수 인자값들로 뭘 넣어야하는지 게속 찾아보면서 비교했는데 아무리 찾아도 문제는 없는거같고, 메모장에 dll을 심으려고 해서 메모장의 pid가 문제가 있나 싶어서 콘솔에 찍어봤는데 그것마져 잘 구해지고 있고 아무리봐도 문제가 없는거같아요 ㅜㅜ. 게속 setWindowHookEx반환값은 0이고 오류를 찍어보니(getLastError()) 87이 나왔는데 검색해보니 정확한 결과가 게속 안나오네요ㅜㅜ. 제가 초보라서 못알아먹은걸수도있는데 혹시 아시면 알려주세욤 ㅜㅜ.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력