Jump to content
Sign in to follow this  
Knight

[Доработка] Видимость названий объектов и их жизней без нажатой клавиши Shift

Recommended Posts

За помощь в реализации спасибо @V3ct0r

 

Подтолкнула меня мыслишка - а почему бы не сделать подобное и у себя на сервере, заодно и облегчу жизнь хилам и дамагерам, но использовать такое на постоянке, на мой взгляд, не удобно.

 

И вот пришла идея - а что, если сделать такую фичу, но с возможностью включать и выключать этот режим одной кнопкой?

Поехали разбираться.

 

Из реализации @V3ct0r нам необходимо выпилить проверку нажатия клавиши в Game.exe, это нам не подходит, поэтому остановимся на функции GetKeyState, обработка которой находится в моем любимом (нет) MindPowerD8R.dll

 

Для начала просто посмотрим что из себя эта функция представляет:

 

1.png.8e600920038bdfed2a7ac69e72c785c9.png

 

Начиная с выделенной строчки (в моем случае написано 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.png.e020ce79ac6055e3930a66f1b2a54444.png

В них всего надо написать 2 коротких строчки:

PUSH VK_SCROLL
JMP 0x101290CE

3.png.10a15d0df2e37c2220449f9b08d8cb00.png

От кода прерываний мы отжали всего 7 байт, не столь много. Теперь вместо первого PUSH надо вставить джампер на наш говнокод:

4.png.49e5e8924833beee63e8ffa972a2ac2f.png

Ну а теперь осталось дело за малым - объяснить этой функции, что смотреть мы теперь будем не на статус зажатой кнопки (0xFFFFFF80) а на статус включенной кнопки (0x00000001):

AND EAX,0FF00

Меняем на:

TEST EAX,1

5.png.d2d3bcbec31fb26f1ee3ea2d87d83d77.png

Сохраняем изменения в файл и вуаля 😎

 

А теперь информация для тех, кто вообще не дружит с этим всем

Спойлер

 

В Hex-редакторе открываем MindPowerD8R.dll, ищем вот это:


55 8B EC 83 EC 44 53 56 57 89 4D FC 6A 10 FF 15 80 6B 7F 10 0F BF C0 25 00 FF 00 00 5F 5E 5B 8B E5 5D C3 CC CC CC CC CC CC CC CC CC CC CC CC CC

и меняем на это:


55 8B EC 83 EC 44 53 56 57 89 4D FC EB 15 FF 15 80 6B 7F 10 0F BF C0 A9 01 00 00 00 5F 5E 5B 8B E5 5D C3 68 91 00 00 00 EB E4 CC CC CC CC CC CC

сохраняем и профит, по скролл локу включается и выключается данный режим 😀

 

 

Edited by Knight
  • Like 4

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×