PDA

Просмотр полной версии : хуки, ддлки...


Elecktron
27.10.2011, 23:53
перечитал всю тему о "радаре" - http://coderx.ru/showthread.php?t=1077
изучил "хуки" - http://coderx.ru/showthread.php?t=3609
возникли вопросы..
ну хорошо. допустим я перечитав весь форум, и не только этот, полностью разберусь с перехватом фукций и их обработкой.
и даже напишу свою длл.
отлично. а как мне объяснить клиенту л2 что вот эту мою длл надо подгрузить и использовать?
а еще лучше было бы не длл, а приложение, которое подключается к процессу. как тот чат.

хотелось бы пример как подгрузить/перехватить (действующий пример - предел мечтаний) в идеале на с++ билдере, на крайняк делфи..

зы: предвидя вопросы - на офф сервере не играю, для экспериментов на компе стоит джава с4.

xkor
28.10.2011, 00:05
Elecktron, помойму тема внедрения обсосана не многим хуже чем перехвата...

ALF
30.10.2011, 23:24
перечитал всю тему о "радаре" - http://coderx.ru/showthread.php?t=1077
изучил "хуки" - http://coderx.ru/showthread.php?t=3609
возникли вопросы..
ну хорошо. допустим я перечитав весь форум, и не только этот, полностью разберусь с перехватом фукций и их обработкой.
и даже напишу свою длл.
отлично. а как мне объяснить клиенту л2 что вот эту мою длл надо подгрузить и использовать?
а еще лучше было бы не длл, а приложение, которое подключается к процессу. как тот чат.

хотелось бы пример как подгрузить/перехватить (действующий пример - предел мечтаний) в идеале на с++ билдере, на крайняк делфи..

зы: предвидя вопросы - на офф сервере не играю, для экспериментов на компе стоит джава с4.

Качаем LordPE Delux
Запускаем её
нажимаем PE Editor
Выбираем там клиентскую ДЛЛ-ку (я раньше выбирал всегда fire.dll, сейчас просто пишу DSETUP.dll с тему функциями что в оригинале)
жмем Directories затем Import Table "..."
при нажатии на три точки откроется таблица импорта длл-ки
Туда можно как добавить импорт так и удалить
что бы добавить в списке импорта нажимаем правую кнопку мыши и добавляем импорт на вашу дллку
"Add import"
откроется окно добавления
в первой строке пишем имя длл - например "hook.dll"
во второй импортируемый модуль, например "myfunc" или же "DllEntryPoint"
нажимаем "+" и всё сохраняем...
Если все сделал правильно - будет работать

Elecktron
31.10.2011, 19:52
спасибо.
то есть не принципиально к какой длл привязывать свою?

