1 2 3 4 5 6 7 8 9 10 11 | hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); data_addr = VirtualAllocEx(hProcess, NULL, sizeof(INJECT), MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProcess, data_addr, (LPCVOID)&inject, sizeof(INJECT), NULL); addr = VirtualAllocEx(hProcess, NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, addr, (LPCVOID)Injection_ThreadProc, size, NULL); hThread = CreateRemoteThread(hProcess, 0, 0, addr, data_addr, CREATE_SUSPENDED, 0); | cs |
제목 길이에 제한이 있어서 모호하게 적었는데
CreateRemoteThread로 만든 쓰레드가 파라미터로 넘긴 주소보다 몇십바이트 앞에서 실행되네요
VirtualAllocEx로 함수 한 뭉텅이랑 파라미터 구조체 한 뭉텅이 타겟 프로세스에 할당한뒤에 WriteProcessMemory로 적어줬는데
디버깅을 해보면 원래 할당한 메모리보다 64바이트정도 전 코드가 실행돼서 access violation으로 터져버리네요
무슨 소리냐면
addr = VIrtualAllocEx(~~);
printf("%X ", addr);
이렇게 해보면 490000이 나오는데
타겟 프로세스를 디버깅해보면 쓰레드가 시작되는 코드 주소가 48FFC0이네요
vs2015로 봤을때 여기 코드는 다 ??로 나와있구요
왜 원격 쓰레드 만들때 490000이라는 주솟값을 넘겼는데 48FFC0에서 시작이 되는지 궁금하네요
댓글 0