Для всего понадобиться:
Я не буду вдаваться в подробности, что, как и почему, а просто покажу как сделать.
Для начала полный код функции инкаста:
Для начала заполним VALUE (Они полностью зависят от версии)
VALUE1
В ida pro есть замечательная вкладка структуры (Structures), и даже в ней есть поиск (Search->text). Вбиваем в него session_skill и видим такое, если блок закрыт нажимаем Ctrl + Numpad+ на клаве что бы открыть его:
Нам нужно поле _target_list, смотрим: его смещение 44, заменяем VALUE1 на 44h в нашем коде
VALUE2
Таже самая структура только теперь поле _data, видим 24 меняем VALUE2 на 24h
VALUE3 и 5
Тут на всеголишь нужно найти конец функции, value5 пока что тоже поставим такое, изменим его в самом конце:
Меняем их на loc_80D1E47
VALUE4
Все таже структура, поле _next_interval видим 38, меняем VALUE4 на 38h
Функцию которую нам нужно будет отредактировать:
Находит такой фрагмент кода:
Ставим мышка на loc_80D1CFE (эти названия тоже зависят от версии), и нажимаем Edit->Patch Program->Change Bytes (далее просто Change Bytes) и меняем 07 C7 на 34 8D. Нажимаем ок.
Далее ставим мышку на 3 строку в этом блоке и нажимаем Edit->Patch Program->Assembly (далее просто Assembly) и вписываешь весь наш код по порядку:
Когда закончите, перед нопами будет jg short и тд, нажимаешь на него и заходим опять в Change Bytes и меняем 32 на 13:
Как видите у нас появился новый блок, жмем на тот же jg short и нажимаем Assembly, меняем адрес на тот что появился.
Если вы все сделали правильно, то в асме ваша функция будет выглядеть так:
А при нажатии на f5 и прокрутки в конец, так:
Для фикса перекаста нужно изменить функцию:
Сразу открываем псевдокод (F5) и видим 90, до этого значения пение снижается при перекасте. Тыкаем прямо на нем пкм->Jump to Disasm, идем в Assembly и меняем 5a на 63:
Что бы сохранить изменения жмем Edit->Patch Program->apply patches to input file->ok. Заливаем на сервер и тестим\радуемся
Если у вас что то не получается пишите, возможно я кривожопый и написал что то не так, найдем ошибку вместе и исправим.
p.s весь пример был показан на версии 1.4.2
- Ida Pro (Рекомендую скачать 6.8)
Я не буду вдаваться в подробности, что, как и почему, а просто покажу как сделать.
Для начала полный код функции инкаста:
Код:
lea eax, [ebp+type]
push eax
mov ebx, [ebp+this]
add ebx, VALUE1
push ebx
call _ZNK5abase6vectorI3XIDNS_10fast_allocILi4ELi128EEEE4sizeEv
pop edx
push eax
push ebx
call _ZN5abase6vectorI3XIDNS_10fast_allocILi4ELi128EEEE5beginEv
pop edx
push eax
sub ebx, VALUE2
push ebx
sub ebx, 20h
push dword ptr [ebx]
call _ZN11gactive_imp8RunSkillERN5SKILL4DataEPK3XIDiRi
add esp, 14h
and dword ptr [ebp+var_14], 0
jmp VALUE3
mov ebx, [ebp+this]
mov ecx, [ebp+first_interval]
mov eax, 51EB851Fh
imul ecx
sar edx, 4
mov eax, ecx
sar eax, 1Fh
sub edx, eax
mov [ebp+first_interval], edx
mov ecx, [ebx+VALUE4]
mov eax, 51EB851Fh
imul ecx
sar edx, 4
mov eax, ecx
sar eax, 1Fh
sub edx, eax
mov [ebx+VALUE4], edx
cmp dword ptr [ebp+first_interval], 0
jg short VALUE5
mov dword ptr [ebp+first_interval], 1
nop - 12 штук
VALUE1
В ida pro есть замечательная вкладка структуры (Structures), и даже в ней есть поиск (Search->text). Вбиваем в него session_skill и видим такое, если блок закрыт нажимаем Ctrl + Numpad+ на клаве что бы открыть его:
Нам нужно поле _target_list, смотрим: его смещение 44, заменяем VALUE1 на 44h в нашем коде
VALUE2
Таже самая структура только теперь поле _data, видим 24 меняем VALUE2 на 24h
VALUE3 и 5
Тут на всеголишь нужно найти конец функции, value5 пока что тоже поставим такое, изменим его в самом конце:
Меняем их на loc_80D1E47
VALUE4
Все таже структура, поле _next_interval видим 38, меняем VALUE4 на 38h
Функцию которую нам нужно будет отредактировать:
Код:
session_skill::StartSession
Ставим мышка на loc_80D1CFE (эти названия тоже зависят от версии), и нажимаем Edit->Patch Program->Change Bytes (далее просто Change Bytes) и меняем 07 C7 на 34 8D. Нажимаем ок.
Далее ставим мышку на 3 строку в этом блоке и нажимаем Edit->Patch Program->Assembly (далее просто Assembly) и вписываешь весь наш код по порядку:
Когда закончите, перед нопами будет jg short и тд, нажимаешь на него и заходим опять в Change Bytes и меняем 32 на 13:
Как видите у нас появился новый блок, жмем на тот же jg short и нажимаем Assembly, меняем адрес на тот что появился.
Если вы все сделали правильно, то в асме ваша функция будет выглядеть так:
А при нажатии на f5 и прокрутки в конец, так:
Для фикса перекаста нужно изменить функцию:
Код:
GNET::Skill::FirstRun
Что бы сохранить изменения жмем Edit->Patch Program->apply patches to input file->ok. Заливаем на сервер и тестим\радуемся
Если у вас что то не получается пишите, возможно я кривожопый и написал что то не так, найдем ошибку вместе и исправим.
p.s весь пример был показан на версии 1.4.2