Надумал я пофиксить валкер чтобы можно было спокойно ботить и не париться что он "палевный".
Насколько мне известно проблемные места это:
1 пакет движения
2 отправляет пакет GMlist
3 не отправляет пекет ValidatePosition
4 не корректно обрабатывает некоторые диалоги с нпс
5 иногда некорректно формирует Action
В наличии:
1 La2offline 4 Gracia Final для "безнаказанных" тестов бота
2 "чистый" клиент с прикрученным ботом настроенный под данный сервер
3 OllyDbg которой не "сопротивляется" клиент
4 написанная на C++ Builder 6 с использованием ассемблерных вставок длл с перехваченными send и recv
5 l2phx.3.5.33.174 для просмотра трафика
Начал с пакета движения.
В валкере есть несколько мест в которых формируется данный пакет , например, в обработчиках карты и скриптов. Исходя из этого есть смысл исправлять пакет когда он полностью сформирован и готов к отправке.
Этот код вызывается валкером после формирования паета на отправку, здесь происходит вызов send в Engine.dll клиента:
P.S. правку трафика пакетхаком и подобными программами не предлагать по совокупности причин.
заебёшься ты имхо другими способами...
Да и проблемных мест у валкера было не мало, не знаю как счас, но не думаю что стало сильно лучше.
А ошибка скорее всего либо в том что неверное соглашение о передаче параметров и очищении стека используешь, либо регистр ECX затираешь, а там указатель на объект наверняка лежит какойнить. Скорее всего второе.
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Последний раз редактировалось xkor, 13.06.2012 в 20:36.
соглашение вызова "вырезано" прыжком в +3 от начала функции.
в ecx действительно были какие-то нужные данные, поменял на eax, в который сразу при переходе в engine пишется значение.
все равно крит
подозреваю стек.
но очень сильно сомневаюсь...
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Раз заводите лишнюю локальную переменную, убедитесь, что кадр стека нормально открывается в Волкере и закрывается в send.
И, как указал xkor, в программах, использующих thiscall процедуры следует побережнее относиться к ecx, особенно учитывая, что в данном случае можно было обойтись:
cmp dword [esp+0x0c], 0x0f
А, у Вас это видимо не локальные переменные, а аргументы функции, если я правильно понимаю, что в fixMove1 и 2 хранятся прежний ebp и адрес возврата. Тогда нужно смотреть на функцию, из которой хук был вызван, чтобы в ней стек был сбалансирован.
Последний раз редактировалось qwm, 14.06.2012 в 00:14.
Пакет отправляется правильно, сервер на него отвечает, но сразу вылетает крит клиента с ошибкой где-то в недрах валкера..
Что я делаю не так?
Добавляя новый параметр ты тем самым портишь стек, после выхода из ф-ии он восстанавливает только для своих параметров, а твой так и останется. Следовательно и крит.
Цитата:
какие еще баги есть? (что бы такого "пофиксить"? )
Можешь пофиксить экшн с нулевым параметром. Когда включаешь дальнюю атаку скилом и есть преграда, в момент обхода ее может случайным образом проскочить ноль в экшене, следовательно будет дисконнект.
Последний раз редактировалось pcoder, 16.06.2012 в 07:39.
может кто в курсе каким образом L2Walker.exe внедряет L2Walker.dll в процесс игры?
запускает l2.exe с помощью CreateProcessW (suspended), а дальше.... я уже запарился дебажить...
мне это нужно чтобы корректно получить хэндл L2Walker.dll в памяти процесса.
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Что значит, "корректно получить хэндл"? Это же даже не хендл в полном смысле этого слова, и к объектам ядра никакого отношения не имеет. Просто адрес базы. Снапшотами получить - самое простое.