Сообщений: 106
Тем: 3
Зарегистрирован: Jun 2014
ShadowPK Написал:Вопрос кто шарит в клиенте.
Нужно поменять порт логина в клиент HF5
Если делать все по мануалу https://forum.zone-game.info/showthread....2%E5%F0%E0
Порт меняет, но все ОС выше 7 винды, не запускают игру.
Вопрос, есть ли еще какие методы смены порта в клиенте, чтобы избежать проблемы с запускам на новых ОС ?
Ты же о великий разработчикXD, ты должен знать сам ответ на вопрос
Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
06-29-2014, 10:13 AM
(Сообщение последний раз редактировалось: 12-14-2015, 08:19 PM flopix.)
Напишите свою dll, которая будет подменять адрес порта в памяти после загрузки engine.dll
Рабочий пример:
Исходники dll
PHP код:
<?php
#include <Windows.h>
#include <string>
BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
char outSt [200];
HMODULE hEngine = GetModuleHandleA("engine.dll");
if (hEngine <= 0)
hEngine = LoadLibraryA("engine.dll");
if (hEngine > 0)
{
//ищем адрес с патерном
DWORD findAddr = 0;
//30420992 - это размер файла engine.dll в байтах, навскидку не придумал как красиво вычислить размер модуля програмно
for (DWORD addr = (DWORD)hEngine; addr < ((DWORD)hEngine + 30420992); addr++)
{
if (*(DWORD*)(addr) == 0x00083a68)
{
findAddr = addr;
break;
}
}
if (findAddr > 0)
{
//меняем порт на новое значение
*(DWORD*)(findAddr) = 0x00083b68;//новый порт 2107
}
else
{
MessageBoxA(0, "findAddr = 0", "ERROR", MB_OK);
}
}
else
{
MessageBoxA(0, "hEngine = 0", "ERROR", MB_OK);
}
return 1;
}
else if (ul_reason_for_call == DLL_PROCESS_DETACH)
{
}
return 1;
}
extern "C" __declspec(dllexport) void __stdcall test(void)
{
return;
}
Компилируете например в VisualStudio.
Добавляете функцию
test из этой dll в таблицу импорта l2.exe с помощью например LordPE.
Миниинструкция:
Миниинструкция
1. Запускаем LordPE
2. Жмем кнопку PE Editor
3. Выбираем l2.exe
4. Нажимаем в появившемся окне "Directories"
5. В следующем окне жмем "..." напротив "Import Table"
6. В новом окне на списке Dll клацаем правой кнопкой и выбираем "Add import"
заполняем:
Dll: имя самописной dll из исходников выше
API: имя экспортируемой функции нужно вводить в спец формате, в нашем случае _test@0
7. Нажимаем "+"
8. Нажимаем "OK", потом везде нажимаем Save
Ну или найдите распакованную engine.dll без Темиды и замените адрес порта в HEX редакторе.