Перейти к содержанию

Поиск процесса и работа с ним


Рекомендуемые сообщения

как получить id процесса и его хендл?

[spoiler = "Вот_мой_говнокод"]

HANDLE hSnap = NULL;	PROCESSENTRY32  pe32;	hSnap =  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);	if (hSnap != NULL)	{		if (Process32First(hSnap, &pe32))		{					}	} 

Изменено пользователем Xipho
Ссылка на комментарий
Поделиться на другие сайты

Как это сделать?

фасм пример. на С логика 1в1

invoke GetAsyncKeyState,VK_INSERTand eax,0x8000shr eax,0xFcmp [KeySwitch1],alje nnnnnnmov [KeySwitch1],alcmp [KeyDown1],ah ;1 когда нужно: зажал - вкл, отпустил - отклjnz @ftest al,alje nnnnnn@@:.if [KeyStatus1] = ahmov [KeyStatus1],al.elsemov [KeyStatus1],ah.endif....патч код...nnnnnn:

ps ah всегда 0

ид процесса? мне больше нравится: FindWindowW+GetWindowThreadProcessId+OpenProcess. зачем ид если это длл?

Ссылка на комментарий
Поделиться на другие сайты

FindWindowW+GetWindowThreadProcessId+OpenProcess

 

 

Возможно, я тебя разочарую, но далеко не все игры можно найти по имени или классу окна. Сейчас навскидку не вспомню точно таких игр, но помню, что они есть. Вроде The Suffering по окну не находилась. А вот процесс игры будет всегда.

Ссылка на комментарий
Поделиться на другие сайты

Возможно, я тебя разочарую, но далеко не все игры можно найти по имени или классу окна. Сейчас навскидку не вспомню точно таких игр, но помню, что они есть. Вроде The Suffering по окну не находилась. А вот процесс игры будет всегда.

Ok, Xipho: how can find pid the process? :D

Ссылка на комментарий
Поделиться на другие сайты

Если на то пошло, то

"How can I find the process PID" было бы правильнее. И в какой-то из тем код рассматривался, но если лень искать - один раз покажу:

int FindProcessByName(LPSTR ProcessName){    HANDLE hSnap = NULL;    PROCESSENTRY32  pe32;    int pID = 0; // переменная для хранения полученного идентификатора процесса    hSnap =  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // делаем снимок системы    if (hSnap != NULL) // если снимок получился, продолжаем    {        if (Process32First(hSnap, &pe32)) // если перебор процессов начат нормально, то        {            while(Process32Next(hSnap, &pe32)) // продолжаем перебор            {                if (_stricmp(pe32.szExeFile, ProcessName) == 0) // сравниваем текущий найденный процесс с нужным нам,                {                        // если функция _stricmp вернула 0, значит, имя найденного процесса совпадает с нужным нам                    pID = pe32.th32ProcessID; // записываем в подготовленную переменную идентификатор найденного процесса                    break; // выходим из цикла перебора                }            }        }        CloseHandle(hSnap); // закрываем хендл снимка сисетмы воизбежание утечек памяти    }    return pID; // возвращаем полученный идентификатор процесса.}

Код писал на коленке, но он должен быть правильным.

Ссылка на комментарий
Поделиться на другие сайты

Код писал на коленке, но он должен быть правильным.

Ахахха))) 

Спасибо, работает)

Эм... А как теперь из этого извлечь хендл процесса, зная его айди?

Не то, чтобы это было нужно... Просто для WriteProcessMemory нужен хендл процесса.

Ссылка на комментарий
Поделиться на другие сайты

Ну так а OpenProcess тебе на что?

Как-то так?

HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);int address = 0x123456;WriteProcessMemory(hProc, //без коментариев(LPVOID)address, //адрес, приведенный к типу LPVOID (PBYTE*)"\x23\x45", //байты для записи. привел к типу PBYTE 2,//сколько байт записано 0); //не знал, что тут передавать... Пусть будет нулик ))))0))0)))

ЗЫ: не удивлюсь, если после компиляции кода - мой компьютер развернется и уйдет от меня))) 

Изменено пользователем RockHamer
Ссылка на комментарий
Поделиться на другие сайты

Так. Только не забывай после записи закрывать хендл процесса. И еще, в большинстве современных игр стоит защита регионов памяти, поэтому перед записью нужно убирать ее с помощью VirtualProtectEx, а после записи - восстанавливать с помощью той же функции. Все эти моменты описаны в темах и видео на нашем форуме, ищи, смотри, просвещайся.

Ссылка на комментарий
Поделиться на другие сайты

Так. Только не забывай после записи закрывать хендл процесса. И еще, в большинстве современных игр стоит защита регионов памяти, поэтому перед записью нужно убирать ее с помощью VirtualProtectEx, а после записи - восстанавливать с помощью той же функции. Все эти моменты описаны в темах и видео на нашем форуме, ищи, смотри, просвещайся.

Ясненько) Значит сам код правильный)

З.ы. почему VirtualProtectEx? Разве VirtualProtect не подойдет?

Ссылка на комментарий
Поделиться на другие сайты

Внимательней читай описание на МСДН. VirtualProtect рулит защитой внутри вызвавшего процесса. Если ты внедряешь длл-ку - вот в этой длл-ке сможешь вызвать VirtualProtect, так как длл-ка внедряется в адресное пространство процесса. А если ты вызываешь из трейнера, который модифицирует память игры - тогда только VirtualProtectEx.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.