Для чего это нужно?
В основном для ботов, самый простой пример - выделение моба.\
Наверняка все вы заметили что после обновления с джинами MHS-bot перестал верно выделять мобов.
Все это из за его системы выделения, а именно MHS просто помещает в ячейку цели WID (World IDentificator) цели.
На Делфи это выглядело бы так:
Однако простая запись в ячейку и до обновления была не лучшим выходом (первой атакой должен был быть скилл)
В чем плюс инжекта?
Фактически когда мы делаем иньекцию кода в память, мы заставляем работать функцию самого клиента.
При этом выделение происходит по всем правилам, как со стороны клиента, так и со стороны сервера.
Я буду описывать самый простой для нахождения (с моей точки зрения) и при этом самый нужный для бота инжект выделения в таргет.
1. Находим базовый адрес (как это сделать).
2. Снимаем выделения с моба (если моб был выделен)
Нажимаем на базовом адресе правой и выбираем пункт "Кто получает доступ к адресу" (дело в том что недалеко от большинсва функций, которые мы можем инжектить лежит код получения какой указателя на какую-либо структуру данных).
[Ссылки могут видеть только зарегистрированные пользователи. ]
Откроется окно и мгновенно наполнится адресами (и соответствующим им кодом) обращения к базовому адресу.
[Ссылки могут видеть только зарегистрированные пользователи. ]
3. Возвращаемся в окно ПВ, немного побегаем, попрыгаем (но не выделяем мобов, и не ловим на себя агромобов), окошко СЕ в это время заполнится большим количеством записей.
Но среди них все ще не будет нужной.
4. Прокручиваем скроллер вниз. Выделим последнюю строку в списке (для удобства), возвращаемся в ПВ и выделяем моба. Добавились несколько записей, одна из них то нам и нужна.
В поле "Count" указывается число раз, которое была выполнена соответствующая строка кода. Удобно несколько раз выделить моба, дабы точнее определиться с необходимыми строками.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Переписываем адреса "понравившихся" (читай наиболее вероятных) записей в блокнотик, или куда вам удобнее. Выключаем СЕ свою работу он выполнил.
Конец первого этапа.
1. Открываем OllyDbg и цепляем его к PW, для этого нажимаем open>attach, в появившмся окне ищем запись elementclient и 2 раза тыкаем на нее.
[Ссылки могут видеть только зарегистрированные пользователи. ][Ссылки могут видеть только зарегистрированные пользователи. ]
2. Когда OllyDbg подключится к PW в панели состояния будет написано, что поток остановлен на точке останова дебаггера.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Нажимаем F9, тем самым продолжаем выполнени кода PW.
3. Открываем блокнотик, куда мы записали адреса возможных функций, копируем первый.
В OllyDbg нажимаем ctrl+g (горячая клавиша перехода на адрес) и в появившееся окно со строкой ввода вставляем наш адрес, давим enter (так как мы находимся не в основном модуле программы а в ntdll процедуру повторить 2 раза).
[Ссылки могут видеть только зарегистрированные пользователи. ]
Мы перешли на выбранный адрес.
4. Теперь смотрим что же у нас здесь такое.
[Ссылки могут видеть только зарегистрированные пользователи. ]
С данного пункта следует полагаться на собственную интуицию, логику и умение читать disasm
Нужно предположить как должна выглядеть вызов функции, какое количество и каких параметров должны в обязательном порядке передавать в нее. Поскольку мы разбираем функцию выделения моба в тергет, логично было бы предположить, что одним из обязательных параметров долен быть WID моба.
Интерисует нас вот этот кусок кода (поскольку он представляет собой внутреннюю функцию клиента):
CALL elementc.00606A70 - вызов функции (CALL - команда перехода в функцию; elementc - имя модуля, содержащего функцию, 00606A70 - адрес функции)
PUSH EDI - передача в функцию параметра, что это за параметр нам еще предстоит понять.
Группа команд:
Подготовка указателя, на какой-то параметр (опля, пишу статью, а что за параметр представления не имею, однако , в данном случае, это не важно, так как нам предстоит лишь повторить действия клиента).
5. Разберемся с аргументом. Для этого поставим BreakPoint (точка останова) на строку:
004619D2 |. 57 PUSH EDI ; /Arg1
(Выделить строку, нажать F2).
[Ссылки могут видеть только зарегистрированные пользователи. ]
Теперь перейдем в окно PW и выделим моба/персонажа.
Видим что клиент встал на точку останова (правый нижний угол, надпись Pause)
[Ссылки могут видеть только зарегистрированные пользователи. ]
В комментарии напротив Arg1 теперь написано 80101033, пока что для нас это цифра. Сравним ее с WID того моба, которого мы выделили.
Здесь у нас есть 2 пути: 1. Добавить в СЕ адрес, содержащий WID выделенного моба/персонажа.
Я надеюсь вы знаете как ищется адрес таргета.
[BA]+$1C+$20+B0C (для версии на момент написания статьи)
Для этого необходимо запустить elementclient с параметром console:1 .
Откроем консоль (Shift+~) и введем команду d_npcid.
Теперь мы выдим WID всех NPC.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Что мы видим? Цифра, указанная в отладчике совпадает с WID NPC.
В общем первую функцию мы разобрали, она достаточно похожа на выделение моба, простая функция, с близким вводом аргумента, значение аргумента совпадает с WID NPC, красиво и лаконично.
В принципе для меня этого было бы достаточно, что бы начинать писать код (интуиция подсказывает что это именно та функция, которая нам нужна).
Особенно учитывая, что остальные не получают аргумента содержащего WID моба/персонажа/NPC.
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
aParamsSize: DWord);
var
hThread: THandle;
lpNumberOfBytes: DWord;
ThreadAddr, ParamAddr: Pointer;
begin
if ProcessID<>0 then
begin
// ---- Выделяем место в памяти процесса, и записываем туда нашу функцию
ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);
// ---- Также запишем параметры к ней
ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);
// ---- Создаем поток, в котором все это будет выполняться.
hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes);
// ---- Ожидаем завершения функции
WaitForSingleObject(hThread, INFINITE);
// ---- подчищаем за собой
CloseHandle(hThread);
VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
end
end;
Таким образом мы создаем свой поток в памяти выделенной клиенту (тоесть по сути вставить в клиент свой код)
И тип данных:
Код:
type
PParams = ^TParams;
TParams = packed record
WID: DWord;
end;
Теперь подготовим код, который и будет кодом нашего потока.
И который будет вызывать функцию клиента.
По сути повторям код клиента (добавив передачу параметров и прочую обвязку):
Вот это главная проверка, если инжект прошел - значит все верно.
Если инжект не прошел - значит все плохо.
Пример программы - в аттаче.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
JD: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
Статьи: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
взялось 'ElementClient Window'? вернее, как это определили?
Интересный вопрос.
Функия есть такая в WinApi - GetClassName.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
JD: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
Статьи: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: "Поиск инжектов" или "Наш код в чужом процессе"
шок все правильно, с буквами, тогда в какой тип переменной выкидывать таргет, что бы вывести его правильно в стринги ? и кст через CE выдает тоже не правильно получается, или может в таргет не тот id передается?
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: "Поиск инжектов" или "Наш код в чужом процессе"
Цитата:
Сообщение от Jok3r666
У меня в EDI другое значение и причем в нем присутствует буква, в чем беда может быть? на айди в таргете оно ваще не похоже.
1)Включи инженерный калькулятор;
2)Выбери там hex;
3)Впиши туда то, что в EDI;
4)Переставь на dec.
5)???????
6)Profit
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: "Поиск инжектов" или "Наш код в чужом процессе"
Цитата:
Сообщение от Fanky3
все бы хорошо но вот как найти инжекты перемещения по карте, или заставить бота двигаться по вейпоинтам с помощью инжектов...
Найти инжект перемещения. Тоесть повторить для перемещения, по аналогии, то что было написано выше.
Составить карту вейпоинтов.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
JD: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
Статьи: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: "Поиск инжектов" или "Наш код в чужом процессе"
aPParams - принадлежит типу PParams, что является указателем на тип TParams.
короче говоря, переменная aPParams - это 4 байта, ссылающиеся на структуру TParams.
^ обозначает, что обращаешься ты не к адресу, а к структуре, по нему лежащей.
фуф. надеюсь, по-русски получилось.
Re: "Поиск инжектов" или "Наш код в чужом процессе"
Разименование указателя.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
JD: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
Статьи: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: "Поиск инжектов" или "Наш код в чужом процессе"
Цитата:
Сообщение от Domin.5
aPParams - принадлежит типу PParams, что является указателем на тип TParams.
короче говоря, переменная aPParams - это 4 байта, ссылающиеся на структуру TParams.
^ обозначает, что обращаешься ты не к адресу, а к структуре, по нему лежащей.
фуф. надеюсь, по-русски получилось.
получилось все класно)) все понял
Посоветуйте, сайт где хорошо разжевано обучение работе с памятью, указателями и т.д. с нуля желательно ибо с памятью дел ваще не имел.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: "Поиск инжектов" или "Наш код в чужом процессе"
Здравствуйте!
Большое спасибо за статью, очень понравилась, всё понятно описано.
Не могли бы вы подсказать мне, желательно на примере, для наглядности, как заинжектить код, выполняющий какое-нибудь элементарное действие? Например есть форма с единственной кнопкой, при нажатии на которую, персонаж выделяет моба с заданным WID, после чего просто перемещается на заданные координаты. Я был бы очень признателен. Руки вроде прямые, чай, сигареты на ночь есть =) Практики почти нет. Ах да, пользуюсь AutoIt.
Re: "Поиск инжектов" или "Наш код в чужом процессе"
На автоите не подскажу, писать на нем я не могу да и не хочу.
А вообще во вложении к певому посту, таки, предоставлен код, выполняющий простейшее действие - выделяющий моба с заданным WID.
А для того что нужно вам, таки, необходимо использовать 2 инжекта (выеление моба и перемещение).
Вообще желаю спокойной ночи.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
JD: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
Статьи: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).