Снять темиду с нескольких файлов (Core.dll, Engine.dll, l2.bin и еще парочка вроде).Собственно ищу ребят, которые, возможно, сталкивались с подобной проблемой и смогли прийти к определенному решению.
Если не трудно, предложите способ решения данной проблемы.
P.S. Пробовал использовать ScyllaHide (standalone), но ничего не вышло, также критует.
Кинь лучше кусок кода как ты ставишь хук, прототип и твою функциюВсе еще ищу способ отладки.
На днях пробовал отойти от dll и перейти к своему exe, но т.к. нужно поставить хук на некоторые функции из Engine.dll, опять же, я попробовал использовать Blackbone(Remote Hook). Но после хука клиент просто закрывается... (Blackbone возвращает success - true).Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
В общем, если у кого есть идеи, буду только рад
А что за функцию ты хукаешь, что это за параметр? Да и хук не правильный, может и с винапишными это проканает но виртуальные хукаются не так.Посмотреть вложение 25680
Посмотреть вложение 25679
status так и остается STATUS_SUCCESS. Т.е. со стороны BlackBone вроде все норм
Взял отсюда:А что за функцию ты хукаешь, что это за параметр? Да и хук не правильный, может и с винапишными это проканает но виртуальные хукаются не так
0x20554600 UNetworkHandler_AddNetworkQueueType
0x2072DF98 UNetworkHandler_OutgoingPacketType
я хз как работать с этой библтотекой, но там тебе дали норм ответВзял отсюда:
- написано, что можно не только винапи, а любую.Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
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 );
}
//Структура которую принимает 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"));
//Дальше ставишь хук на свою функцию
}
Во первых, в моем случае - не работает, в моих хрониках разработчики убрали эту функцию из экспортируемых и ее адрес нужно находить и хукать вручную. Эх...я хз как работать с этой библтотекой, но там тебе дали норм ответ
Под винапи я имел ввиду экспортируемые не виртуальные функции.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)
что бы хукать функцию в л2 тебе в любом случае нужно попасть в адресное пространство л2, из длл это делается легко.Во первых, в моем случае - не работает, в моих хрониках разработчики убрали эту функцию из экспортируемых и ее адрес нужно находить и хукать вручную. Эх...
Во вторых, прочитайте там внимательно, тот ответ, что ты читаешь и скинул в спойлере - не верный. Дальше дали правильный, который я как раз и использовал.( Это для библиотеки DLL ответ для работы в адресном пространстве текущего процесса. А я попробовал RemoteHook)
Извините, но оффтоп пошел.
Мне же нужно найти способ возможности отладки DLL или же хукать через другую программу и отлаживать уже ее. Пока ничего не выходит. Игра крашится во всех случаях.
Да знаю я это всё, я без проблем хукаю нужное мне через DLL,что бы хукать функцию в л2 тебе в любом случае нужно попасть в адресное пространство л2, из длл это делается легко.
P.S. UNetworkHandler = reinterpret_cast<UNetworkHandler_AddNetworkQueue>((DWORD)0x12345678);
Либо передать со своего процесса в длл этот адрес, не понимаю зачем тебе стоко гемора, я всегда юзал длл на всех защитах.
Либо как я уже говорил берешь чит енжин и отлаживаешь
ПосоветуюДа знаю я это всё, я без проблем хукаю нужное мне через DLL,
Вопрос же совершенно в другом, мне нужно отлаживать нужно свою программу, чтобы смотреть как она работает, смотреть что не так, смотреть на содержимое своих переменных через брекпоинты. Visual studio для этого идеально подходит.
Для того чтобы ловить эти брекпоинты, мне нужно либо хукануть через другой процесс, либо же каким-то образом скрыть режиме отладки от процесса игры. Я уже не знаю как по другому объяснить.
Выводить все через консоль я пробовал, но это дико не удобно(каждый раз перекомпилировать, когда нужно вывести что-то новое)
Через cheat engine понятия не имею как, подозреваю что это ещё хуже, чем через консоль
Знаю, лично отлаживал через нее, при помощи SkyllaHide.ПосоветуюВы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация, для него есть плагины для скрытия от Themida.
Без основ не построить дом. Отладка аналогична vs. Посмотри, может у тебя кривые прыжки, что ведет к порче памяти /стека и как следствие - критам.Но это все не то, во первых там нужно владение ассемблером(У меня оно на нуле.).
Это про Вы про BlackBone?Посмотри, может у тебя кривые прыжки, что ведет к порче памяти /стека и как следствие - критам.
В иде смотрели, что по данным адресам? Мб у вас другой протокол, и как следствие - все адреса едут. Мб либа вообще под темидой.Это про Вы про BlackBone?
Если про dll'ку, то я Ваш выведенный адрес использую)
У меня проблем с хуком нету, хукается нормально(через DLL).В иде смотрели, что по данным адресам? Мб у вас другой протокол, и как следствие - все адреса едут. Мб либа вообще под темидой.
Пробовал, (через wmare win 7) устанавливал службу TitanHide 0.011v(на других синий экран был, или проблемы с запуском службы). Test приложение успешно вносил, скрывал по его PID(в TitanHideGUI вводил PID процесса тестового приложения ) и запускал удалённую отладку в Visual Studio - все прошло отлично, без следов подключился. С l2.exe же все пошло не по плану - крит при коннекте удаленной отладкой)ScyllaHide там не подойдет, поскольку WinLicence отчасти выполняется в режиме ядра (Kernel Mode), поэтому нужен TitanHide.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?