-
-
[已解决]WriteProcessMemory 进程崩溃
-
发表于:
2010-2-23 11:56
6987
-
[已解决]WriteProcessMemory 进程崩溃
根据句柄和条目顺序号,单击 SysListView32 的条目。
测试任务管理器每次都成功;但测试某程序时每次都失败,造成那个程序的进程崩溃。
下断点到 PostMessage 一句的上一个 WriteProcessMemory 处,发现这里貌似有问题。
调试如果快的话,进程崩溃;慢的话会成功……
请问什么原因?
Thanks in advance.
function ListView_ClickItem(hWnd: HWND; index: Integer): Bool;
var
hProcess: Cardinal;
pid: Cardinal;
pItem: PLVItem;
LocalItem: TLVItem;
iReadOrWriteCount: Cardinal;
pNM: PNMHDR;
LocalNM: NMHDR;
begin
GetWindowThreadProcessId(hWnd, pid);//取进程句柄
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, pid);
{修改显示状态}
ZeroMemory(@LocalItem, SizeOf(LocalItem));
LocalItem.state := LVIS_SELECTED or LVIS_FOCUSED or LVIS_ACTIVATING;
LocalItem.stateMask := LVIS_SELECTED;
pItem := VirtualAllocEx(hProcess, nil, 1024{Sizeof(TLVItem)}, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, pItem, @LocalItem, SizeOf(TLVItem), iReadOrWriteCount);
Result := Bool(SendMessage(hWnd, LVM_SETITEMSTATE, index, Integer(pItem)));
if not Result then Exit;
{单击}
ZeroMemory(@LocalNM, SizeOf(LocalNM));
LocalNM.hwndFrom := hWnd;
LocalNM.idFrom := GetDlgCtrlID(hWnd);
LocalNM.code := NM_CLICK;//NM_DBLCLK;
pNM := VirtualAllocEx(hProcess, nil, 1024{Sizeof(NMHDR)}, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, pNM, @LocalNM, SizeOf(NMHDR), iReadOrWriteCount);
try
PostMessage(GetParent(hWnd), WM_NOTIFY, LocalNM.idFrom, Integer(pNM));
except
Result := Bool(False);
end;
VirtualFreeEx(hProcess, pNM, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);
CloseHandle(hProcess);
end;
[课程]FART 脱壳王!加量不加价!FART作者讲授!