хмм... с DSETUP.dll хорошая идея!
а где взять исходник оригинальной DSETUP, гугль с наскока на ответил :(

вопросов меньше не становится:

int* DispatchNetworkQueuePtrPtr=(int*)(hEngine+(0x00361 B44-0x00361B4D));
не ясен синтаксис выделенного..
взято из темы - http://coderx.ru/showthread.php?t=1835

как впихнуть GUI в написанную мной длл?
например типа как в иг валкере.

alexteam
31.10.2011, 20:50
спасибо.
то есть не принципиально к какой длл привязывать свою?
подгружается все что в импорте. а так же то что в импорте у того что импортируем.

int* DispatchNetworkQueuePtrPtr=(int*)(hEngine+(0x00361 B44-0x00361B4D));
равнозначно
int* DispatchNetworkQueuePtrPtr=(int*)(hEngine - 9);

как впихнуть GUI в написанную мной длл?
так же как и не в длл.

Elecktron
31.10.2011, 21:35
подгружается все что в импорте. а так же то что в импорте у того что импортируем.

ага. теперь ясно.


int* DispatchNetworkQueuePtrPtr=(int*)(hEngine - 9);


я допустил ошибку - вставил копаный мною кусок кода
вот то что было изначально:

int* DispatchNetworkQueuePtrPtr=(int*)(hEngine+(0x0201D 4B0-0x01B80000));

то есть это обыкновенное вычитание?
а какой смысл писать именно так?


так же как и не в длл.

не разобрался... :confused:

alexteam
31.10.2011, 21:52
то есть это обыкновенное вычитание?
а какой смысл писать именно так?
удобнее читать\менять.

Elecktron
31.10.2011, 22:15
удобнее читать\менять.

эмм... чет я совсем запутался.... :o

насколько я понял - это адрес оригинальной функции.
вопрос: где его взять?
это оно:
Names in Engine, item 7606
Address = 00361B44
Section = .text
Type = Export
Name = ?DispatchNetworkQueue@UNetworkHandler@@UAEHPAPAUNe tworkPacket@@@Z
Comments = Ordinal = #3587

destructor
01.11.2011, 12:05
тут
изучил "хуки" - http://coderx.ru/showthread.php?t=3609
и тут
взято из темы - http://coderx.ru/showthread.php?t=1835
"разные" хуки

ALF
01.11.2011, 12:37
спасибо.
int* DispatchNetworkQueuePtrPtr=(int*)(hEngine+(0x00361 B44-0x00361B4D));
не ясен синтаксис выделенного..
взято из темы - http://coderx.ru/showthread.php?t=1835

Это указатель на функцию DispatchNetworkQueue. Но это "ХардКодинг"
Если функция экспортируемая то намного проще сделать так

....
static char * nDispatchNetworkQueue = "?DispatchNetworkQueue@UNetworkHandler@@UAEHPAPAUNe tworkPacket@@@Z";
.....
void __cdecl ( * DispatchNetworkQueue)(NetworkPacket * *);
.....
hEngine = GetModuleHandle("engine.dll");
(FARPROC &)DispatchNetworkQueue = GetProcAddress(hEngine, nDispatchNetworkQueue);



Ммм насчет DSETUP.DLL
//================================================== ============================
int __stdcall DirectXDeviceDriverSetupA() { return 0;}
int __stdcall DirectXDeviceDriverSetupW() { return 0;}
int __stdcall DirectXRegisterApplicationA() { return 0;}
int __stdcall DirectXRegisterApplicationW() { return 0;}
int __stdcall DirectXSetupA() { return 0;}
int __stdcall DirectXSetupIsJapan() { return 0;}
int __stdcall DirectXSetupIsJapanNec() { return 0;}
int __stdcall DirectXSetupW() { return 0;}
int __stdcall DirectXUnRegisterApplication() { return 0;}
int __stdcall DirectXSetupSetCallback() { return 0;}
int __stdcall DirectXSetupGetVersion() { return 0;}
int __stdcall DirectXSetupCallback() { return 0;}
int __stdcall DirectXSetupGetFileVersion() { return 0;}
int __stdcall DirectXLoadString() { return 0;}
int __stdcall DirectXSetupIsEng() { return 0;}
int __stdcall DirectXSetupShowEULA() { return 0;}
int __stdcall DirectXSetupGetEULAA() { return 0;}
int __stdcall DirectXSetupGetEULAW() { return 0;}
//================================================== ============================

Elecktron
01.11.2011, 20:07
хардкодинг меня абсолютно не пугает - без него, насколько я понял, не обойтись - функция sendpacket не экспортируемая...


Ммм насчет DSETUP.DLL
//================================================== ============================
int __stdcall DirectXDeviceDriverSetupA() { return 0;}
...
int __stdcall DirectXSetupGetEULAW() { return 0;}
//================================================== ============================

они у меня не появляются в таблице экспорта...
клиент при запуске начинает ругаться:
"порядковый номер 11 не найден в библиотеке DLL DSETUP.DLL."
что я делаю не так? :confused:

upd:
пересобрал подругому.
но всеравно не работает.
экспорт получился в формате @DirectXDeviceDriverSetupA$qqsv
а нужно DirectXDeviceDriverSetupA
более того, насколько я понял, клиент л2 вызывает их не по имени, а по номеру... или я ошибся?
копаю дальше...

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

"разные" хуки

то что они разные я усвоил сразу...
но полностью принципа их работы не понял..

xkor
01.11.2011, 22:24
"порядковый номер 11 не найден в библиотеке DLL DSETUP.DLL."
что я делаю не так? а ты номера экспортируемым функция назначил такие же как в оригинальной длл?

Elecktron
01.11.2011, 22:28
а ты номера экспортируемым функция назначил такие же как в оригинальной длл?

да. смотрел через CFF Explorer.
upd: стоп. я им номера не назначал. они идут в том порядке как и в оригинальном файле...

после того как переписал код таким образом чтобы эти функции экспортировались - клиент просто критует с ошибкой No Video.
компилятор искажает имена функций.
экспорт получился в формате @DirectXDeviceDriverSetupA$qqsv
а нужно DirectXDeviceDriverSetupA
скорее всего я неправильно объявляю экспорт...

использую C++Builder 6

xkor
01.11.2011, 23:26
скорее всего я неправильно объявляю экспорт...надо через def файл объявлять, ну и номера выставлять явно

ALF
02.11.2011, 03:24
#ifndef _DSETUPDLL_
#define _DSETUPDLL_
extern "C"
{
int __declspec(dllexport) __stdcall DirectXDeviceDriverSetupA();
int __declspec(dllexport) __stdcall DirectXDeviceDriverSetupW();
int __declspec(dllexport) __stdcall DirectXRegisterApplicationA();
int __declspec(dllexport) __stdcall DirectXRegisterApplicationW();
int __declspec(dllexport) __stdcall DirectXSetupA();
int __declspec(dllexport) __stdcall DirectXSetupIsJapan();
int __declspec(dllexport) __stdcall DirectXSetupIsJapanNec();
int __declspec(dllexport) __stdcall DirectXSetupW();
int __declspec(dllexport) __stdcall DirectXUnRegisterApplication();
int __declspec(dllexport) __stdcall DirectXSetupSetCallback();
int __declspec(dllexport) __stdcall DirectXSetupGetVersion();
int __declspec(dllexport) __stdcall DirectXSetupCallback();
int __declspec(dllexport) __stdcall DirectXSetupGetFileVersion();
int __declspec(dllexport) __stdcall DirectXLoadString();
int __declspec(dllexport) __stdcall DirectXSetupIsEng();
int __declspec(dllexport) __stdcall DirectXSetupShowEULA();
int __declspec(dllexport) __stdcall DirectXSetupGetEULAA();
int __declspec(dllexport) __stdcall DirectXSetupGetEULAW();


int __declspec(dllexport) WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved);
}
#endif


