[PW] Гайды Делаем инкаст

  • Автор темы Автор темы Andrey
  • Дата начала Дата начала

Andrey

Я админ,смекаешь?
Команда форума
Админ
Зануда
Проверенный
Местный
Для всего понадобиться:
  • 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 штук
Для начала заполним VALUE (Они полностью зависят от версии)

VALUE1
В ida pro есть замечательная вкладка структуры (Structures), и даже в ней есть поиск (Search->text). Вбиваем в него session_skill и видим такое, если блок закрыт нажимаем Ctrl + Numpad+ на клаве что бы открыть его:
1.jpg
Нам нужно поле _target_list, смотрим: его смещение 44, заменяем VALUE1 на 44h в нашем коде

VALUE2
Таже самая структура только теперь поле _data, видим 24 меняем VALUE2 на 24h

VALUE3 и 5
Тут на всеголишь нужно найти конец функции, value5 пока что тоже поставим такое, изменим его в самом конце:
2.jpg
Меняем их на loc_80D1E47

VALUE4
Все таже структура, поле _next_interval видим 38, меняем VALUE4 на 38h

Функцию которую нам нужно будет отредактировать:
Код:
session_skill::StartSession
Находит такой фрагмент кода:
3.jpg
Ставим мышка на loc_80D1CFE (эти названия тоже зависят от версии), и нажимаем Edit->Patch Program->Change Bytes (далее просто Change Bytes) и меняем 07 C7 на 34 8D. Нажимаем ок.

Далее ставим мышку на 3 строку в этом блоке и нажимаем Edit->Patch Program->Assembly (далее просто Assembly) и вписываешь весь наш код по порядку:
4.jpg

Когда закончите, перед нопами будет jg short и тд, нажимаешь на него и заходим опять в Change Bytes и меняем 32 на 13:
5.jpg

Как видите у нас появился новый блок, жмем на тот же jg short и нажимаем Assembly, меняем адрес на тот что появился.

Если вы все сделали правильно, то в асме ваша функция будет выглядеть так:
6.jpg
А при нажатии на f5 и прокрутки в конец, так:
7.jpg

Для фикса перекаста нужно изменить функцию:
Код:
GNET::Skill::FirstRun
Сразу открываем псевдокод (F5) и видим 90, до этого значения пение снижается при перекасте. Тыкаем прямо на нем пкм->Jump to Disasm, идем в Assembly и меняем 5a на 63:
8.jpg

Что бы сохранить изменения жмем Edit->Patch Program->apply patches to input file->ok. Заливаем на сервер и тестим\радуемся

Если у вас что то не получается пишите, возможно я кривожопый и написал что то не так, найдем ошибку вместе и исправим:Pig01:.

p.s весь пример был показан на версии 1.4.2
 
Для 1.5.5 не подходит, так как после данного фикса, у физов часть скиллов не работает , при наличии хоть 1% пения
 
  • Like
Реакции: Head
IDA ругается на предпоследнюю до nop-ов строчку
jg short loc_812448E
Мб зря я сюда полез :Pig02:
 
А можно понятней разжевать для новичков ни разу не работающих в IDA . Я лично нифига не понял из первого блока до слов (Функцию которую нам нужно будет отредактировать:session_skill::StartSession)
Пожалуйста можно подробный гайд , делаю все по гайду но значения все другие и половину того что тут написано у меня нету
 
А можно понятней разжевать для новичков ни разу не работающих в IDA . Я лично нифига не понял из первого блока до слов (Функцию которую нам нужно будет отредактировать:session_skill::StartSession)
Пожалуйста можно подробный гайд , делаю все по гайду но значения все другие и половину того что тут написано у меня нету
Значит тебе сюда еще рано. Подробнее уже некуда.
 
Я хз в чем моя беда, но вот возможно поможет деревянным как я, которые только начали щупать ida .
Если не находит: session_skill, _target_list, _next_interval и соседние структуры act_timer_session и тд.
1. Находит в списке функций StartSession и жмем F5.
upload_2022-5-3_1-31-22.png

2. Находим для примера переменную _target_list и ПКМ и тыкаем на Jump to structure definition.
upload_2022-5-3_1-32-43.png
 
И в чем проблема?
 
И в чем проблема?

upload_2022-5-3_17-2-30.png
вон у людей выше была проблема. И у меня такая же была, нашел способ найти структуру функции от обратного, и посчитал что возможно в будущем кому-то поможет.

Для всего понадобиться:
  • 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 штук
Для начала заполним VALUE (Они полностью зависят от версии)

VALUE1
В ida pro есть замечательная вкладка структуры (Structures), и даже в ней есть поиск (Search->text). Вбиваем в него session_skill и видим такое, если блок закрыт нажимаем Ctrl + Numpad+ на клаве что бы открыть его:
Посмотреть вложение 1208
Нам нужно поле _target_list, смотрим: его смещение 44, заменяем VALUE1 на 44h в нашем коде

VALUE2
Таже самая структура только теперь поле _data, видим 24 меняем VALUE2 на 24h

VALUE3 и 5
Тут на всеголишь нужно найти конец функции, value5 пока что тоже поставим такое, изменим его в самом конце:
Посмотреть вложение 1209
Меняем их на loc_80D1E47

VALUE4
Все таже структура, поле _next_interval видим 38, меняем VALUE4 на 38h

Функцию которую нам нужно будет отредактировать:
Код:
session_skill::StartSession
Находит такой фрагмент кода:
Посмотреть вложение 1207
Ставим мышка на loc_80D1CFE (эти названия тоже зависят от версии), и нажимаем Edit->Patch Program->Change Bytes (далее просто Change Bytes) и меняем 07 C7 на 34 8D. Нажимаем ок.

Далее ставим мышку на 3 строку в этом блоке и нажимаем Edit->Patch Program->Assembly (далее просто Assembly) и вписываешь весь наш код по порядку:
Посмотреть вложение 1213

Когда закончите, перед нопами будет jg short и тд, нажимаешь на него и заходим опять в Change Bytes и меняем 32 на 13:
Посмотреть вложение 1214

Как видите у нас появился новый блок, жмем на тот же jg short и нажимаем Assembly, меняем адрес на тот что появился.

Если вы все сделали правильно, то в асме ваша функция будет выглядеть так:
Посмотреть вложение 1210
А при нажатии на f5 и прокрутки в конец, так:
Посмотреть вложение 1211

Для фикса перекаста нужно изменить функцию:
Код:
GNET::Skill::FirstRun
Сразу открываем псевдокод (F5) и видим 90, до этого значения пение снижается при перекасте. Тыкаем прямо на нем пкм->Jump to Disasm, идем в Assembly и меняем 5a на 63:
Посмотреть вложение 1212

Что бы сохранить изменения жмем Edit->Patch Program->apply patches to input file->ok. Заливаем на сервер и тестим\радуемся

Если у вас что то не получается пишите, возможно я кривожопый и написал что то не так, найдем ошибку вместе и исправим:Pig01:.

p.s весь пример был показан на версии 1.4.2

Не уловил когда поменял второе значение. В шаблоне ты указываешь value2 и говоришь, что его надо заменить на смещение поля _data 24h из-за чего параметры в методе передаются неправильно
upload_2022-5-3_19-4-7.png
если заменить как на твоем скрине на 20h то все окей
upload_2022-5-3_19-8-48.png
 
Последнее редактирование модератором:
Назад
Сверху