1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Любая версия Ограничиваем debug для GM

Тема в разделе 'PW Документация', создана пользователем int 3, 18 авг 2014.

  1. TopicStarter Overlay

    int 3 Программист Пользователи Open Source Contributor

    Сообщения:
    342
    Лайки:
    531
    Пол:
    Мужской
    Репутация:
    10
    Страна:
    Russian Federation Russian Federation
    Мне потребовалось: IDA + Hex Rays, хекс редактор, Cheat Engine и немного знаний асма.
    Ахтунг! Все числа в статье - в 16-ричной системе счисления. Где-то есть 0x, где-то нет.

    Статья будет состоять из трёх частей:

    Материал можно копировать и использовать на своё усмотрение, но указание автора (int 3) приветствуется.

    Если есть вопросы - задавайте, с радостью отвечу.
    Последнее редактирование: 15 янв 2021
    bublik))), DjonnyCeep, dpakon1 и 14 другим нравится это.
  2. Тыщ Группа анонимных алкоголиков Art Old school Пользователи

    Сообщения:
    1.573
    Лайки:
    812
    Пол:
    Мужской
    Репутация:
    2
    Описывай предь,пожалуйста до "ввода" своих таблиц и тд и указывай версию,на которой делал,ибо тестил на 1.5.0 :
    0x0811c8DA
    0x08122523 konec
    [​IMG]
    811c8e1 Вышло после того как отнял,
    5c42 адрес в создании ф-и
    d48da - замены
    jz+5c42 Эт ок.6A7A2B35633432
    [​IMG]- А это не нагуглил
    [​IMG]
    Схоронил,дальше мир вылетает при вводе дебаг-команды.лол
    http://screenshot.ru/ef8d0336c9fbfc351ec0e616e8d6992d.mp4
    Прикладываю ГС ЧИСТЫЙ:
    https://yadi.sk/d/FuoPgNYFZuEe2
    Если будет возможность-разьясни что с ним да как
    При сравнении понял что ошибся немного адресом,надо было выше вводить,сделал по-другому
    [​IMG]
    Тот же вылет ГС,а значит причина в неправильной ф-ии.
    Выяснил что "Одновременный вход в игру , учетная запись заблокирована" из-за деливери,лол
    Последнее редактирование: 18 авг 2014
    this, DjonnyCeep и Гильберт нравится это.
  3. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    Для редактирования asm кода, рекомендую использовать http://hte.sourceforge.net/
    Она заменит сразу и CheatEngine и Hex редактор. По поводу вырезки "лишнего" кода, лучше делать по другому: в нужном месте вставляем jmp на свободное место (в gs верочно можно затирать функцию Elementdataman::save), там вставляем часть кода, которую мы затерли джампом, после чего пишем свой код в конце которого делаем jmp назад в изменяемую функцию. Таким образом не потеряем исходный код и получим немало места для своих проверок.
    int 3, DjonnyCeep и Joslian нравится это.
  4. TopicStarter Overlay

    int 3 Программист Пользователи Open Source Contributor

    Сообщения:
    342
    Лайки:
    531
    Пол:
    Мужской
    Репутация:
    10
    Страна:
    Russian Federation Russian Federation
    По поводу таблиц - у меня подредактированы только аргументы функции, это не должно влиять на смысл. Функция в любом случае есть (GLog::log()), её можно затереть. Версия 1.5.1, забыл дописать.

    Это адрес строчки вызова функции, сама функция находится в
    [​IMG]
    (0x811C8C4 - 0x811C8E1)

    Это вычислено верно.

    Заходим в функцию GMCommandHandler и огорчаемся:
    [​IMG]
    Смещение стало не 0x48, а 0x44 (пкм - hexadecimal), поэтому 6-й байт в коде изменится с 48 на 44.

    D48C4 - стираем 30 байт.
    Дописываем байты, вычисляем разность (у меня получилась 0x5C52). Результат:
    [​IMG]
    Сохраняем и для надежности/проверки суём в иду. (Проанализировалось не до конца)
    [​IMG]
    Зеленым указаны начальные команды, которые были перед/после затираемой функции (они не изменились, значит мы ничего не сломали), между ними наш код. Прыжок переходит на верный адрес.
    https://yadi.sk/d/BnY5l5qjZwF7f - пофикшенное ядро

    Спасибо, попробую.

    Я практиковал такой способ, когда редактировал клиент, но тут функция была мелкая, а джампом всё равно пришлось бы затереть 5 байт. Когда-нибудь опишу в гайдах и такой вариант.
    Joslian, Merfy и Тыщ нравится это.
  5. Гильберт Пользователи

    Сообщения:
    56
    Лайки:
    15
    Пол:
    Мужской
    Репутация:
    0
    Добрый день. У меня вот такой вопрос: Можно ли например дебаг привязать не ко всем GM, а к персонажу с отдельным идом, или к отдельному аккаунту. Как это вот можно реализовать, где копать, и как примерно должна выглядеть функция ?
    Заранее спасибо.
  6. TopicStarter Overlay

    int 3 Программист Пользователи Open Source Contributor

    Сообщения:
    342
    Лайки:
    531
    Пол:
    Мужской
    Репутация:
    10
    Страна:
    Russian Federation Russian Federation
    Можно привязать хоть по айпи/лвлу/клану/полу. Но тут уже не обойтись без непосредственной отладки сервера для нахождения параметров, по которым привязываем. И, конечно же, нужно знать ассемблер. Привязка по айди: находим смещение до айди перса (отладка/изучение функций в иде), меняем код на
    mov eax, [ebp+8]
    cmp [eax+123], 456
    (где 123 - смещение, 456 - айди)
    jne %выход%
    Гильберт нравится это.
  7. pilad Команда форума Модератор Пользователи

    Сообщения:
    1.740
    Лайки:
    480
    Пол:
    Мужской
    Репутация:
    1
    Команда:
    Freeman
    А можно для ленивых сразу для 1024 выложить ядро ? С дебаг символами :D
  8. Гильберт Пользователи

    Сообщения:
    56
    Лайки:
    15
    Пол:
    Мужской
    Репутация:
    0
    Спасибо большое, вы очень помогли.
  9. TopicStarter Overlay

    int 3 Программист Пользователи Open Source Contributor

    Сообщения:
    342
    Лайки:
    531
    Пол:
    Мужской
    Репутация:
    10
    Страна:
    Russian Federation Russian Federation
    Жирно будет, пусть люди учат асм :D
    Unix, Donato Ferrante и NEO нравится это.
  10. Unix Пользователи

    Сообщения:
    1.028
    Лайки:
    331
    Пол:
    Мужской
    Репутация:
    6
    Страна:
    Ukraine Ukraine
    Помню начал учить асм, и понял что суицид действительно выход (с)Ацкой.
    Zool и Mr.Fleks нравится это.
  11. Wrechid Пользователи

    Сообщения:
    10
    Лайки:
    2
    Репутация:
    0
    Команда:
    other
    Страна:
    United States United States
    sorry for my English,
    How do I translate "jz +6646" to "0F 84 46 66 00 00" bytes...?
  12. TopicStarter Overlay

    int 3 Программист Пользователи Open Source Contributor

    Сообщения:
    342
    Лайки:
    531
    Пол:
    Мужской
    Репутация:
    10
    Страна:
    Russian Federation Russian Federation
    I prefer to use my own assembler to opcode compiler, but you can check this service (remember to replace 6646 with 0x6646).
Черновик сохранён Черновик удалён
Similar Threads
  1. Fituchini
    Ответов:
    31
    Просмотров:
    10.949
  2. Overload

    Любая версия debug команды

    Ответов:
    22
    Просмотров:
    34.266
  3. Tails
    Ответов:
    4
    Просмотров:
    1.794
  4. int 3
    Ответов:
    14
    Просмотров:
    4.993
  5. Tails
    Ответов:
    4
    Просмотров:
    2.078
Загрузка...

Поделиться этой страницей