(FARPROC &)SendPacket = (FARPROC)(DWORD *)(**(DWORD **)(pUNetworkHandler + 0x48) + 0x6C);
pSendPacket = (int)*(int**)(SendPacket);

Elecktron
03.11.2011, 00:41
спасибо ALF, длл скомпилилась.
но клиент всеравно не запускается с ней...

выдает ошибку:

OS: Windows XP 5.1 (Build: 2600)
CPU: AuthenticAMD Unknown processor @ 2703 MHz with 2047MB RAM
Video: No Video

General protection fault!

History:


зы клиент грации с моей длл тоже вылетел с General protection fault...

ззы с ней завелся клиент хб, но в окно не переключается....

сразу вопрос - что ненравится четвертым хроникам в моей длл?
длл пустая по сути, в ней только функции из dsetup.

Добавлено через 6 часов 20 минут
временно отказался от dsetup.dll.

пишу просто длл для привязки
происходит странное:
lordpe постоянно выдает ошибки... (глючная версия?)
вяжу с помощью CFF Explorer:
клиент четвертых хроник при попытке привязать к нему какую-либо длл вылетает с ошибкой.
пробовал даже создавать абсолютно пустую длл (новый проект в билдере)...
всеравно летает...

ALF
03.11.2011, 04:06
спасибо ALF, длл скомпилилась.
но клиент всеравно не запускается с ней...

