как бы узнать хэндл процесса по его имени? я думал что хэндл возвращает OpenProcess, однако когда я позже пытаюсь передать его в WriteProcessMemory то он говорит что хэндл инвалидный.
Если не ошибаюсь, у ms-rem'a в advAPIHook была функция для этого дела. И в какой-то статье, имхо, описано...
вот мой код для поиска хэндла. Предпологается что в target лежит строка с именем процесса, а результат будет в ps ( ps PROCESSENTRY32 <>) Код (Text): invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0 mov var1, eax mov ps.dwSize, sizeof PROCESSENTRY32 invoke Process32First, var1, addr ps next: invoke cmpstr, addr ps.szExeFile, addr target test eax, eax jne found invoke Process32Next, var1, addr ps test eax, eax jne next jmp err_not_found found: позже, когда я размышлял почему это не пашет я обратил внимание на то что из структуры PROCESSENTRY32 можно вытянуть лишь ProcessID (th32ProcessID) и что этот айди не есть хэндл. Ешё позже у меня все заработало, а баг оказался вообще не в том о чём я писал в топике (я млин невнимательный до ужаса). Далее у меня идёт кусок кода для инжектинга кода (загружаюшего длл) и запуска его. Код (Text): invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or PROCESS_VM_WRITE or PROCESS_VM_READ , 1, ps.th32ProcessID mov var1, eax ; var1 - process handle mov ebp, eee sub ebp, initproc invoke VirtualAllocEx,eax, 0, ebp,MEM_COMMIT, PAGE_EXECUTE_READWRITE xchg eax, var2 ;var2 - memory address mov ecx, initproc invoke WriteProcessMemory,var1,var2, ecx, ebp,0 xor ebx, ebx invoke CreateRemoteThread,var1, ebx,ebx, var2, ebx, ebx, ebx тоесть всё пашет нормально и хэндл от OpenProcess валидный ивсе норльно. Но раз уж тема создана, хотел бы спросить, возможно ли как то оптимизировать такой способ поиска хэндла по имени (ну да, его надо дополнить еще открытием процесса, чтоб получать хэндл а не айди) или может есть другие способы. P/s может обьяснит мне кто чем отличаются хэндл от айди, и зачем нужно каждому процессу два этих уникальных номера.
айди универсален - он одинаков вне зависимости от процесса, из которого ты его определяешь. А вот хэндлы будут разными, чтобы разные процессы могли открыть один процесс с разными правами. PS То же в свое время долго мучался с этим тонким отличием.
спасибо за обьяснение насчёт PID & HANDLE получается в данном случае по другому никак сыграть не получилось бы, только Toolhelp32. Или все же есть еще варианты?