Search the Community
Showing results for tags 'MindPower'.
Found 1 result
-
За помощь в реализации спасибо @V3ct0r Подтолкнула меня мыслишка - а почему бы не сделать подобное и у себя на сервере, заодно и облегчу жизнь хилам и дамагерам, но использовать такое на постоянке, на мой взгляд, не удобно. И вот пришла идея - а что, если сделать такую фичу, но с возможностью включать и выключать этот режим одной кнопкой? Поехали разбираться. Из реализации @V3ct0r нам необходимо выпилить проверку нажатия клавиши в Game.exe, это нам не подходит, поэтому остановимся на функции GetKeyState, обработка которой находится в моем любимом (нет) MindPowerD8R.dll Для начала просто посмотрим что из себя эта функция представляет: Начиная с выделенной строчки (в моем случае написано PUSH -70, не обращайте внимания, распишу как написано по факту): PUSH 10 //Установка кода клавиши (Shift) для функции GetKeyState() Call DWORD ... //Собственно сам вызов функции MOVSX EAX,AX //Функция GetKeyState() возвращает 4-байта, и чтобы не было проблем с дальнейшей работой - переводим формат в 8 байт AND EAX,0FF00 //Побитовое умножение, проще не объясню Этот кусок кода явно дает понять, что ни про какую память речи не идет, постоянно обновляется статус кнопки, а теперь внимание вопрос - какие 3 клавиши есть на клавиатуре с ТРЕМЯ состояниями в системе? Правильно, это Caps, Scroll и Num-lock Теперь обратимся к их кодам: CAPS VK_CAPITAL 0x14 NUM VK_NUMLOCK 0x90 SCROLL VK_SCROLL 0x91 Теперь прикинем какие кнопки мы можем использовать. Капс идея плохая, дабы постоянно писать в чат таким образом не очень хорошо. Num на мой взгляд тоже такая себе идея, т.к не всем по душе такой режим, а цифрами люди пользуются на num-pad'е, поэтому работать я буду с самой бесполезной на мой взгляд клавишей - SCROLL LOCK А теперь проблема первая - PUSH 14 (Caps) занимает 2 байта, а PUSH на коды кнопок 80+ занимает не 2 байта а 5 байт (PUSH 91 00 00 00), поэтому просто так прохексить не получится, но благо рядом есть инструкции INT3 (прерывания), их мы и можем немного загадить нашим говнокодом: В них всего надо написать 2 коротких строчки: PUSH VK_SCROLL JMP 0x101290CE От кода прерываний мы отжали всего 7 байт, не столь много. Теперь вместо первого PUSH надо вставить джампер на наш говнокод: Ну а теперь осталось дело за малым - объяснить этой функции, что смотреть мы теперь будем не на статус зажатой кнопки (0xFFFFFF80) а на статус включенной кнопки (0x00000001): AND EAX,0FF00 Меняем на: TEST EAX,1 Сохраняем изменения в файл и вуаля А теперь информация для тех, кто вообще не дружит с этим всем