выдает ошибку:

OS: Windows XP 5.1 (Build: 2600)
CPU: AuthenticAMD Unknown processor @ 2703 MHz with 2047MB RAM
Video: No Video

General protection fault!

History:


зы клиент грации с моей длл тоже вылетел с General protection fault...

ззы с ней завелся клиент хб, но в окно не переключается....

сразу вопрос - что ненравится четвертым хроникам в моей длл?
длл пустая по сути, в ней только функции из dsetup.

Добавлено через 6 часов 20 минут
временно отказался от dsetup.dll.

пишу просто длл для привязки
происходит странное:
lordpe постоянно выдает ошибки... (глючная версия?)
вяжу с помощью CFF Explorer:
клиент четвертых хроник при попытке привязать к нему какую-либо длл вылетает с ошибкой.
пробовал даже создавать абсолютно пустую длл (новый проект в билдере)...
всеравно летает...

Что в дллЕНтриПоинт?
вот у меня
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
switch(reason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinst);
CreateThread(0,0,&InitThread,0,0,0);
break;
case DLL_PROCESS_DETACH:
break;
};

return 1;
}
ну и
DWORD WINAPI InitThread(LPVOID lpParameter)
{
ТРУЛЯЛЯ
return 0;
};

Добавлено через 3 минуты
попробуй в настройке проетка в линковке снять выделение с
Use dynamic RTL
и в packages снять выделение с Runtime Packages
....
Кстати возможно даже Themida блочит (хотя хз, я с ней связей не имел, все дллки распакованы.)

а вообще чето это вообще странное)

Elecktron
04.11.2011, 05:07
попробуй в настройке проетка в линковке снять выделение с
Use dynamic RTL
и в packages снять выделение с Runtime Packages
снял, не попустило...

клиент хеллбоунда запустился только потому, что он вообще без дсетап.длл запускается, она ему не нужна.. оО

я уже на винду грешу, давно стоИт и глючит...
на днях буду переустанавливать...
хотя.. может и клиент коравый.. (ага! все 4 разных...)

выложи, пожалуйста, папку систем, которая у тебя "поддается" ковырянию.

ALF
05.11.2011, 15:41
снял, не попустило...

клиент хеллбоунда запустился только потому, что он вообще без дсетап.длл запускается, она ему не нужна.. оО

я уже на винду грешу, давно стоИт и глючит...
на днях буду переустанавливать...
хотя.. может и клиент коравый.. (ага! все 4 разных...)

выложи, пожалуйста, папку систем, которая у тебя "поддается" ковырянию.

Должно работать на любом клиенте ибо я свою дллку юзал на ГрацииФинале (евро и ру) сейчас на ГоДе тестирую (корея, ру) всё норм)

Elecktron
03.12.2011, 02:22
переустановка операционки ничего не дала...
всеравно крит.
хз, я чего-то не понимаю...

Добавлено через 40 минут
а какая загрузка у длл должна быть: статическач или динамическая?

alexteam
03.12.2011, 20:03
а какая загрузка у длл должна быть: статическач или динамическая?
"правильная"

Elecktron
07.12.2011, 19:53
ура, "заглушка" готова.
проблема была в том, что клиент в одной из функций хотел получить данные.

Elecktron
10.12.2011, 17:15
код из этой темы http://coderx.ru/showthread.php?t=4646 крешит клиент при попытке нажать "логин" куда копать?

Добавлено через 3 часа 59 минут
00443BC9 8B88 50480000 MOV ECX,DWORD PTR DS:[EAX+4850]

в [EAX] 00000000
а должно быть 054E0000

Добавлено через 19 часов 36 минут
__fastcall портит [EAX]

Добавлено через 14 часов 32 минуты
dll запустил, функции перехватываются, вопросы остались - но это уже другая тема :)