1
我知道有這方面的許多問題,但似乎沒有解決我的問題。Windows 7 - WriteProcessMemory的作品,但沒有效果可見
我正在玩WriteProcessMemory函數。這一切似乎很簡單,但我在這裏遇到了一個問題,似乎無法找到解決方案。
我有什麼:
1)的 「受害者」 - 的過程,內存應該被改變
#include <windows.h>
#include <stdio.h>
int main()
{
SetConsoleTitle("MyTest");
int var = 5;
printf ("%p\n\n\n\n", &var);
while (1)
{
printf ("%d\n", var);
Sleep(1000);
}
return 0;
}
2) 「攻擊者」 - 試圖改變「VAR過程「可變
#include <stdio.h>
#include <windows.h>
int main() {
HWND hwnd;
HANDLE handle;
DWORD pid;
hwnd = FindWindow(0, "MyTest");
GetWindowThreadProcessId(hwnd, &pid);
handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
int NewVar = 89;
SIZE_T bytesWritten = 0;
printf ("%d\n", WriteProcessMemory(handle, (void *)ADDRESS, &NewVar, 4, &bytesWritten));
printf("%d\n", bytesWritten);
return 0;
}
當然,地址是‘受害者’告訴我們它的位置‘VAR’變量。
問題:
當我啓動的受害者,然後開始攻擊,WriteProcessMemory的返回1和bytesWritten設置爲4 - 所以,在理論上,都去了好。問題是客戶端仍然printfs 5,5,5而不是89.我也嘗試過與另一個例子,以至於無濟於事。我究竟做錯了什麼?
不確定是否有必要,但操作系統是32位Windows 7旗艦版。
看看'pid'。你會發現你寫錯了過程。 –
FindWindow將找到cmd.exe的PID,因爲很可能你正在使用SetConsoleTitle設置cmd.exe的窗口標題,正如Raymond所說的,只是改變找到受害者進程的PID的方法,嘗試使用受害進程的進程名稱來執行此操作。 –
不,控制檯窗口由舊版本Windows上的csrss.exe擁有,當前版本爲conhost.exe。你正在破壞這個過程,我建議儘快重啓。按名稱查找流程或自行啓動。該變量必須聲明爲* volatile *。 –