Вернуться   CoderX :: Forums > Основные форумы > Полезности
Войти через OpenID

Полезности Исключительно для полезных тем из других разделов.
Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 27.01.2010, 03:53   #1
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 50
Сказал Спасибо: 10
Имеет 10 спасибок в 1 сообщении
murc пока неопределено
По умолчанию

может тогда проще DispatchNetworkQueue хукнуть, подменив указатели на выходе ?
murc вне форума   Ответить с цитированием
Старый 27.01.2010, 14:38   #2
Рыцарь
 
Аватар для destructor
 
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
destructor на пути к лучшему
По умолчанию

а волкер делает так: хукает на WSAAsyncSelect()... а дальше стратегическая тайна.

Добавлено через 48 секунд
Цитата:
Сообщение от murc Посмотреть сообщение
может тогда проще DispatchNetworkQueue хукнуть, подменив указатели на выходе ?
тогда теряем оригинальные пакеты?
__________________
Шожиделать.. ботить хочется..

Последний раз редактировалось destructor, 27.01.2010 в 14:38. Причина: Добавлено сообщение
destructor вне форума   Ответить с цитированием
Старый 27.01.2010, 19:00   #3
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 50
Сказал Спасибо: 10
Имеет 10 спасибок в 1 сообщении
murc пока неопределено
По умолчанию

Причем тут WSAAsyncSelect() и AddNetworkQueue ?

Теоретически (для Интерлюдии)
call DispatchNetworkQueue@UNetworkHandler
в [edi] - адрес структуры TNetworkPacket
меняем на свое, вуаля читем что состряпали
Теоретически все должно пройти норм.

Upd Попробовал вчера подменить в тике клиента когда DispatchNetworkQueue возвращает ноль.. access violation гдето в обработчике пакета, дальше стало лень..

Последний раз редактировалось murc, 28.01.2010 в 12:52.
murc вне форума   Ответить с цитированием
Старый 28.01.2010, 04:53   #4
Пользователь
 
Аватар для Maxno
 
Регистрация: 26.05.2009
Сообщений: 70
Сказал Спасибо: 32
Имеет 13 спасибок в 10 сообщенях
Maxno пока неопределено
Смущение Странно как то...

народ... вот есть список функций в dll в оригинале.. но как мне получить список функций уже с дампа... т.е. если вот xkor приводил пример перехвата функции "UNetworkHandler::AddNetworkQueue"... она выглядит как "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPa cket@@@Z".. как получить?

ЗЫ: список функций взят от Gracia Final Epilogue (Plus)
Вложения
Тип файла: rar asterios-список функций core_engine_fire_nwindow.dll.rar (56.9 Кб, 231 просмотров)
__________________
Home site - www.xmlex.ru
Maxno вне форума   Ответить с цитированием
Старый 28.01.2010, 09:32   #5
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Maxno, список экспортируемых функций у дампа и у оригинальной длл одинаковый
UNetworkHandler::AddNetworkQueue - название функции как оно выглядит до компиляции внутри исходников
?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPa cket@@@Z - название функции как оно выглядит в экспорте длл, открываешь длл любым РЕ вьювером и смотришь экспорт...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 29.01.2010, 12:30   #6
Новичок
 
Регистрация: 29.01.2010
Сообщений: 7
Сказал Спасибо: 1
Имеет 3 спасибок в 2 сообщенях
ra1n0 пока неопределено
По умолчанию

чтобы перевести ?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPa cket@@@Z в более читабельный вид(прим. UNetworkHandler::AddNetworkQueue) ,можно воспользоваться undname.exe
поставляемой в комплексе с VS.
ra1n0 вне форума   Ответить с цитированием
За это сообщение ra1n0 нажился спасибкой от:
Старый 05.02.2010, 19:46   #7
Пользователь
 
Регистрация: 23.03.2009
Сообщений: 50
Сказал Спасибо: 10
Имеет 10 спасибок в 1 сообщении
murc пока неопределено
По умолчанию

Продолжая тему про AddNetworkQueue, хочу поделится своими наработками, может кому-нибуть будут полезными ...

Что бы добавить свой пакет в массив, нужно выделить память, но просто выделить мало, нужно выделить где-то внутри ла2. Для выделения памяти я юзал ф-ию "L2MemoryAlloc", ее можно легко найти, она находится рядом с AddNetworkQueue. Выглядит она следующим образом:
Код:
L2MemoryAlloc(cmd: PWideChar; Len: integer): Pointer;
В качестве параметров используются строки "NetCmd", "NetPacket" и размер. Строки указывают для чего резервируется память и выделяется в соответствующем месте. Вообще выделение памяти здесь звучит довольно не корректно, т.к выделения памяти по сути происходит не всегда и зависит от аргументов. Стоит еще отметить то, что вызывать нужно поразному для конкретного аргумента(cmd), не знаю с чем это связано, но при вызове ф-ии в регистрах должно быть то, что должно быть, иначе будет ошибка. Для выделения памяти под сам пакет и под структуру NetworkPacket, которую в дальнейшем мы будем добавлять, я юзал такие ф-ии:
Код:
function L2MemoryAllocNetCmd(len: integer): Pointer; stdcall;
asm
  push NetCmd
  push len
  mov edx, [$01E6D6A4]
  mov ecx, [edx]
  mov edx, [ecx]
  mov eax, [edx]
  call eax
end;

function L2MemoryAllocNetPacket: Pointer; stdcall;
asm
  push NetPacket
  push $0C
  mov edx, [$01E6D6A4]
  mov ecx, [edx]
  mov eax, [ecx]
  mov edx, [eax]
  call edx
end;
Вообще это копипаст из клиента и адресс 01E6D6A4 будет действителен только для конкретных хроник - ИТ, найти в другом клиенте не должно вызвать проблем.
В первом случае мы выделяем память, куда положим свой пакет без его длинны, ID и если есть то и SubID. Во втором под структуру NetworkPacket. Заполняем и вызываем примерно таким образом:
Код:
procedure AddNetworkQueue(NetworkPacket: PNetworkPacket); stdcall;
asm
  mov ecx, [$00BFF558] - UNetworkHandler
  mov edx, [ecx]
  mov eax, [edx+$84]
  push NetworkPacket
  call eax
end;
Проверялось на Интерлюдии, должно работать везде впринципе. Самое главное выделить память без ошибок.

Последний раз редактировалось murc, 20.02.2010 в 13:49.
murc вне форума   Ответить с цитированием
За это сообщение murc нажился 10 спасибками от:
Старый 05.02.2010, 22:22   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

murc, думаю клиенту при вызве этих функций важно лишь содержимое ecx, ибо по соглашению thiscall там должен быть указатель на объект которому принадлежит метод, а остальные регистры по идее не обязаны содержать то что содержат)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 10.05.2010, 15:03   #9
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Товарищи, вы получив какие то данные из процесса l2 оперируете ими прямо в рамках внедренной dll или какимто макаром шлете основной программе (через sendmessage или по сети)? Ведь на внедряемый код наложено очень много ограничений. Вот цитата из статье с WASMа:

"Компилятор Delphi обычно генерирует в процедурах короткие переходы (JMP SHORT), но при большом размере процедуры могут появиться переходы по абсолютным адресам, поэтому внедряемый код желательно писать используя короткие процедуры, используя как можно меньше условий и циклов."

Как можно быть уверенным что что все переходы делфи сделала "короткими".
Так же как отлаживать внедренную dll? Как хотябы ее выгрузить из памяти процесса что бы я ее мог перекомпилировать и внедритль наново?
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 10.05.2010, 15:09   #10
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
GoldFinch пока неопределено
По умолчанию

Yegor, эта цитата относится только к тем длл которые были внедрены в чужой процесс своим кривым загрузчиком. Если загружать длл через LoadLibrary или нормальным загрузчиком таких проблем нет.
Отлаживать - так же как и клиент =)
Чтобы выгрузить - пиши код который выгрузит %)
GoldFinch вне форума   Ответить с цитированием
За это сообщение GoldFinch нажился спасибкой от:
Ответ

  CoderX :: Forums > Основные форумы > Полезности



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:35.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!