1. Внимание!
    Объявились мошенники, которые представляются администрацией форума и обманывают покупателей. У них есть своя группа ВКонтакте, копирующая нашу, и несколько аккаунтов, маскирующихся под аккаунты администраторов и гарантов форума.
    При проведении любых сделок с администраторами, гарантами и пользователями BlastHack настойчиво требуйте у них написать вам личное сообщение на форуме и ни в коем случае не продолжайте сделку при отказе выполнять это требование или если сообщение не было получено.

Исходник Информация Заставляем игру подгружать ваш SCM

Тема в разделе "C, C++", создана пользователем monobogdan, 31 дек 2016.

  1. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    Возникла у меня необходимость подгрузить мой SCM вместо стандартного.
    Данное решение предназначено для GTA Vice City, но если изменить смещение то можно будет применять во всех играх на RenderWare(GTA III, GTA VC, GTA SA).
    Как же это осуществить?
    Есть специальная переменная которая аллокэйтится при старте игры(после видео но до меню).
    Имеет она тип массива байтов.
    Массив байтов? Таакс, PCHAR отлично сойдет.
    Стоит отметить то что имя вашего scm должно иметь точно такую же длину как и у оригинала(main.scm), иначе игра крашнется с sigsegv(так как для этой переменной выделенно 8 байтов в памяти).
    Смещение данной переменной(для версии 1.0): 0x06886AC
    Объявление данной переменной:
    Для плюсов
    Код (Text):
    Выделить всё двойным кликом
    char scmName[8];
    Для Delphi
    Код (Text):
    Выделить всё двойным кликом
    var
      scmName: array[0..8] of Char;
    Чтобы изменить значение данного участка памяти, мы можем воспользоватся функцией WinApi CopyMemory:
    Код (Text):
    Выделить всё двойным кликом
    var
      MyNewString: PChar;
    ...
    MyNewString := 'test.scm';
    CopyMemory(Pointer($006886AC), MyNewString, sizeof(MyNewString));
    Теперь игра будет подгружать test.scm вместо main.scm, что даст вам возможность модифицировать сюжет, и не только без CLEO но и не портя оригинальный сюжет.
     
    Последние данные очков репутации:
    p1cador: 2 Очки 31 дек 2016
    #1
  2. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.565
    Лайки:
    1.523
    Репутация:
    414
    Так почти любой файл можно подменить, смотри в собейт. А еще можно похукать функцию, которая обращается к этой переменной и считать название файла из другого адреса, другого размера.
     
    #2
  3. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    Функция: loadScm.
    Незнаю как её похукать, вставить весь асм из idb?
     
    #3
  4. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.565
    Лайки:
    1.523
    Репутация:
    414
    На самом деле можно просто вставить вызов твоего кода. Но можно и проще - в функции изменить адрес чтения названия файла
     
    #4
  5. monobogdan

    monobogdan Известный пользователь

    Регистрация:
    26.12.16
    Сообщения:
    67
    Лайки:
    1
    Репутация:
    1
    Можно и так.
    Но тот пример что я привел самый простой.
     
    #5