PDA

Просмотр полной версии : фиксы IG Walker


Elecktron
13.06.2012, 18:12
Надумал я пофиксить валкер чтобы можно было спокойно ботить и не париться что он "палевный".

Насколько мне известно проблемные места это:
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 клиента:

01DCEB40 A1 D88EEE01 MOV EAX, DWORD PTR DS:[1EE8ED8]
01DCEB45 8B00 MOV EAX, DWORD PTR DS:[EAX]
01DCEB47 8B40 48 MOV EAX, DWORD PTR DS:[EAX+48]
01DCEB4A 894424 04 MOV DWORD PTR SS:[ESP+4], EAX
01DCEB4E - FF25 D48EEE01 JMP DWORD PTR DS:[1EE8ED4] ; Engine.00765470




P.S. правку трафика пакетхаком и подобными программами не предлагать по совокупности причин.

xkor
13.06.2012, 20:32
P.S. правку трафика пакетхаком и подобными программами не предлагать по совокупности причин.заебёшься ты имхо другими способами...
Да и проблемных мест у валкера было не мало, не знаю как счас, но не думаю что стало сильно лучше.

А ошибка скорее всего либо в том что неверное соглашение о передаче параметров и очищении стека используешь, либо регистр ECX затираешь, а там указатель на объект наверняка лежит какойнить. Скорее всего второе.

Elecktron
13.06.2012, 23:55
соглашение вызова "вырезано" прыжком в +3 от начала функции.
в ecx действительно были какие-то нужные данные, поменял на eax, в который сразу при переходе в engine пишется значение.
все равно крит :(
подозреваю стек.
но очень сильно сомневаюсь...

qwm
14.06.2012, 00:08
Раз заводите лишнюю локальную переменную, убедитесь, что кадр стека нормально открывается в Волкере и закрывается в send.
И, как указал xkor, в программах, использующих thiscall процедуры следует побережнее относиться к ecx, особенно учитывая, что в данном случае можно было обойтись:
cmp dword [esp+0x0c], 0x0f

А, у Вас это видимо не локальные переменные, а аргументы функции, если я правильно понимаю, что в fixMove1 и 2 хранятся прежний ebp и адрес возврата. Тогда нужно смотреть на функцию, из которой хук был вызван, чтобы в ней стек был сбалансирован.

Elecktron
14.06.2012, 07:14
фикс GM list. рабочий.

cmp dword [esp+0x0c], 0x8B
jz @fixGM
jmp DWORD PTR sendEngine
@fixGM:
pop eax
jmp eax


Добавлено через 2 минуты

cmp dword [esp+0x0c], 0x0f

спасибо за подсказку

Добавлено через 4 часа 41 минуту
мне удалось заменить реализацию пакета МТЛ своей функцией. теперь бегает как положено и "без палева" :)

Добавлено через 1 час 1 минуту
по пункту 3 - посмотрел пакеты, все отправляет...
чем валкеру не нравятся диалоги? что там с хтмл не так как надо?

какие еще баги есть? (что бы такого "пофиксить"? :))

alexteam
14.06.2012, 20:25
чем валкеру не нравятся диалоги? что там с хтмл не так как надо?
новые теги.

Elecktron
15.06.2012, 13:38
новые теги.

странно. как-то они "выборочно" новые...

половина квеста на тт бижу работает, вторая нет. даже в скриптмейкере не видит (про выполнение вообще молчу...)

при этом нормально телепортируется, покупает-продает...

