Отладка своей dll в Lineage 2 через Visual Studio

Кастиэль

Знаменитый
Пользователь
Сообщения
18
Розыгрыши
0
Репутация
1
Реакции
0
Баллы
1 233
Собственно ищу ребят, которые, возможно, сталкивались с подобной проблемой и смогли прийти к определенному решению.
Если не трудно, предложите способ решения данной проблемы.

P.S. Пробовал использовать ScyllaHide (standalone), но ничего не вышло, также критует.
 

Собственно ищу ребят, которые, возможно, сталкивались с подобной проблемой и смогли прийти к определенному решению.
Если не трудно, предложите способ решения данной проблемы.

P.S. Пробовал использовать ScyllaHide (standalone), но ничего не вышло, также критует.
Снять темиду с нескольких файлов (Core.dll, Engine.dll, l2.bin и еще парочка вроде).
 
Все еще ищу способ отладки.
На днях пробовал отойти от dll и перейти к своему exe, но т.к. нужно поставить хук на некоторые функции из Engine.dll, опять же, я попробовал использовать Blackbone(Remote Hook)
. Но после хука клиент просто закрывается... (Blackbone возвращает success - true).
В общем, если у кого есть идеи, буду только рад
 
Все еще ищу способ отладки.
На днях пробовал отойти от dll и перейти к своему exe, но т.к. нужно поставить хук на некоторые функции из Engine.dll, опять же, я попробовал использовать Blackbone(Remote Hook)
. Но после хука клиент просто закрывается... (Blackbone возвращает success - true).
В общем, если у кого есть идеи, буду только рад
Кинь лучше кусок кода как ты ставишь хук, прототип и твою функцию
 
Посмотреть вложение 25680


Посмотреть вложение 25679

status так и остается STATUS_SUCCESS. Т.е. со стороны BlackBone вроде все норм
А что за функцию ты хукаешь, что это за параметр? Да и хук не правильный, может и с винапишными это проканает но виртуальные хукаются не так.
На самом деле любого велосипеда хватит что бы поставить хук в л2 даже на пример этого
Надо просто правильно составить прототип и функцию на которую будет прыгать хук
 
Последнее редактирование:
А что за функцию ты хукаешь, что это за параметр? Да и хук не правильный, может и с винапишными это проканает но виртуальные хукаются не так
Взял отсюда:
- написано, что можно не только винапи, а любую.
0x20554600 UNetworkHandler_AddNetworkQueueType
0x2072DF98 UNetworkHandler_OutgoingPacketType
 
Взял отсюда:
- написано, что можно не только винапи, а любую.
я хз как работать с этой библтотекой, но там тебе дали норм ответ
C++:
typedef BOOL( __stdcall* FunctionFn )(unsigned int, int);

int __stdcall hkFunction( unsigned int& a1, int& a2 )
{
    //......
    return 0;
}

int main( )
{
   blackbone::Detour<FunctionFn> detour;
   detour.Hook( (FunctionFn)dAdress, &hkFunction, blackbone::HookType::Inline, blackbone::CallOrder::HookLast );
}
Под винапи я имел ввиду экспортируемые не виртуальные функции.

C++:
//Структура которую принимает AddNetworkQueue
#pragma pack(push, 1)
struct NetworkPacket
{
    unsigned char id, _padding1, exid, _padding2;
    unsigned short size, _padding3;
    unsigned char* data;
};
#pragma pack(pop)
//Прототип  функции AddNetworkQueue
typedef void (__fastcall *UNetworkHandler_AddNetworkQueue)(void*, int, struct NetworkPacket*);
UNetworkHandler_AddNetworkQueue UNetworkHandler;

//Примерно так выглядит функция АддНетворк
void __fastcall UNetworkHandler_AddNetworkQueue_hook(void* This, int i, NetworkPacket* packet)
{
    printf("%02X ", packet->id);
    //Как вернуть управления придумай сам соответственно твоему велосипеду хука
}

