Как правильнее изучить ассемблер(дизассемблер) для написания бота(ММО)?
Здравствуйте.
Опыта в программирование мало, но он есть. Умею работать с памятью и писать бота считывающего эту память(Cheat Engine мой нынешний предел).
Хотелось бы развить свои знания и изучить ассемблер(дизассемблер) для написания полноценных ботов, которые будут работать на основе инжектов и пакетов.
На данный момент таких знаний у меня нет, в ассемблере очень слаб, вот и потребовались советы опытных, т.е. вас.
Можно конечно же продолжать писать бота, который считывает память клиента, но понимание инжектов и пакетов в раз улучшит качество бота и позволит ему работать в фоновом режиме, также позволит создавать дополнительные функции, по типу Vacuum хака и т.д.
Заранее благодарен.
P.S. - Все эти MOV, EAX, ESI я не понимаю, т.е., мои знания на столько скудны.
Ботов для игр на ассемблере не пишут. И вообще приложения под современные ОС и домашние архитектуры крайне редко пишут на ассемблере.
Поэтому - учите С/С++. Как учить - гугл в помощь, вопросы поднимались сто раз.
Но, для понимания - я бы не советовал эти языки для старта, вообще. Но это отдельная тема холивара - как и с чего учиться программировать.
Простите, но я видимо не так изъяснился. Я не думал писать на ассемблере, я уже пишут ботов на других языка.
Ассемблер мне нужен был лишь для того, чтобы понимать содержимое данных игры в том же OllyDbg, ну и достав оттуда нужную информацию, писать более продвинутых ботов, которые бы работали с помощью инжектов и т.д.
old_mamont для этого тоже не нужен ассемблер. Дизасмить сейчас игру достаточно глупо в одиночку - слишком много кода. Продуктивнее приводить к чему то более высокоуровнему. Вот например тут неплохое описание - https://habrahabr.ru/post/255767/
GavriKos: Спасибо. Видимо, я и вправду сделал грубую ошибку, не так объяснив нужное мне.
Говоря проще, мне нужно научиться правильно понимать все эти MOV, ESI и т.д. в том же OllyDbg, дабы доставать из игр нужные мне значения, который с помощью Cheat Engine-а не достанешь.
old_mamont: содержимое данных игры тоже не хранится в ассемблере, это просто цифровые данные, с которыми можно работать на любом языке.
Изучение ассемблера, без навыков программирования на более удобном (высокоуровневом) языке - это процесс сложный, неудобный и трудоемкий. Вам дают совершенно правильный совет - что так делать не нужно.
Вы можете просот привести пример проблемы с которой столкнулись и как вы пытались ее решить, возможно подскажут куда копать.
А так, для пользования ollydbg, например было бы полезно знать стандартные виндовые функции, чтобы делать удобные брейкпоинты.
Здравствуйте.
Спасибо вам за ответ.
Видимо я неправильно выразился, меня интересует полное понимание щllydbg-а, дабы я смог с помощью него вытаскивать нужные мне данные, которые бы вывели моего бота на новый, более продвинутый уровень.
В Cheat Engine возможности довольно таки ограничены, в то время, как в ollydbg можно с легкостью вытянуть любую информацию(количество всех мобов на карте, мобы поблизости персонажа и т.д.), но нужно лишь понимать все эти MOV, EAX, ESI и т.д.
old_mamont: ollydbg это просто отладчик, который позволяет просмотреть текущий процесс в памяти.
Нужно понимать, что неважно, на чем была написана программа, в памяти будут уже машинный код (который можно дизассемблить в получитабельный ассемблер), но еще нужно учитывать платформу и архитектуру приложения.
То есть, понимать то, что вам покажет ollydbg - нужно учить ассемблер с приложением к целевой платформе (например знать windows API).
С другой стороны, мобы - это не mov, jpz, eax. Мобы и другие объекты - это данные, котороые хранятся не в виде языка программирования, а в виде байт и структур. Неважно на каком языке их обрабатывать, важно понять в каком виде они там лежат. Для MMO игр, было бы удобнее лазить не в память, а перехыватывать и разбирать сетевые пакеты.
Чтобы хорошо взламывать игры, хорошо сперва научиться их писать. Хотя бы базовые навыки программирования, понимание процесса компиляции, понимание сетевого траффика, понимание хранения разных типов данных в памяти ( байт, слово, массив, структура).
А то, складывается впечатление, что вы не очень правильно понимаете значение слова бот.
old_mamont: Вы понимаете что именно говорит человек на видео?
Человек знает про программирование очень много, а не пару команд в ассемблере.
Например, он не ставит брейкпоинт в рандомную EAX команду ассемблера, он говорит что мы используем winsock, это библиотека в windows, и мы ставим брейкпоинт на вызов конкретной функции, например клик мышки, после чего ставит брейкпоинт и несколько раз кликает мышкой, чтобы попасть в нужное место в коде, в котором после клика на определенного персонажа появляется функция разговора с ним.
Отловив в коде этот момент, он начинает восстанавливать функциюи какие параметры она передает, чтобы потом сделать подобную функцию отдельно от клиента.
Обратите внимание, что синтаксис функции у него в блокноте от языка C, а не ассемблера.
Зная где находится в коде функция, и в каком файле она лежит (engine.dll), он может попытаться ее заинжектить в своем внедренном коде, и например выполнить уже не тем способом который предлагает клиент (подойти к персонажу и кликнуть на него на экране), а просто нажать кнопку в менюшке, причем даже не поворачиваясь к персонажу экраном (сервер не проверяет куда вы смотрите, он проверяет на каком расстоянии вы от персонажа, когда ему приходит пакет "игрок в диалоге с персонажем x вызвал меню y).
То есть все, что делает функция - создает сетевой пакет и отправляет на сервер. Если такой пакет отправить другим способом, или вызвать функцию другим способом - можно проще автоматизировать процесс.
Но малости знаний тут совсем недостаточно. Тут как раз перечислено все, что я выше описывал - умение программировать на каком-то языке программирования, в данном случае на С/С++ чтобы писать свою dll, которую будете подставлять вместо/вместе с оригинальной. Иметь представление о структуре данных и процессе компиляции (обратите внимание, что он легко понимает сколько параметров нужно функции и какой у них размер). Иметь знание о библиотеках целевой платформы - в данном случае windows, тот же winsock это стандартная сетевая библиотека.