Ft guard клиент epilogue

Vodka TreasureHunter

Выдающийся
Местный
За веру и верность форуму
Сообщения
371
Розыгрыши
0
Репутация
242
Реакции
174
Баллы
1 388
С трудом и потом, я прикрутил защиту фт гвард к моей сборке, ну как прикрутил пару файлов с исходников джанки перекинул и сборочка завелась.
Но теперь проблема lvl 2.
Клиент часть, как ее под епилог подогнать то?

Исходя из всего того что мне сказали надо переделать подключение к движку(адрес)
ADDR 0x203B0B90

unsigned int GetSendPacketAddress(void)
{
HMODULE hEngine = LoadLibraryA("engine.dll");

unsigned int startVMT = (unsigned int) hEngine + 0x51F658;
unsigned int AddNetworkQueue = (unsigned int) GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z");
unsigned int currVMT = startVMT;

if (AddNetworkQueue == 0)
return 0;

while (true)
{
if (*(unsigned int*) currVMT == AddNetworkQueue)
return *(unsigned int*) (currVMT - 0xA4);

currVMT++;
if (currVMT - startVMT > 10000)
return 0;
}

return 0;
}

bool SetHooks(void)
{
FARPROC addr;
HMODULE hEngine = LoadLibraryA("engine.dll"), hNtDlll = LoadLibraryA("ntdll.dll");
MODULEINFO modinfo;

GetModuleInformation(GetCurrentProcess(), hEngine, &modinfo, sizeof(MODULEINFO));

hEngineStart = (unsigned int) hEngine;
hEngineEnd = hEngineStart + modinfo.SizeOfImage - 1;

GetModuleInformation(GetCurrentProcess(), hNtDlll, &modinfo, sizeof(MODULEINFO));

hNtDllStart = (unsigned int) hNtDlll;
hNtDllEnd = hNtDllStart + modinfo.SizeOfImage - 1;

if ((KiUserExceptDispADR = (unsigned int) GetProcAddress(LoadLibraryA("ntdll.dll"), "KiUserExceptionDispatcher")) == 0)
return false;

if (*(unsigned char*) (KiUserExceptDispADR) == 0xFC)
KiUserExceptDispADR++;

if ((addr = GetProcAddress(LoadLibraryA("ws2_32.dll"), "connect")) == 0)
return false;

true_connect = (_connect) splice((unsigned char*) addr, new_connect);

if ((addr = GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z")) == 0)
return false;

true_AddNetworkQueue = (_AddNetworkQueue) splice((unsigned char*) addr, new_AddNetworkQueue);

if ((addr = (FARPROC) GetSendPacketAddress()) == 0)
return false;

true_SendPacket = (_SendPacket) splice((unsigned char*) addr, new_SendPacket);

if ((addr = GetProcAddress(hEngine, "?MasterProcessPreRender@UInteractionMaster@@QAEXPAVUCanvas@@@Z")) == 0)
return false;

true_MasterProcessPreRender = (_MasterProcessPreRender) splice((unsigned char*) addr, new_MasterProcessPreRender);

if ((addr = GetProcAddress(hEngine, "?DrawTextTTFToCanvas@UCanvas@@QAEHHHPB_WPBVFontDrawInfo@@EHHPBV?$TArray@PAVFontDrawInfoSection@@@@@Z")) == 0)
return false;

true_DrawTextTTFToCanvas = (_DrawTextTTFToCanvas) addr;

if ((addr = GetProcAddress(hEngine, "?Render@FPlayerSceneNode@@UAEXPAVFRenderInterface@@@Z")) == 0)
return false;

true_Render = (_Render) splice((unsigned char*) addr, new_Render);

return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProcW(hWnd, uMsg, wParam, lParam);
}

bool LoadTrayIcon(HINSTANCE hInst, unsigned int ID)
{
ghMutex = CreateMutexA(0, false, "First Guard");

if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(ghMutex);
return true;
}

WNDCLASSEXA wcx;
NOTIFYICONDATAA niData;

memset(&wcx, 0, sizeof(WNDCLASSEXA));

wcx.cbSize = sizeof(wcx);
wcx.lpfnWndProc = WndProc;
wcx.hInstance = hInst;
wcx.lpszClassName = "tray_icon";

if ((RegisterClassExA(&wcx) == 0) && (GetLastError() != ERROR_CLASS_ALREADY_EXISTS))
return false;

if ((hWND = CreateWindowExA(0, "tray_icon", 0, 0, 0, 0, 0, 0, 0, 0, hInst, 0)) == 0)
return false;

memset(&niData, 0, sizeof(NOTIFYICONDATAA));

niData.cbSize = sizeof(NOTIFYICONDATAA);
niData.uID = ID;
niData.uFlags = NIF_ICON | NIF_TIP;
niData.hWnd = hWND;
strcpy_s(niData.szTip, "First Guard");

niData.hIcon = (HICON) LoadImageA(hInst, MAKEINTRESOURCEA(IDI_TRAYICON), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);

if (!Shell_NotifyIconA(NIM_ADD, &niData))
return false;

return true;
}
Отличие с епилогом есть только в одной функции
?DrawTextTTFToCanvas@UCanvas@@QAEHHHPBGPBVFontDrawInfo@@EHHPBV?$TArray@PAVFontDrawInfoSection@@@@@Z

Без понятия что делать, буду рад любой помощи.

И на затравочку чтобы вам унывать, а немного посмеяться.
 
Последнее редактирование модератором:

Вы смещение для очереди пакетов исправили? Остальные экспортируемые функции обновили?
И да, для работы нужен анпакнутый engine.dll, либо нужно по другому перекраивать смещения, что бы можно было работать под темидой. Самый лучший способ, это дампить память кусками по 1 кб и смотреть - попали или нет.
 
Ты случайно не знаешь что за проблема, скомпилил клиент часть для епилога, дохожу до выбора сервера и ничего в гсе пусто, с защитой и без зайти на сервер не могу.
Проблема скорей всего в протоколе, не знаешь где его поменять в исходах клиентки?
Я скажу вам вот что, не надо сливать на форум бомжей ничего, большинство из нас не любит этот форум бомжей! Ах да я не знаком с защитой ftGuard поэтому в слепую ничего сказать не могу, я больше склонен к тому что сервер должен работать без какой либо клиентской защиты.
 
Это ваш startVMT. Оффсет правильный?
Тут я поменял только
unsigned int startVMT = (unsigned int) hEngine + 0x4E994C;
unsigned int AddNetworkQueue = (unsigned int) GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z");
unsigned int currVMT = startVMT;
 
Тут я поменял только
unsigned int startVMT = (unsigned int) hEngine + 0x4E994C;
unsigned int AddNetworkQueue = (unsigned int) GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z");
unsigned int currVMT = startVMT;
И откуда Вы взяли этот оффсет? :) Перепроверьте его.
Плюс в посте выше уже написал, что требуется еще проверить/обновить.
 
На вашем форуме написано что есть такой баг, а как его реализовать ни слова, мне пришлось узнавать собственными силами.
+ вы меня забанили на форуме, что мне еще делать, сидеть ждать разбана неделю за правдивые слова о elmity?
Что бы меня еще раз забанили за пустяк?
собствеными силами? а ничего что я после вашего кляничества написал Вам в ПМ как сделать это? собствеными силами Вы бы еще 2 года узнавали как сделать его
 
И откуда Вы взяли этот оффсет? :) Перепроверьте его.
Плюс в посте выше уже написал, что требуется еще проверить/обновить.
Это для епилога 0x4E994C, я половину того что вы сказали там не понял(
 
собствеными силами? а ничего что я после вашего кляничества написал Вам в ПМ как сделать это? собствеными силами Вы бы еще 2 года узнавали как сделать его
Ну собственными силами узнал у тебя мне его не принесли на блюдечке.(я не хотел тебя подставлять друг)
 
Ну собственными силами узнал у тебя мне его не принесли на блюдечке.(я не хотел тебя подставлять друг)
Кик и так знал что это от меня, так как и я ему этот дюп сказал, а с твоей стороны было подло, так что наврят что ты тут еще что то на шару получишь
 
Делать конкретно за Вас -- я не собираюсь. Все требуемую информацию для закрутки, я уже описал в постах выше.
Ну если судить из ваших слов то я почти все сделал.
Вы смещение для очереди пакетов исправили? поменял под епилог
Остальные экспортируемые функции обновили? - другие функции обновил
Проблема скорей всего в протоколе, где его поменять вы знаете?
 
Ну если судить из ваших слов то я почти все сделал.
Вы смещение для очереди пакетов исправили? поменял под епилог
Остальные экспортируемые функции обновили? - другие функции обновил
Проблема скорей всего в протоколе, где его поменять вы знаете?
Ну Вам виднее, где проблема :Wahaha:
Хукаете пакет протокол вершион, в аргументах есть указатель на буфер. Считаете оффсет до нужного значения и переписываете его. Не забываем, что используется соглашение thiscall и в ecx у нас должен лежать указатель.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Не надо меня не туда направлять, на сборке джанки тоже не работает, но вот когда менял на ней протокол с 152 на 260+ то уже в гсе пишет что я пытался приконектится.
если у вас все верно на уровне сервера , то причина в клиент части а именно статик кей сервер-клиент , ну а если дохлый номер то значит не допилено в сервере или же в клиенте , я не ванга но по посту выше о клиент части вы не все сменили
 
если у вас все верно на уровне сервера , то причина в клиент части а именно статик кей сервер-клиент , ну а если дохлый номер то значит не допилено в сервере или же в клиенте , я не ванга но по посту выше о клиент части вы не все сменили
Смотри, взял чистую клиент часть и поменял в ней
unsigned char bfkey[16] = {120, 56, 2, 17, 58, 87, 44, 37, 28, 45, 1, 11, 102, 76, -5, 11}; - тот который у меня прописан на сервере

unsigned int startVMT = (unsigned int) hEngine + 0x4E994C; переделал под епилог

if ((addr = GetProcAddress(hEngine, "?DrawTextTTFToCanvas@UCanvas@@QAEHHHPBGPBVFontDrawInfo@@EHHPBV?$TArray@PAVFontDrawInfoSection@@@@@Z")) == 0)
return false;

Тоже переделал под епилог.

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