-
Автор темы
- #1
При наличии свободного времени буду описывать способы и поиск офсетов\индексов\функций для WarFace.
Необходимый софт:
Для начала делаем дамп Game.exe: Для этого заходим в папку игры Warface\Bin32Release\ и запускаем Game.exe. Выскочит окошко "Пожалуйста, используйте Игровой центр.....". Дале5е запускаем
PeTools/Scylla/x32dbg
Для PeTools:
Запускаем программу от "Имени администратора", в верхнем окне выбираем процесс игры, в нижнем жмем ПКМ->Dump Full, выбираем место сохранение и имя, жмем OK. PROFIT!!
Для x32dbg:
Запускаем программу от "Имени администратора", во вкладке "Модули" выбираем плагин Scylla, Откроется окно дампера, в списке выбираем процесс, жмем "Dump", выбираем куда сохранить. PROFIT!!!
Далее запускаем IdaPro, выбираем созданный нами дамп, и на все предложения жмем "ОК"(за исключением загрузки .pdb). В случа, если Вы сохранили дамп не в папке Warface\Bin32Release\, то вам предложат указать путь к необходимым длл (ijl15.dll, ocevogyv.dll) просто выбираем в окне расположение этих фаилов(Warface\Bin32Release\). Если дамп в папке с игрой, то IdaPro сама все подгрузит.
Ждем завершения анализа файла(на слабых Пк может до 40 минут доходить) и можем приступать к работе.
//todo
Необходимый софт:
- PeTools/Scylla/x32dbg
- IdaPro
- ReClass
- Блокнот
- Калькулятор
- Пожалуйста, авторизуйтесь для просмотра ссылки.
Для начала делаем дамп Game.exe: Для этого заходим в папку игры Warface\Bin32Release\ и запускаем Game.exe. Выскочит окошко "Пожалуйста, используйте Игровой центр.....". Дале5е запускаем
PeTools/Scylla/x32dbg
Для PeTools:
Запускаем программу от "Имени администратора", в верхнем окне выбираем процесс игры, в нижнем жмем ПКМ->Dump Full, выбираем место сохранение и имя, жмем OK. PROFIT!!
Для x32dbg:
Запускаем программу от "Имени администратора", во вкладке "Модули" выбираем плагин Scylla, Откроется окно дампера, в списке выбираем процесс, жмем "Dump", выбираем куда сохранить. PROFIT!!!
Далее запускаем IdaPro, выбираем созданный нами дамп, и на все предложения жмем "ОК"(за исключением загрузки .pdb). В случа, если Вы сохранили дамп не в папке Warface\Bin32Release\, то вам предложат указать путь к необходимым длл (ijl15.dll, ocevogyv.dll) просто выбираем в окне расположение этих фаилов(Warface\Bin32Release\). Если дамп в папке с игрой, то IdaPro сама все подгрузит.
Ждем завершения анализа файла(на слабых Пк может до 40 минут доходить) и можем приступать к работе.
SSystemGlobalEnvironment - это основной базовый класс где хранятся указатели на "стартовые классы". примерное описание и содержание можно посмотреть на
Минимальный набор необходимых нам классов:
IRenderer* pIRenderer;
IPhysicalWorld* pIPhysicalWorld;
IGame* pIGame;
ISystem* pISystem;
Найдем их и соберем актуальный класс для работы в internal.
самый простой для поиска указатель - это указатель на класс IRenderer.
Если открыть СДК движка, и немного проанализировать, то мы можем найти такую
Тут мы видим два импортируемых функции: ClientToScreen и SetCursorPos.
Так же у нас есть два нужных нам указателя(gEnv->pRenderer) и одна из функций(GetCurrentContextHWND(возвращает актуальный дескриптор окна(HWND)), которая возможно пригодится нам.
Переходим в IdaPro во вкладку Import. Ищем одну из импортируемых функций(SetCursorPos например). Видим два вызова, переходим по любому из них(второй вызов соответствует указанной выше функции)).
Второй вызов
Жмем F5 и видим вполне знакомые инструкции и необходимые нам данные
dword_1BB8B08; указатель на SSystemGlobalEnvironment
dword_1BB8B08 + 156 указатель на IRenderer
v3 + 96 индекс в виртуальной таблице для GetCurrentContextHWND()
Переименуем и подпишем все для более легкой ориентации
открываем ReClass и собираем наш класс:
добавим:
Теперь мы можем получить доступ к IRenderer используя:
Пожалуйста, авторизуйтесь для просмотра ссылки.
.Минимальный набор необходимых нам классов:
IRenderer* pIRenderer;
IPhysicalWorld* pIPhysicalWorld;
IGame* pIGame;
ISystem* pISystem;
Найдем их и соберем актуальный класс для работы в internal.
самый простой для поиска указатель - это указатель на класс IRenderer.
Если открыть СДК движка, и немного проанализировать, то мы можем найти такую
Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
void CHardwareMouse::SetHardwareMouseClientPosition(float fX, float fY)
{
#if CRY_PLATFORM_WINDOWS
HWND hWnd = (HWND) gEnv->pRenderer->GetCurrentContextHWND();
CRY_ASSERT_MESSAGE(hWnd, "Impossible to set position of the mouse relative to client coordinates from a non existing window!");
if (hWnd)
{
POINT pointCursor;
pointCursor.x = (int)fX;
pointCursor.y = (int)fY;
ClientToScreen(hWnd, &pointCursor);
SetCursorPos(pointCursor.x, pointCursor.y);
}
#else
SetHardwareMousePosition(fX, fY);
#endif
}
Так же у нас есть два нужных нам указателя(gEnv->pRenderer) и одна из функций(GetCurrentContextHWND(возвращает актуальный дескриптор окна(HWND)), которая возможно пригодится нам.
Переходим в IdaPro во вкладку Import. Ищем одну из импортируемых функций(SetCursorPos например). Видим два вызова, переходим по любому из них(второй вызов соответствует указанной выше функции)).
Второй вызов
Жмем F5 и видим вполне знакомые инструкции и необходимые нам данные
dword_1BB8B08; указатель на SSystemGlobalEnvironment
dword_1BB8B08 + 156 указатель на IRenderer
v3 + 96 индекс в виртуальной таблице для GetCurrentContextHWND()
Переименуем и подпишем все для более легкой ориентации
открываем ReClass и собираем наш класс:
Код:
class SSystemGlobalEnvironment
{
public:
char pad_0000[156]; //0x0000
class IRenderer* pRenderer; //0x009C
char pad_00A0[32]; //0x00A0
}; //Size: 0x00C0
добавим:
Код:
static SSystemGlobalEnvironment* m_env = nullptr;
static SSystemGlobalEnvironment* GetGlobalEnvironment()
{
if (!m_env)
m_env = (SSystemGlobalEnvironment*)(*(DWORD*)0x1BB8B08);
return m_env;
}
Код:
IRenderer* m_pRenderer = GetGlobalEnvironment()->pRenderer;
//todo
Последнее редактирование: