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

Лидеры

  1. MasterGH

    MasterGH

    Ветераны


    • Баллы

      4

    • Постов

      2 999


  2. LIRW

    LIRW

    Ветераны


    • Баллы

      1

    • Постов

      4 514


  3. keng

    keng

    Ветераны


    • Баллы

      1

    • Постов

      1 635


  4. mrPTyshnik

    mrPTyshnik

    Пользователи


    • Баллы

      1

    • Постов

      79


Популярный контент

Показан контент с высокой репутацией 15.03.2018 во всех областях

  1. Решил попробовать написать CE Lua скрипт, который прочесывает структуру и в Dissect data/structures окне создавал бы структуру только со смещениями, с которыми код работает, т.е. читает или пишет. Например, мой персонаж прогуливается по городу, а каждые 200 мс ставится брейкпоинт на смещение +1 до гипотетической N границы структуры (например до 4096). Я не успел сделать определение типа, но смещения внутри структуры получить я успел. Итак, находим начало структуры любой. Запускаем Lua скрипт и просто что-то делаем в игре. Потом вылазит текст с дизассемблированными инструкциями и смещениями. Уже по этим логам можно определить вручную 1) к каким смещением было обращение (адреса по ним мы и будем менять или сравнивать структуры между собой позже) 2) по виду инструкции и соседнему смещению уже примерно можно определить тип данных и их размер Осталось сделать определение типа, а это не так уж долго сделать и осталось взять код из предыдущих записей в блоге формирования структуры в окне dessect data. Так мы получим структуру только с активными смещениями, (а зачем нам пассивные?) и определим в них тип, я надеюсь определим правильно Пример кода, который я использовал
    2 балла
  2. Версия 1.7.1263

    1 634 раза скачали

    Бессмертие. Быстрое убийство - использовать в зомби режиме, так как убивает всех кроме себя. Максимальная точность. Без отдачи. Без перегрева пулемета. Скорострельность. Без перезарядки оружия. Бесконечные патроны. Без колебания оптического прицела у снайперской винтовки. Бесконечный огнемет. PS: Работает под 2 процесса "CoDWaWLanFixed.exe" и "CoDWaW.exe" Запускаем сначала игру, а потом трейнер. Можно в меню игры, либо в уже начатой игре.
    1 балл
  3. Актуально, если под code будет всегда оригинальный код в 10 байт и 10 байт будут другими на другой инструкции. Я думаю, шаблонный генератор все сделает за нас. Помогает такие штуки не забывать и просто о них даже не думать.
    1 балл
  4. Найти адрес прыжка в эту тулзу при вызове ориг презента, запатчить так чтобы тулза не могла ставить хук, поставить хук самим и затем, сделав все необходимые вещи, прыгнуть на адрес в тулзе
    1 балл
  5. Привет! Валидный девайс в игре только один, если обе тулзы попытаются его хукнуть - будет конфликт. Расковыряй тулзу, встройся в нее.
    1 балл
  6. Наконец-то дошли руки до третий части. Речь пойдет о создании структур программно. Пример, что будет в конце записи Сразу к делу. Нужен поинтер и процесс. Запустим туториал из Cheat Engine из меню Health->Cheat Engine Tutorial. Прохождение туториала подробно описано здесь Подключаемся к процессу идем на 8-мой шаг. В руководстве есть поинтер [[[["Tutorial-i386.exe"+XXXXXX]+C]+14]+0]+18 Вместо XXXXXX может быть любое смещение. Поэтому надо бы поискать Нашил адрес. Поставили бряк. Нашли esi Поставили бряк Вышли сюда Поинтер получили, дальше пойдет Lua. Открываем Lua консоль и проверяем поинтер Выведем адрес и его значение Окей. Поинтер верный. Другой вариант читать значение поинтера примерно такой local address = getAddress("game.exe") address = readPointer(address + 0x123) address = readPointer(address + 0x456) local value = readFloat(address + 0x789) Есть и такие варианты value = readInteger("[[[[[[[[[witcher3.exe + 028F3F60] +0] +18] +20] +40] +40] + 1c0] +10] +28]") value = readFloat("[[[[[[[[[witcher3.exe + 028F3F60] +0] +18] +20] +40] +40] + 1c0] +10] +28]") value = readDouble("[[[[[[[[[witcher3.exe + 028F3F60] +0] +18] +20] +40] +40] + 1c0] +10] +28]") Теперь самое интересное — создание структур с помощью Lua Построим структуру [[[[005FD660]+C]+14]+0]+18. На +18 будет наш адрес. Сначала построим один уровень —"005FD660" Если выполнить скрипт выше, то мы построим структуру одного уровня. Построим теперь структуру двух уровней "[005FD660]+C". Второй уровень нужно развернуть Для этого после создания структуры создам дочернюю myStructure2 = createStructure('MyStructure2') myStructure2.autoGuess('[005FD660]', 0, 50) -- И поместим её по индексу local offset = 0 myStructure.getElementByOffset(offset).setChildStruct(myStructure2) -- Чтобы развернуть список поитеров. К сожалению разворачивается только два уровня structureFrm.Menu.Items[1][6].doClick() Итого получается такой скрипт до второго уровня Создадим и развернем весь указатель [[[[005FD660]+C]+14]+0]+18 Не будем делать через цикл, чтобы не усложнять. Полный скрипт Результат Ну и на закуску. Допустим мы знаем что по адресу X будет всегда тип float (как X,Y,Z координаты). Но расструктуризация будет показывать другой тип, дизассемблер будет показывать другой тип — 4 байта. Что делать? И сразу еще допустим double тип всегда хотим как float тип (в виде комментов в дизассемблере или в расструктуризации) Воспользоваться следующей функцией -- Может менять тип адреса x в окне дизассемблере в комментариях, когда в инструкции существует адрес -- Может менять тип адреса в окне расструктуризации -- Изменив тип, будет ображаться значение другого типа onAutoGuess(function) : Registers an function to be called whenever autoguess is used to predict a variable type function override (address, ceguess): Return the variable type you want it to be. If no change, just return ceguess Ну и вот два примера upd: спрятал код под спойлеры
    1 балл
  7. Хехе я не заметил что там mov ну бывает
    0 баллов
×
×
  • Создать...

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

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