PDA

Просмотр полной версии : Ктонить клиент ковырял или тольк пакеты ловите?


GoldFinch
03.11.2008, 22:01
сабж.

Breadfan
04.11.2008, 15:17
Я, а дальше то что

GoldFinch
04.11.2008, 22:50
а я ищу вдруг кто придумал как апи клиента юзать заместо того чтобы пакеты ловить

dmitry501
05.11.2008, 09:11
У тебя конкретные наработки то есть? Я читал твои посты на PP и так и не понял. Ты можешь использовать из внешней программы функции engine.dll например как ты хотел say2? Получать пакты из клиента я могу, а вот отправлять нет.

GoldFinch
09.11.2008, 02:32
Из "внешней программы" невозможно впринципе, функции надо вызывать из адресного пространства клиента.

Скрин конкретной наработки:
http://s1.dump.ru/viewer/preview/biggest/1195607.jpg (http://dump.ru/file/1195607)
Перехватывает пакет хукая UGameEngine::OnSay2()
Отправляет пакет с Say2 через UNetworkHandler::Say2()
Код совместим со всеми клиентами имеющими те же имена экспортов в engine.dll и core.dll, т.е. не используются статические адреса и другие константы.

xkor
09.11.2008, 03:30
Скрин конкретной наработки:я слепой или скрин надо в воображении смотреть?)
ЗЫ хотя хз нафиг тут скрин...

ЗЗЫ надо ещё понять какие параметры и каким образом эти функции используют...

хм, скрин появился

dmitry501
09.11.2008, 15:51
А кинуть исходник можешь? Хотябы в личку?

GoldFinch
11.11.2008, 02:59
Сорцы в аттаче.
Код оформлен в виде дллки которую надо подключить к клиенту. Для удобства добавлена прога которая цепляет дллку к l2.exe.
Язык - фасм+макросы.
Тестил на C6, должно работать и на других клиентах.

Sherman
11.11.2008, 19:27
Тестил на C6, должно работать и на других клиентах.

C4
Различие для С4
Engine.dll
?Init@UNetworkHandler@@UAEXHPAVUGameEngine@@@Z
в С4
?Init@UNetworkHandler@@UAEXHPAVFL2NetNotify@@@Z
Core.dll
??0L2ParamStack@@QAE@H@Z
в С4
??0L2ParamStack@@QAE@AAV0@@Z находится в Engine.dll

?PushBack@L2ParamStack@@QAEHPAX@Z
в C4
?PushBack@L2ParamStack@@QAEHPAX@Z находится в Engine.dll

?Top@L2ParamStack@@QAEPAXXZ
в С4
?Top@L2ParamStack@@QAEPAXXZ находится в Engine.dll

??1L2ParamStack@@QAE@XZ
в С4
??1L2ParamStack@@QAE@XZ находится в Engine.dll

Интересует перевод использования экспортируемых ф-ций на Delphi :(

GoldFinch
11.11.2008, 19:50
Хз насколько актуален С4, однако переделать импорты или генерить импорты в инсталлере не проблема.
Кроме того используемый метод импорта и перехвата не совершенен, в идеале инсталлер должен анализировать клиент и настраивать (генерить) под него дллку.

Перенос под делфи делается так:
Импортируются функции, статически или динамически.
Т.к. делфи не поддерживает __thiscall , под каждую функцию пишется асм-переходник который либо записывает в ecx адрес глобального объекта, либо записывает в ecx 1й аргумент и перестраивает стек.
В 1м случае (с глобальными адресами) - функции вызываются как обычные stdcall, во 2м либо как объекты (нужно описать соотв классы) либо как простые функции.

ЗЫ: как это ни странно, переносить под С++ сложнее чем под делфи изза идиотской строгой типизации, через жопу реализованного импорта, кривого манглинга, и прочих радостей %) Вобщем хотел изначально переписать на сях, пока не получилось.

