К вопросу, как найти адрес функции для инжекта. Вам понядобиться OllyDbg.
Запускаете игру под отладчиком, заходите, подготавливаете всё необходимое для нужного действия (сели/встали/взлетели/вышли на спот и т.п.)
Далее в ольке ставите BP send и выполняете ваше действие.
Так. как все команды от клиента так или иначе отсылаются серверу (иначе как о них узнает), то брэйк-поинт сработает.
Дальше вам потребуются листик бумаги, ручка и утомительные (минуты/часы/дни - зависит от Вашего опыта) чтобы пройтись назад по стеку вызовов функциё и найти ту самую, которая "дёргается" когда ваш чар выполняет желаемое Вами действие.
В деталях с картинками принципиально не пишу, ибо предпочитаю "дать удочку", чем "накормить рыбой".
чтож тода это не удочка а соломинка ((
а для неопытного пользователя который невидел эту прогу ниразу (хорошо хоть я видел) это ровным счетом нечего недаст это равнозначно тому вот те лопата откопай незнаю что.... гденибуть вон там (а перед этим раз 1000 проштудируй асемблер вдоль и поперек ну и лет так через дцать найдешь то что искал правда на какомнибуть юкоз сайте в открытом виде с полным разъяснением что кчему и почему в доступной форме
Спасибо всем за отзывы, мы уже и не надеялись....
С дебаггером, правда, ни разу не работал. Случайно выдерну друлек в реал...))
Придется с Идой, как будет время, посидеть. А для ловли брекпоинтов использую TSearch - просто пока перейдешь на чтото новое и поймешь, как оно работает - много времени пройдет, а его как раз нехватает...
ta2we4ka спасибо, после твоей первой ссылки с программой этот вьетнамский форум у меня самый читабельный ))) не шучу в самом деле - с гуглом перевожу... А бота твоего переофтопить наверно не получится (( - там есть адреса про которые я ничего не знаю. Был бы бот на живого клиента - я бы понял, а так - без комментов и на другой версии клиента - ((
lokky006
Спасибо за подсказку, ну с мобами намного легче разобраться, чем с инжектом. Скрипт правда еще корявый - но выводит массив в котором находятся данные мобов. Что интересно, нипы находятся там же. Для лута и ресов тоже один массив на двоих.
Кусок для примера, что вывелось:
2148555472= X-360 Y-457 Z-23 tip-6 lvl-1 name-Изумрудный мотыль
2148555474= X-361 Y-456 Z-23 tip-6 lvl-1 name-Росток росянки
2148555477= X-367 Y-464 Z-23 tip-6 lvl-1 name-Изумрудный мотыль
2148555478= X-367 Y-463 Z-22 tip-6 lvl-1 name-Изумрудный мотыль
2148555479= X-366 Y-464 Z-23 tip-6 lvl-1 name-Росток росянки
2148555480= X-366 Y-463 Z-22 tip-6 lvl-1 name-Росток росянки
2148555490= X-369 Y-458 Z-21 tip-7 lvl-60 name-Вестник поиска драконов
2148555491= X-369 Y-458 Z-21 tip-7 lvl-60 name-Посланник с драконьим жетоном
2148554999= X-373 Y-470 Z-21 tip-6 lvl-1 name-Росток росянки
2148555000= X-372 Y-469 Z-23 tip-6 lvl-1 name-Росток росянки
2148555001= X-372 Y-470 Z-22 tip-6 lvl-1 name-Изумрудный мотыль
2148555002= X-366 Y-470 Z-23 tip-6 lvl-1 name-Изумрудный мотыль
Кто знающий подскажет - хочу сделать поиск названий всех окон, открытых elementclient.exe. Почему то получаю 3 процесса с одинаковым хендлом. Или это окна одного процесса? Кроме "Element Client" получаю "M" и "Default IME". Что это такое? Ищу так:
Local $List = ProcessList("elementclient.exe")
$HendleProc = $List[1][1]
Local $var = WinList()
For $i = 1 to $var[0][0]
If WinGetProcess($var[$i][1]) == $HendleProc Then
MsgBox(0,$var[$i][0],WinGetProcess($var[$i][1]))
EndIf
Next
Кстати, сисадмины умеют юзать мобов! Стоял, проверял офсеты - и вдруг на меня напал моб, который сам на этом участке никогда не агрится. При этом в чате и над ним появилась надпись "разорву!!!". От удивления скриншоты не сделал.
Кто знающий подскажет - хочу сделать поиск названий всех окон, открытых elementclient.exe. Почему то получаю 3 процесса с одинаковым хендлом. Или это окна одного процесса? Кроме "Element Client" получаю "M" и "Default IME". Что это такое?
Это всё окна одного и того же процесса. Да у тебя и код по их извлечению так написан, что именно окна первого попавшегося elementclient.exe будут извлекаться.
Глянул классы данных оконо:
M: MSCTFIME UI
Default IME: IME
Судя по всему оба этих окна служебные. Default IME: IME - вобще ко многим программам цепляется. IME имеет отношение к вводу текста: IME
Так что забей на эти окна. У PW только 1 окно класса: "ElementClient Window".
dj_al
Спасибо за подсказку. Википедия опять рулит. Посмотрел у других программ - действительно, у всех есть Default IME. А что окна первого попавшегося - так это не окончательный скрипт. Придется еще исключать все лишнее.
Народ! Вот решил присоединиться к беседе вашей)))
Оч интересно по поводу инжектинга.... но эт позже
Пока что у меня есть вопрос, на который я думаю вам не составит труда ответить:
(я программист но не особо ассемблерист, и поэтому вероятно туплю во всяких сдвигах итд)
Вот я например запускаю ту самую хваленую прогу для получения базового адреса и оффсетов (MHS reciever чтоли, смотреть лень, но думаю вы и так знаете).
Открываю ini, смотрю оффсеты.
Потом запускаю CE, и тупо поиском нахожу ячейку в памяти, скажем, для ХП перса.
почему то адрес совсем не такой, какой в этом ini-шнике, который нашла прога.
Но я уверен в правильности и того и того(по файлику работает бот, а по тому адресу который я нашел- я прямо в CE вижу текущее значение ХП, вижу как оно изменяется когда моб бьет например)
Где засада, а?
Кстати, в CE написано, что AllocationBase=400000
и оффсеты там другие выходят....
Глянь исходник бота и всё поймёшь как правильно делать поиски по смещениям.
Quote:
Originally Posted by sumikot
dj_al
Спасибо за подсказку. Википедия опять рулит. Посмотрел у других программ - действительно, у всех есть Default IME. А что окна первого попавшегося - так это не окончательный скрипт. Придется еще исключать все лишнее.
Лучше ищи по классу окна, если есть такая возможность на AutoIt. Название класса окна я писал выше.
Так самое прикольное, что я написал маленькую прожку на дельфи, и в ней я считываю из памяти процесса ячейку с адресом который нашел в CE - все работает)))))
Если многоуровневые указатели вычисляются правильно - то всё будет прекрасно работать. Единственное, что - после ТП/захода в данжи и инстансы надо вычитывать dynamic pointer и всё, что от него зависит заново.