void Hook()
{
    HMODULE hEngine = GetModuleHandleA("Engine.dll");
    //UNetworkHandler - адресс AddNetworkQueue
    UNetworkHandler = reinterpret_cast<UNetworkHandler_UNetworkHandler>(GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z"));
    
    //Дальше ставишь хук на свою функцию
    
}

П.С. Таким методом можно хукать все функции UNetworkHandler, во всех функциях UNetworkHandler хукая таким методом будут иметь первые два обязательных параметра это void* This(указатель на экземпляр класса ) и int i(не известно, может быть всегда 0)
 
я хз как работать с этой библтотекой, но там тебе дали норм ответ
C++:
typedef BOOL( __stdcall* FunctionFn )(unsigned int, int);

int __stdcall hkFunction( unsigned int& a1, int& a2 )
{
    //......
    return 0;
}

int main( )
{
   blackbone::Detour<FunctionFn> detour;
   detour.Hook( (FunctionFn)dAdress, &hkFunction, blackbone::HookType::Inline, blackbone::CallOrder::HookLast );
}
Под винапи я имел ввиду экспортируемые не виртуальные функции.

C++:
//Структура которую принимает AddNetworkQueue
#pragma pack(push, 1)
struct NetworkPacket
{
    unsigned char id, _padding1, exid, _padding2;
    unsigned short size, _padding3;
    unsigned char* data;
};
#pragma pack(pop)
//Прототип  функции AddNetworkQueue
typedef void (__fastcall *UNetworkHandler_AddNetworkQueue)(void*, int, struct NetworkPacket*);
UNetworkHandler_AddNetworkQueue UNetworkHandler;

//Примерно так выглядит функция АддНетворк
void __fastcall UNetworkHandler_AddNetworkQueue_hook(void* This, int i, NetworkPacket* packet)
{
    printf("%02X ", packet->id);
    //Как вернуть управления придумай сам соответственно твоему велосипеду хука
}

void Hook()
{
    HMODULE hEngine = GetModuleHandleA("Engine.dll");
    //UNetworkHandler - адресс AddNetworkQueue
    UNetworkHandler = reinterpret_cast<UNetworkHandler_UNetworkHandler>(GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z"));
   
    //Дальше ставишь хук на свою функцию
   
}

П.С. Таким методом можно хукать все функции UNetworkHandler, во всех функциях UNetworkHandler хукая таким методом будут иметь первые два обязательных параметра это void* This(указатель на экземпляр класса ) и int i(не известно, может быть всегда 0)
Во первых, в моем случае - не работает, в моих хрониках разработчики убрали эту функцию из экспортируемых и ее адрес нужно находить и хукать вручную. Эх...
Во вторых, прочитайте там внимательно, тот ответ, что ты читаешь и скинул в спойлере - не верный. Дальше дали правильный, который я как раз и использовал.( Это для библиотеки DLL ответ для работы в адресном пространстве текущего процесса. А я попробовал RemoteHook)

Извините, но оффтоп пошел.
Мне же нужно найти способ возможности отладки DLL или же хукать через другую программу и отлаживать уже ее. Пока ничего не выходит. Игра крашится во всех случаях.
 
Во первых, в моем случае - не работает, в моих хрониках разработчики убрали эту функцию из экспортируемых и ее адрес нужно находить и хукать вручную. Эх...
Во вторых, прочитайте там внимательно, тот ответ, что ты читаешь и скинул в спойлере - не верный. Дальше дали правильный, который я как раз и использовал.( Это для библиотеки DLL ответ для работы в адресном пространстве текущего процесса. А я попробовал RemoteHook)

Извините, но оффтоп пошел.
Мне же нужно найти способ возможности отладки DLL или же хукать через другую программу и отлаживать уже ее. Пока ничего не выходит. Игра крашится во всех случаях.
что бы хукать функцию в л2 тебе в любом случае нужно попасть в адресное пространство л2, из длл это делается легко.
P.S. UNetworkHandler = reinterpret_cast<UNetworkHandler_AddNetworkQueue>((DWORD)0x12345678);
Либо передать со своего процесса в длл этот адрес, не понимаю зачем тебе стоко гемора, я всегда юзал длл на всех защитах.
Либо как я уже говорил берешь чит енжин и отлаживаешь
 
что бы хукать функцию в л2 тебе в любом случае нужно попасть в адресное пространство л2, из длл это делается легко.
P.S. UNetworkHandler = reinterpret_cast<UNetworkHandler_AddNetworkQueue>((DWORD)0x12345678);
Либо передать со своего процесса в длл этот адрес, не понимаю зачем тебе стоко гемора, я всегда юзал длл на всех защитах.
Либо как я уже говорил берешь чит енжин и отлаживаешь
Да знаю я это всё, я без проблем хукаю нужное мне через DLL,
Вопрос же совершенно в другом, мне нужно отлаживать нужно свою программу, чтобы смотреть как она работает, смотреть что не так, смотреть на содержимое своих переменных через брекпоинты. Visual studio для этого идеально подходит.
Для того чтобы ловить эти брекпоинты, мне нужно либо хукануть через другой процесс, либо же каким-то образом скрыть режиме отладки от процесса игры. Я уже не знаю как по другому объяснить.
Выводить все через консоль я пробовал, но это дико не удобно(каждый раз перекомпилировать, когда нужно вывести что-то новое)
Через cheat engine понятия не имею как, подозреваю что это ещё хуже, чем через консоль
 

    DaVilka

    Баллов: 1
    Яснопонятно
Для начала разберись, что у тебя там лежит через обычный отладчик. Затем уже отлаживай.
 

    Кастиэль

    Баллов: 1
    Не совсем понял, что имеется ввиду
Да знаю я это всё, я без проблем хукаю нужное мне через DLL,
Вопрос же совершенно в другом, мне нужно отлаживать нужно свою программу, чтобы смотреть как она работает, смотреть что не так, смотреть на содержимое своих переменных через брекпоинты. Visual studio для этого идеально подходит.
Для того чтобы ловить эти брекпоинты, мне нужно либо хукануть через другой процесс, либо же каким-то образом скрыть режиме отладки от процесса игры. Я уже не знаю как по другому объяснить.
Выводить все через консоль я пробовал, но это дико не удобно(каждый раз перекомпилировать, когда нужно вывести что-то новое)
Через cheat engine понятия не имею как, подозреваю что это ещё хуже, чем через консоль
Посоветую , для него есть плагины для скрытия от Themida.
 
Посоветую , для него есть плагины для скрытия от Themida.
Знаю, лично отлаживал через нее, при помощи SkyllaHide.
Но это все не то, во первых там нужно владение ассемблером(У меня оно на нуле.). Во вторых отладка в разы дольше получается, ну и в третьих - не дает она всех возможностей, что дает VS.
Поэтому и поставил себе задачу через Visual Studio. Итак получается - вопрос открыт.
 
Но это все не то, во первых там нужно владение ассемблером(У меня оно на нуле.).
Без основ не построить дом. Отладка аналогична vs. Посмотри, может у тебя кривые прыжки, что ведет к порче памяти /стека и как следствие - критам.
 
Посмотри, может у тебя кривые прыжки, что ведет к порче памяти /стека и как следствие - критам.
Это про Вы про BlackBone?
Если про dll'ку, то я Ваш выведенный адрес использую)
 
Это про Вы про BlackBone?
Если про dll'ку, то я Ваш выведенный адрес использую)
В иде смотрели, что по данным адресам? Мб у вас другой протокол, и как следствие - все адреса едут. Мб либа вообще под темидой.
 
В иде смотрели, что по данным адресам? Мб у вас другой протокол, и как следствие - все адреса едут. Мб либа вообще под темидой.
У меня проблем с хуком нету, хукается нормально(через DLL).
По этим адресам какие то функции func_что-то-там. Но т.к. при хуке по данному адресу работает - значит адрес верный.
Проблема то в другом, неужели ни как нельзя отладить свою dll"ку ...(или хотя бы сделать хук из другого приложения, чтобы его можно было отлаживать)
(Именно VS, самый оптимальный)
 
ScyllaHide там не подойдет, поскольку WinLicence отчасти выполняется в режиме ядра (Kernel Mode), поэтому нужен TitanHide.
 
ScyllaHide там не подойдет, поскольку WinLicence отчасти выполняется в режиме ядра (Kernel Mode), поэтому нужен TitanHide.
Пробовал, (через wmare win 7) устанавливал службу TitanHide 0.011v(на других синий экран был, или проблемы с запуском службы). Test приложение успешно вносил, скрывал по его PID(в TitanHideGUI вводил PID процесса тестового приложения ) и запускал удалённую отладку в Visual Studio - все прошло отлично, без следов подключился. С l2.exe же все пошло не по плану - крит при коннекте удаленной отладкой)
 
Назад
Сверху Снизу