Объявления
Поздравляем
Roman2211


Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Как создать плагин для HD мода

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 08 май 2020, 18:02

Код: Выделить всё
#define _H3API_PATCHER_X86_
#include "..\..\H3API\H3API.hpp"

Patcher* _P;
PatcherInstance* _PI;

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    if ( DLL_PROCESS_ATTACH == ul_reason_for_call )
    {
      _P->GetPatcher();
    }

    return TRUE;
}

У Patcher теперь нет метода GetPatcher()?
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: Как создать плагин для HD мода

Сообщение as239 » 08 май 2020, 18:12

Приглашаю вас сюда, думаю давно пора завести отдельную тему:
viewtopic.php?f=56&t=937
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 08 май 2020, 19:11

Так, это я туплю уже :smile2:
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: Как создать плагин для HD мода

Сообщение as239 » 16 май 2020, 07:14

А как сделать чтобы при отладке, если на этот код стоит хук, IDA не заменяла весь исходный код на JUMPOUT?
Это дико не удобно, прописываешь параметры, функции, подключился отладчиком и хоп все стерлось.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 16 май 2020, 07:20

Вроде, никак. Нужно делать бэкапы. Undo появилось только в версии 7.3.
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

Re: Как создать плагин для HD мода

Сообщение RoseKavalier » 16 май 2020, 12:55

Try undefine function (U in hex assembly view) and reanalyze (P).

As Alexsaid...backups are life-savers, I've restored my IDA database more than once.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 19 май 2020, 15:36

Иногда довольно сложно вспомнить тот или иной адрес, даже имея под рукой базу IDA. В ход идут различные источники информации, которые могут намекнуть на примерный адрес нужного кода. Хочу поделиться работой BTB, в которой собраны адреса и hex-патчи, определённо полезные в такой ситуации: http://btb2.free.fr/misc/h3_hacking.txt
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: Как создать плагин для HD мода

Сообщение as239 » 28 май 2020, 08:02

А как изменить в памяти вещественное число?
Пробую так:
Код: Выделить всё
   long double Kt = 0.02;
   *(long double*)(0x63B8D0) = Kt;

Вылет.

Хотя менять 0x63B8D0 неправильно, он действует еще и на мантию.
Как правильно вот здесь, заменить ссылку на адрес на свое значение:
Код: Выделить всё
004E40FE                     fadd    ds:flt_0063B8D0 


Вот еще похожий пример, вот здесь хочу изменить 0.050000001 на другое значение, но не понимаю как:
Код: Выделить всё
004E3F90                     fmul    ds:IntellSecScSpecMult


Получилось вот так:
Код: Выделить всё
        float NecrKt = 0.010000001;
   int adress = (int)&NecrKt;

   _PI->WriteByte(0x4E3F90 + 2, (adress & 0x000000FF));
   _PI->WriteByte(0x4E3F90 + 3, (adress & 0x0000FF00) >> 8);
   _PI->WriteByte(0x4E3F90 + 4, (adress & 0x00FF0000) >> 16);
   _PI->WriteByte(0x4E3F90 + 5, (adress & 0xFF000000) >> 24);

А попроще нельзя?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 28 май 2020, 12:18

Вам нужно заменить указатель на вещественный коэффициент в ассемблерной инструкции. Нужно делать, как писал ранее RoseKavalier:

Код: Выделить всё
constexpr double myDouble = 1.0;
pi->WriteDword(0x4A74A0 + 2, reinterpret_cast<DWORD>(&myDouble));

+ 2 это смещение к аргументу (первые два байта инструкции - это опкод)

Код: Выделить всё
const double NecrKt = 0.01;
_PI->WriteDword(0x4E3F90 + 2, (int)&NecrKt);
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

Re: Как создать плагин для HD мода

Сообщение RoseKavalier » 28 май 2020, 13:03

Код: Выделить всё
H3Patcher::WriteValue<double> doublepatch(0x63B8D0, 0.02);


Or add this to patcher_x86.hpp in PatcherInstance class
Код: Выделить всё
   //////////////////////////////////////////////////////////////////////////////////////////
   // WriteAddress shortcut
   // writes a pointer of data type (its address)
   // to the specified location
   // The data type can be anything
   template<typename T>
   Patch* __stdcall WriteAddressOf(_ptr_ whereTo, const T& data)
   {
      return WriteDword(whereTo, reinterpret_cast<int>(&data));
   }


Код: Выделить всё
pi->WriteAddressOf(0x4A74A0 + 2, NecrKt );
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron