RockHammer Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 (изменено) как получить id процесса и его хендл?[spoiler = "Вот_мой_говнокод"]HANDLE hSnap = NULL; PROCESSENTRY32 pe32; hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap != NULL) { if (Process32First(hSnap, &pe32)) { } } Изменено 4 февраля, 2015 пользователем Xipho Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 В 03.02.2015 в 11:28, RockHamer сказал: Как это сделать?фасм пример. на С логика 1в1invoke 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. зачем ид если это длл? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 Цитата FindWindowW+GetWindowThreadProcessId+OpenProcess Возможно, я тебя разочарую, но далеко не все игры можно найти по имени или классу окна. Сейчас навскидку не вспомню точно таких игр, но помню, что они есть. Вроде The Suffering по окну не находилась. А вот процесс игры будет всегда. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 3 февраля, 2015 Автор Поделиться Опубликовано 3 февраля, 2015 В 03.02.2015 в 14:23, Xipho сказал: Возможно, я тебя разочарую, но далеко не все игры можно найти по имени или классу окна. Сейчас навскидку не вспомню точно таких игр, но помню, что они есть. Вроде The Suffering по окну не находилась. А вот процесс игры будет всегда.Ok, Xipho: how can find pid the process? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 Если на то пошло, то"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; // возвращаем полученный идентификатор процесса.}Код писал на коленке, но он должен быть правильным. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 3 февраля, 2015 Автор Поделиться Опубликовано 3 февраля, 2015 В 03.02.2015 в 16:03, Xipho сказал: Код писал на коленке, но он должен быть правильным.Ахахха))) Спасибо, работает)Эм... А как теперь из этого извлечь хендл процесса, зная его айди?Не то, чтобы это было нужно... Просто для WriteProcessMemory нужен хендл процесса. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 Ну так а OpenProcess тебе на что? Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 3 февраля, 2015 Автор Поделиться Опубликовано 3 февраля, 2015 (изменено) В 03.02.2015 в 18:11, Xipho сказал: Ну так а 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)))ЗЫ: не удивлюсь, если после компиляции кода - мой компьютер развернется и уйдет от меня))) Изменено 3 февраля, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 Так. Только не забывай после записи закрывать хендл процесса. И еще, в большинстве современных игр стоит защита регионов памяти, поэтому перед записью нужно убирать ее с помощью VirtualProtectEx, а после записи - восстанавливать с помощью той же функции. Все эти моменты описаны в темах и видео на нашем форуме, ищи, смотри, просвещайся. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 4 февраля, 2015 Автор Поделиться Опубликовано 4 февраля, 2015 В 03.02.2015 в 20:01, Xipho сказал: Так. Только не забывай после записи закрывать хендл процесса. И еще, в большинстве современных игр стоит защита регионов памяти, поэтому перед записью нужно убирать ее с помощью VirtualProtectEx, а после записи - восстанавливать с помощью той же функции. Все эти моменты описаны в темах и видео на нашем форуме, ищи, смотри, просвещайся.Ясненько) Значит сам код правильный)З.ы. почему VirtualProtectEx? Разве VirtualProtect не подойдет? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 февраля, 2015 Поделиться Опубликовано 4 февраля, 2015 Внимательней читай описание на МСДН. VirtualProtect рулит защитой внутри вызвавшего процесса. Если ты внедряешь длл-ку - вот в этой длл-ке сможешь вызвать VirtualProtect, так как длл-ка внедряется в адресное пространство процесса. А если ты вызываешь из трейнера, который модифицирует память игры - тогда только VirtualProtectEx. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения