도무지 안되는뎅;;
아직도 원리를제대로 이해를 못한거같아요.
DisplayImportTable에 인자가 해당 프로세스의 핸들이자나여
그래서
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID);
if (NULL == hProcess)
return 1;
if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
{
TCHAR szModName[MAX_PATH];
// Get the full path to the module's file.
if (GetModuleFileNameEx(hProcess, hMods[i], szModName,
sizeof(szModName) / sizeof(TCHAR)))
{
// Print the module name and handle value.
_tprintf(TEXT("\t%s\n\t (0xX)\n"), szModName, hMods[i]);
if (!(ReadProcessMemory(hProcess,hMods[i],&dwTemp,sizeof(DWORD),NULL))) return -1;
DisplayImportTable((HMODULE)dwTemp); // < - 요부분 hMods[i]인지 dwTemp인지 Temp에는 뭐가저장되느지 모르겟음;;
}
}
}
이런식으로 가져왔거든여? 대체 뭐가 어떻게 돌아가는지 모르겠음 ㅠㅠ
HMODULE은 프로세스의 핸들이 아님.
모듈의 핸들이야. 핸들이라곤 하지만, EXE나 DLL이 프로세스 메모리 상에 로드되어 있는 위치를 가리키는 포인터임.
HINSTANCE는 그 중에서 특히 EXE에 대한 것을 말하고.
GetModuleHandle 함수에 대해서 좀 더 알아보고 와.
다른 프로세스에 내가 만든 함수를 쓰고 싶으면 좀 수정해야 됨. 대상 프로세스 메모리 기준으로 검색하는 GetModuleHandle 기능의 함수도 만들어야 하고.
잠만. HINSTANCE는 DLL에 대해서도 쓰지. WinMain만 생각해서 ㅋㅋ 실수~
HMODULE == HINSTANCE임. 검색해 보니 16비트 시절엔 좀 달랐다고 하네.
넹 저도 서치해봤어여 그러면 GetModuleHandle로 핸들을가져왔는데
으으.. 다른 프로세스의 공간을 가져오려면 ReadProcessMemory로 가져와야하는데 여기에 들어가는 hProcess가
GetModuleHandle로 가져온 핸들값이 되어야 하는거죠?
물론 OpenProcess에는 ALL_ACCESS나 VM_READ가 있어야겠구여
지금 예제 짜주는 중. 거의 완성.
난 너가 잘 고쳐서 쓸 줄 알았는데 ㅡㅡㅋ 덕분에 전에 너에게 줬던 예제 코드 조금 수정 중.
ㅠㅠ 미쳐버리겠네요 ;;
저도 짜고 싶은데 왜이리 머리가 안돌아가는지
http://pastebin.com/grpJZcPS
예제 코드 수정함~ 이거 돌려봐!
아. 코드 잘못 짰다. ㄱㄷ
음 시작주소를 뭘로 해야 테스트할까요
제대로 수정함.
http://pastebin.com/C4FRRsDL
올리 디버그나 치트 엔진으로 주소 알아봐야지. exe ImageBase
PE View로 봐도 되겟져?
아니면 RemoteGetModuleHandle 내가 만들어놓은 함수에 모듈 이름을 exe 이름으로 해서 주소 값 알아와도 되고.
아하