Перейти к содержанию

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Сообщения, опубликованные MasterGH

  1. По идее машина состоит из объектов, капота, дверей, бампера.... которые имеют видимо свой урон. Если урон больше определённой величины, то происходит анимация (бьётся стекло, отваливание). При каждой анимации урон может сбрасываться в ноль... в общем надо копаться и скать. Лучше сканером памяти в определённых диапазонах адресов.

  2. 1.

    В скрипте CE ты не учёл fld dword ptr [ecx+00000354]. Эта инструкция смещает стек сопроцессора и требует выгрузки, чтобы не было краха игры

    2.

    Если без фильтра не вылетает, а с ним вылетает, то можно попробовать сохранять регистр флагов

    pushf
    ...

    ....
    popf

    Идентично тому же pushad или popad.

    3.

    Также могу ещё обратить внимание на то чтобы не применять фильтры повсеместно. В данном случае можно было что-то вроде этого (здесь цитата, чтобы можно было выделить жирным шрифт моментов на которые стоит обратить внимание)

    _newmem:

    push eax

    mov eax,[0078f7ec]

    mov dword ptr [eax+354],4479C000

    pop eax

    fld dword ptr [ecx+00000354]

    jmp _faddress+6

    Как видно здесь мы не пишем фильтр и этим самым вероятно увеличиваем шанс чтобы герой был жив даже при сверхсильном уроне. Хотя предполагаю что производительность чуть будет страдать. Чтобы более точно определить нужно посчитать лишние такты.

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

    Если куски кода повторяются, то нужно попытаться найти код вверх по иерархии вложеных вызовов или (даже возможно вниз) где проверочные байты индивидуальны и как-то от них отталкиваться по смещениям или "делать изворотливый" скрипт. Были у меня подобные случаи, я просто находил связанные адреса например со здоровьем и находил куски кода, которые были уникальны. Возможно, будущем я придумаю ещё что-нибудь по решению этой проблемы хотя бы в теории...

  4. Вот один из возможных примеров на скрипте CE с сравнением указателя

    [[core.dll+00155744h]+350h]+43Ch (если немного подумать, то можно написать и с записью значения по этому указателю):

    /*MasterGH(c) 04.01.08. 
    UnrealTournament2003+ (InfHealth)*/

    [ENABLE]
    label(returnhere)
    label(originalcode)
    label(y1)
    registersymbol(y1)

    core.dll+0290://codecave
    push ebx
    mov ebx,[core.dll+00155744]
    mov ebx,[ebx+350]
    add ebx,43C
    //ebx=[[core.dll+00155744h]+350h]+43Ch
    cmp eax,ebx
    pop ebx
    y1:
    db eb 03//jmp short originalcode (EB03 fix EB0390909090)
    mov byte ptr [eax],#250
    originalcode:
    mov ecx,[eax]
    mov edx,[esp+04]
    jmp returnhere

    core.dll+4285c:
    jmp core.dll+0290
    nop
    returnhere:

    [DISABLE]
    //Not to edit

  5. Единствено не пойму что это за код 0x00400000

    и как ты узнал что 1Е334 меньше кода 0x00400000

    Это не код, а адрес начала любой программы под Windows.

    0x00400000 - обычно программы "начинаются" с этого адреса и не меньше (иногда с 0x00410000 или др.) А заканчиваются где-то 0x7FFFFFFF (может ошибся, не помню).

    Когда ты ищешь указатель в памяти инструкции

    mov eax,[ebx+0x2026020]

    , то нужно брать адрес регистра лежащий в промежутке от 0x00400000-0x7FFFFFFF в 32-разрядных играх. У тебя ebx < 0x00400000 и 90-95% указателя на него нет. Зато есть 0x2026020, но указатель на него нет смысла искать, т.к. 0x2026020 здесь жёстко задано.

    Что в игре именно за проблемы, остаётся только гадать. Короче всё это решается под отладкой. Если через несколько месяцев решишь заняться серьёзным гейм-хакингом, то совету читать Рихтера (Windows для профессионалов). Там ты узнаешь и об архитектуре памяти приложений (т.е игр) и о многом-многом другом.

  6. Ты наверно про регистр ebx из инструкции: mov eax,[ebx+0x2026020]

    Если ebx = 1Е334, то очень маловероятно, что следует искать указатель на это значение, т.к. оно меньше 0x00400000.

    Можешь попробовать привести нам всем не меньше 20-ти инструкций вверх и вниз от mov eax,[ebx+0x2026020] и укажи все регистры на этом участке (это просто сделать в Cheat Engine RUS, поставив также бряк на адресе здоровья...).

  7. Я взламывал через TSearch, но Cheat Engine тоже

    выдаёт такой же результат.

    --------------------------------

    Сразу к делу............

    TSearch выдал 2 кода...

    1 код при заморозке в игре ничё не дал,2 код заморозив у меня перестали жизни уменьшаться, но и упративника то же

    самое перестали жизни уменьшаться, вродебы этот адресс

    больше он нечего не выдал(Примеч. Я не тратил жизни, просто стоял на месте).

    Вот оригинальный код игры 236CAB6 mov eax,[ebx+0X2026020]

    -----------------------------------

    004D09B5 - Этот код я нашёл при помощи Code Caver, я сделал так как на писано в инструкции для новичков.

    Ну а остальное я просто скопировал, заменив на свои адреса и значения---- Но всё сделал как в инструкции без ошибок

    --------------------------------

    Я попробовал поменять местами как ты написал

    сначала mov dword ptr [ebx+0X2026020],0x00000064

    а после неё mov eax,[ebx+0X2026020] всё равно нет

    никакого еффекта словно я ничё и не делал.

    ---------------------------

    Я пытаюсь взломать одиночную игру(Схватка и Битва),а не сетевую.

    Если есть идеи подскажи что я делаю не так.


    ... // второй код
    mov eax,[ebx+0X2026020]
    push eax
    mov eax,[0x0510C11B]
    cmp ecx,eax
    pop eax
    ...

    Я выделил ключевые места жирным. Отсюда следует что фильтр на [0x0510C11B] это фильтр на всех игроков. Если его не ставить, то здоровье будет без эффекта.

    Значит нужно найти ещё фильтр на твоего игрока.

    Т.е. нужно ставить либо два фильтра, либо искать другой фильтр на твоего игрока. Если это показалось запутанным, то есть ещё один верный выход - найти всю цепочку указателей до здоровья твоего игрока. Затем ставить на каждый указатель в цепочки брейкпоинт на доступ и искать инструкцию типа А и в неё внедрять чит-код. Работать лучше с CheatEngine.

    Я могу предположить то что я написал сложно понять, поэтому советую потренироваться скачав игру "Grand Theft Auto Vice City" сделать чит по статье, которая есть на нашем форуме при помощи TSearch, а также самостоятельно с CheatEngine.

  8. SERGANT, я создал тему по модернизации CE пользователей... надеюсь ты перенесёшь свои фиксы в неё (моя просьба)

    "Чтобы в "Создателе трейнеров" была нумерация чит-кодов (как нумерация всплывших бряков) " попробуй так (мне бежать нужно по делам некогда проверить)

    MemoryTrainerDesignUnit.pas

    for i:=0 to ControlCount-1 do

    begin

    ....

    // 343 строка

    tcheat(controls).Description:=inttostr(i+1)+' '+frmmemorymodifier.trainerdata[j].description;

    tcheat(controls).Hotkey:=frmmemorymodifier.trainerdata[j].hotkeytext;

    tcheat(controls).HasEditBox:=frmmemorymodifier.trainerdata[j].hasedit;

    tcheat(controls).Editvalue:=frmmemorymodifier.trainerdata[j].editvalue;

    ....

    end;

  9. Если вы хотите поучаствовать в модификации CheatEngine не создавая свою отдельную тему, то для этого можно выложить свои труды здесь:

    1) некоторое описание ваших внесённых изменений

    2) ссылка на скомпилированную программу, модуль или т.п.

    3) ссылка на сами исправленные исходные коды

    4) любые пояснения (в виде текстов, скриншотов) приветствуются

    Правило оформления ложится на ваши плечи (т.к. мне некогда над ним думать), если что, то я подправлю.

  10. В свою очередь напомню (чтобы другим не лазить и не искать):

    Классификация инструкций сработавших при брейкпоинте.

    -Тип А

    Данная инструкция работает с некоторым единственным параметром только определённого игрового объекта.

    Например, здоровье от структуры находится по смещению +155. Инструкция А, работает только с этой структурой, только со смещением +155.

    -Тип B

    Эта инструкция работает с параметрами двух и более объектов, параметры которых находятся по одинаковым смещениям.

    Например, у нас шесть объектов - игроков, у которых по смещениям +155 находится здоровье. Инструкция типа B получает указатель на начало некоторой структуры объекта игрока, прибавляет смещение +155 и работает с параметром (читает параметр из адреса или пишет в адрес). Таким образом, инструкция типа B может отнимать здоровье у героя, а также отнимать здоровье у врагов.

    -Тип С

    Данный тип инструкций может работать с данными находящимися не по одному (как при типах А и В), а по разным смещениям относительно одной или более структур. Стоит не путать тип А с С, т.к. инструкция А работает с одним смещением, тоже самое касается и B.

    Отсюда мы получаем подтипы:

    C(А) - работает с разными смещениями одной структуры (объекта);

    C(B) - работает с разными смещениями более одной структуры (объекта).

  11. Я конечно спорить не буду, я читал об кольцах защиты, но как-то люди были не профи (где-то они услышали, где-то прочитали, кто-то им сказал) Почему-то мне кажется что можно осуществить доступ через дырки в драйверах: переполнение стека и выполнения данных как кода... правда проще другой метод. Свой драйвер написать, который проверяет отладку процесса трейнера и если отладка есть, то схлопываем систему. Загрузка драйвера в систему без её перезагрузки возможна, это я точно знаю: MHS и cheat engine могут это делать :)

  12. Я думаю драйвер писать не нужно. Нужно в существующий драйвер ядра инжектом вклинить необходимую функцию которая перклинит сам драйвер в случае отладки именно того приложения системы, т.е. трейнера. При выгрузке трейнера память драйвера исправить.

    Я точно не знаю, но вроде мои мысли верные.

  13. Если я не "вру", отладчики ипользуют некоторые прерывания совместно с регистрами отладки. Когда происходит отладка, то можно узнать по этим прерываниям и по изменениям регистров. Выполнять это нужно как-то в нулевом кольце с вылетом в бсод. Возможно, это отобьёт желание копаться даже Софт-Айсом.

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

    Какие бы ты защиты не ставил, если трейнер запускается однажды и выполняет необходимый функционал, то ни одна "защита" направленная против рипа, выдергивания ресурсов, кода и т.п. не поможет против очень опытного человека.

  14. С Macromedia Flash Professional 8 хороший вариант, я про него не подумал.

    ПО Flash - Variable engine 2.0 все было бы хорошо, но изменённые этой программой значения иногда превращается в текст.

    Было "10" очков.

    Изменили "10" "Flash - Variable engine 2.0 " на "200".

    В игре в процессе игры добавляется 5 и видим не 205, а "205+5"

  15. ...А искать сканерами памяти, точнее теми которые сейчас существуют бесполезно потому, что с каждым изменением данные (вероятно любой тип данных находящийся в текстовом формате с описанием типа):

    а) вероятно меняют своё местоположение в памяти

    б) упаковываются и распаковываются при каждом изменении

    Изменить данные извне можно специальной функцией зная имя параметра. Только я уже подзабыл что это за функция. Берём любую среду разработки (Delphi,VC++, даже думаю C#...) импортируем ActiveX компонент флеш-плеера, в него загрузим флешку и его функцией изменим некоторый параметр по названию. Когда-то давно я это делал ради эксперимента.

  16. Ещё как востребованы... Я к сожалению мало успеваю, я даже ни разу Cheat Engine никакой версии не запустил со времени переезда.

    Давай всё-таки создадим твою отдельную тему по модернизации CE с переносом постов. Если снова откажешься, то больше надоедать не буду :) :)

  17. Попробуй дизассемблером IDA (она в частности для 64-разрядных приложений) или ищи отладчики под 64-разрядные приложения. Так же возможно сапёр написан на .NET (хотя мало вероятно) и тогда и отладчик ищи под .NET.

    О том на какой платформе написано приложение можешь проверить утилитами (не помню какими). ProcessXP подсветит процесс желтым если это .NET. А Paid вроде покажет 64/32 разрядное приложение или какой-нибудь протектор/пакер...

    Думаю, можно и без отладчика обойтись, если "смотреть в дампе памяти флажки" (если это не .NET, с ней может быть и иначе)

  18. На форуме есть раздел для статей и можно сразу добавить в него. Но по желанию пользователей и администрации, статью можно опубликовать на сайте, если автор статьи дал на это право.

    Так что пиши ссылку на статью в личное сообщение мне и Xipho - кто-то из нас быстрее выложит. У меня сейчас есть минут 30 свободного времени.

  19. ... на этой недели постараюсь почистить эту тему, оставив важные посты и перенести баги в соседнюю тему, а ваши предложения в краткой форме занесу в первый пост темы

    ... Со свободным временем у меня большая проблема, так что извиняюсь за моё отсутствие деятельности на форуме и на сайте. Gamehacking - это почти неисчерпаемая тема для статей, создания трейнеров и инструментария со множеством интересных идей и методов создания читов. Автоассемблер в CE сегодня это далеко не предел удобства внедрения читов. Следующее предложение будем моим.

    Идея такая, внести механизм объектно-ориентированного подхода в создании читов.

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

    Вот пример кода, который потом может быть буду дорабатывать:


    class Hero{
    uint *_pID;

    uint *uiHealth;
    uint *uiAmmo;

    float *x,*y,*z;

    private:
    void Cmp_pID(uint *pID){}; //в этот метод постоянно "поступает" _piD от потока игры и этот поток "замораживает параметры" которые указываются через методы ниже

    public:
    Hero(uint *pID){_pID=pID;} // конструктор копирующий указатель на объект

    void NotDecreased(uint[] *value){;} //не уменьшающиеся параметры
    void Expr(uint[] *value){;} // изменения параметров по некоторому другому условию

    void FloatMode(){;}// движение сквозь стены с учётом инерции
    void SetCoordinate(float *x,float*y,float*z;){;} // установить координаты
    }

    Если у нас есть массив таких объектов, то например можно дать команду чтобы они собрались все в одно место, ходили/летали по кругу (нужна формула перемещения координат), двигались по определённым координатам (и много других возможностей). Возьмём за пример, что нужно переместить всех двух игроков в схожие координаты игрового мира:


    ....
    Hero mHero[1] {new Hero (uint *pID), new Hero (uint *pID)};
    ...
    void SetAllCoord{
    for (int i, i<=1,i++)
    mHero[i]->SetCoordinate(100,100,100);
    }
    ...

    Что-то типа этого... Но самое важное я не обозначил (долго писать): в некоторых местах должны быть перенаправления из игрового кода в методы созданных объектов. Все объекты можно создавать в dll, который внедряется в игру... Конечно, это всё образно, но много перспектив здесь открывается.

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

    Иначе говоря "сделать невидимость". Невидимость я уже делал в играх следующим вариантом и по методологии.

    Каждый объект-противник-игрок имеет своё поле чувствительности (визуальное/"слуховое"/чувствительность на какие-то действия главного героя). Если в это поле по координатам попадает объект нашего игрока, то анализируются его(нашего игрока) действия с критичными. Если эти действия критичны, то выставляется уровень "тревоги" в объекте-противника. Если противник главного героя встречается с другим противником главного героя, то у обоих уравнивается порог тревоги... Все пороги тревоги приводятся к максимальному... и отправляются в некоторый адрес памяти, как визуализация тревоги.

    А из этого предполагаемого процесса следует. Что

    1) нужно найти адрес индикатора тревоги

    2) поставить на него бряк на запись

    3) найти инструкцию через которую все объекты-противники пишут в адрес тревоги значение тревоги

    4) выйти вверх по коду до прыжка и изменить его так чтобы объект-врага "не нервничал".

    Именно так. Если же мы заморозим адрес индикатора тревоги, то толку от этого не будет, всё равно объекты-противники будут нервничать.

    Конечно, я не знаю как точно обстоят дела, но в некоторых играх именно так: например в Manhunt 2

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.