Sherman
12.11.2008, 16:14
Почитал про thiscall, в общих чертах понял проблему Дельфи.
Меня больше интересует инъект в работающий процесс.
Начал изучать С4 Engine.dll наткнулся на такую экспортируемую ф-цию:

003552A4 .text Export UNetworkHandler::~UNetworkHandler

Есть предположение, что эта ф-ция возвращает указатель на объект
UNetworkHandler который как раз можно использовать, передавая в ECX

Попробую поэкспериментировать с вызовом функций из своей инЪектной дллки. О результатах отпишу.

ЗЫ:
Эх, надо было меньше пить пива когда сверстники проходили ассемблер :)
У меня с Dmitry501 один интерес в принципе - отправка.

GoldFinch
12.11.2008, 18:11
UNetworkHandler::~UNetworkHandler -это деструктор.
Получить указатель на объект ты можешь только перехватив один из его методов, например конструктор, или найдя этот указатель в данных (неудобно, т.к. статический адрес)

Sherman
12.11.2008, 20:06
UNetworkHandler::~UNetworkHandler -это деструктор.
Получить указатель на объект ты можешь только перехватив один из его методов, например конструктор, или найдя этот указатель в данных (неудобно, т.к. статический адрес)

+1
Я к тому же выводу сейчас пришел

GoldFinch
23.11.2008, 22:13
скрин еще 1 разработки
http://s1.dump.ru/viewer/preview/biggest/1242046.gif (http://dump.ru/file/1242046)
пока что это еще даже не альфа, так что сорцов не выкладываю

для сравнения - родной радар абисса
http://www.theabyss.ru/images/bsfg/tactical_map.jpg

xkor
23.11.2008, 23:34
GoldFinch, ты бы это.., количество цветов не сокращал бы так а то непойми что на скрине...

Добавлено через 31 секунду
GoldFinch, какие кста функции для этого перехватывал если не секрет?)

GoldFinch
24.11.2008, 01:03
xkor, там цветом раса показывается, а скрин в столице ДЕ поэтому там виден тольк 1 цвет для ДЕ, и цвет нпс, которых я еще не отфильтровал)


а перехваты там стоят на
возврат из FPlayerSceneNode::Render, для отрисовки
начало ALineagePlayerController::PlayerCalcView, для получения направления взгляда
начало обработчика CharInfoPacket (id=4), для получения id игрока и указателя на UNetworkHandler

mira
20.08.2010, 12:08
тоже надо попробывать хукнуть сцену клиента. Пока хукаю директ-х подменяя d3dcreate в d3ddrive.dll и подсоввывая врапперы для вытекающих интерфейсов. Рисовать апи директа кодоемко и требует навыков но плюс тоже есть.
Директ один на всех а на dx10+ без поддржки 9 линейка имхо не скоро перейдет

maxilam
05.06.2011, 02:16
Как опытный некропостер, поднимаю тему )))

Пытаюсь ходить персом вызывая функцию MoveBackwardToLocation(to,origin: TVector). В ответ получаю ответ сервера ActionFailed.
Через снифер видно, что клиент отсылает в пакете MoveBackwardToLocation третий параметр 0 или 1 (каким способом инициировано движение: 0 - клава, 1 - мышь).
При моем вызове функции MoveBackwardToLocation(to,origin: TVector) третьего параметра в пакете просто нет.
Хочу спросить, может кто нибудь уже сталкивался с такой проблемой при использовании апи клиента? И как ее можно обойти?

Добавлено через 4 часа 38 минут
отвечу на свой вопрос:
Клиент не использует функцию MoveBackwardToLocation. (проверяю на хрониках Грация+). Вместо нее используется функция MTL.
*ушел ковырят функцию MTL

supernewbie
05.06.2011, 03:08
а сенд пакет вызывать не тру да

maxilam
05.06.2011, 03:30
я пишу бота используя только апи клиента, без перехвата пакетов