pcoder
16.06.2012, 07:33
Пакет отправляется правильно, сервер на него отвечает, но сразу вылетает крит клиента с ошибкой где-то в недрах валкера.. :(

Что я делаю не так?



Добавляя новый параметр ты тем самым портишь стек, после выхода из ф-ии он восстанавливает только для своих параметров, а твой так и останется. Следовательно и крит.


какие еще баги есть? (что бы такого "пофиксить"? )
Можешь пофиксить экшн с нулевым параметром. Когда включаешь дальнюю атаку скилом и есть преграда, в момент обхода ее может случайным образом проскочить ноль в экшене, следовательно будет дисконнект.

Elecktron
19.06.2012, 01:57
может кто в курсе каким образом L2Walker.exe внедряет L2Walker.dll в процесс игры?
запускает l2.exe с помощью CreateProcessW (suspended), а дальше.... я уже запарился дебажить... :(
мне это нужно чтобы корректно получить хэндл L2Walker.dll в памяти процесса.

qwm
19.06.2012, 07:12
Что значит, "корректно получить хэндл"? Это же даже не хендл в полном смысле этого слова, и к объектам ядра никакого отношения не имеет. Просто адрес базы. Снапшотами получить - самое простое.

Elecktron
19.06.2012, 15:08
Что значит, "корректно получить хэндл"?

L2Walker = (DWORD) GetModuleHandle("L2Walker.dll");

Снапшотами получить - самое простое.

а это как?

я работаю внутри процесса в который внедряется валкер, но GetModuleHandle не возвращает требуемого значения, потому как L2Walker.dll не имеет явной загрузки (только внедрение) и соответственно процесс совершенно не в курсе что это и как называется :(
но он там есть, более того если дебаггером подцепиться к запущенному процессу и поставить бряк на сенде в энджине то можно найти код L2Walker.dll по адресу возврата в стеке... но при этом в списке модулей L2Walker.dll нет! и его код не имеет имени... :(

qwm
19.06.2012, 16:45
Т.е. он не грузит длл, а копирует её туда и передаёт управление?
Тогда велика вероятность, что эта длл расположена в подопытном процессе по тем же адресам, что и в самом l2walker, т.к. далеко не все любят самостоятельно править релоки.
Либо можно попытаться по сигнатуре PE-хедера найти в хипе.

Elecktron
19.06.2012, 19:09
есть подозрение что он у себя не грузит длл, а только "запихивает" в л2..
при запуске в ольке в исполняемых модулях есть только L2Walker.exe.
либо же он ее качественно прячет...

если удалить из папки валкера его длл, то он ругается на ее отсутствие при запуске и при старте клиента.. но все запускается. естественно клиент чистый..

можно попытаться по сигнатуре PE-хедера найти в хипе.

что такое хип? (гугль выдает отвлеченные результаты, или же я не знаю как спросить)

xkor
19.06.2012, 19:44
что такое хип? (гугль выдает отвлеченные результаты, или же я не знаю как спросить)heap - куча)

pcoder
20.06.2012, 06:41
Elecktron, Не проще ли самому загрузить dll бота? Родной загрузчик Валкера скорее всего прячет себя из PEb'a потому простым способом не получится получить хэндл длл.

Elecktron
20.06.2012, 10:48
Elecktron, Не проще ли самому загрузить dll бота? Родной загрузчик Валкера скорее всего прячет себя из PEb'a потому простым способом не получится получить хэндл длл.

прикручивал к engine.dll добавив в таблицу импорта функцию из валкера.
работает. пофиксил пакет движения и GMlist.
но есть одно маленькое "но". он очень забавно выглядит:
2703
язык выбирает лоадер. как - я так и не разобрался...
а также не подгружается карта (real map) и глючат настройки (из замеченного - подбирает весь дроп: указаны только определенные хербы, адена и ресурсы)


heap - куча)

Семен Семеныч! (с)
совсем на работе голову заморочили :(

Elecktron
30.07.2012, 08:35
фтопку ловлю валкер.длл по просторам процесса ладвы :)

все решается намного проще - перехватываем сенд, и смотрим какой пакет в стеке (id), если гмлист - делаем ретурн, если мтл - копируем значения в свои переменные, вызываем свой мтл, выравниваем стек и ретурн


Можешь пофиксить экшн с нулевым параметром. Когда включаешь дальнюю атаку скилом и есть преграда, в момент обхода ее может случайным образом проскочить ноль в экшене, следовательно будет дисконнект.
у меня не получилось повторить...
все вполне корректно...