Morfik
05.06.2011, 14:15
Как опытный некропостер, поднимаю тему )))

Пытаюсь ходить персом вызывая функцию MoveBackwardToLocation(to,origin: TVector). В ответ получаю ответ сервера ActionFailed.
Через снифер видно, что клиент отсылает в пакете MoveBackwardToLocation третий параметр 0 или 1 (каким способом инициировано движение: 0 - клава, 1 - мышь).
При моем вызове функции MoveBackwardToLocation(to,origin: TVector) третьего параметра в пакете просто нет.
Хочу спросить, может кто нибудь уже сталкивался с такой проблемой при использовании апи клиента? И как ее можно обойти?

Добавлено через 4 часа 38 минут
отвечу на свой вопрос:
Клиент не использует функцию MoveBackwardToLocation. (проверяю на хрониках Грация+). Вместо нее используется функция MTL.
*ушел ковырят функцию MTL
как находишь текущие координаты перса? если не секрет канешна

SeregaZ
05.06.2011, 15:04
спамить команду /loc и читать что приходит в чат? :)

Эдвадко
05.06.2011, 16:22
Че это не используется ?
Клинет шлет запрос чтоб идти - MoveBackwardToLocation
А сервер в ответ - мол вы пошли - MoveToLocation

--MoveBackwardToLocation F 136838 -55545 -3480 135819 -54512 -3201 1 203D7B90 7FBA0000 20518674 11
MoveToLocation 4810D81C(Ботанка) 135849,-54542,-3192 -> 136838,-55545,-3480
MagicSkillUse 483126C8(Sharpening) Заряд Души: Ранг A > 483126C8(Sharpening)
MoveToLocation 4810D15B(Scaltro) 138382,-54466,-3112 -> 138420,-55056,-3195
StatusUpdate 48314884(Буйвол) 1 9=6743818

maxilam
05.06.2011, 18:43
как находишь текущие координаты перса? если не секрет канешна
Хук на функцию OnUserInfo - получаю ID, имя, начальные координаты и прочие данные своего чара. Обрабатываю только один раз, самый первый. А то потом приходят в нее левые чары )
Далее: хуки на OnMoveToLocation OnMoveToPawn OnTeleportToLocation OnMoveToActor (по мимо координат, в них приходит структура User с ID чара, по которому определяется какой именно чар совершил действие).
А именно текущие координаты в данный момент времени, для отрисовки карты, рассчитываю по формуле. Там правда нужна текущая скорость передвижения чара, но я ее не стал искать, просто взял за среднюю 130, а там уже положение чара корректируется функциями OnMoveTo...

Че это не используется ?
Клинет шлет запрос чтоб идти - MoveBackwardToLocation
А сервер в ответ - мол вы пошли - MoveToLocation
Пакет с таким названием, да, шлется. Но в апи клиента есть еще функция с таким названием. Вот про нее я и говорил, что она не используется.

mira
10.01.2012, 15:06
Float это радиус в котором ловить таргет. Int это оид перса выбраного перед этим. Если указывать 0 (или -1 непомню) то будет выберать всегда 1го.

Добавлено через 6 минут
Если в функцию передать оид из результата прошлово вызова то вернет следующий обьект с точки зрения клиента в указаном радиусе.

я както модифицировал работу так что при нажатии нексттаргета выбирались цели по цепочке - кардиналы>ева сайнты>шилки>дамагеры

Добавлено через 1 час 11 минут
Господа, помогите пжл. при нажатии на кнопку или как там отловить нажатие клавиши, TranslateMessage вешает клиент((( или где там вваливает в стек float 200.00

это ващенипанятно че спросил)

aleksik076
20.06.2012, 19:17
Спасибо за интересную информацию!

GlElf
08.07.2013, 20:04
Примером хука на delphi никто не может поделиться? :blush:

Albert25cm
24.05.2023, 16:24
Интересно, но....