ЗАЧЕМ ДУМАТЬ ЕСЛИ МОЖНО НЕ ДУМАТЬ
-
Автор темы
- #1
Что нам нужно :
1)Camera (получение через функцию get_current (для некоторых игр это get_main) )
2)функция которая ставит фов(defolt функция в юнити set_fieldOFView)
И там мы должны получить адреса функций get_current & set_fieldOFView это можно сделать через Cheat Engine или через dnSpy
эти функции находятся в UnityEngine.CoreModule (UnityEngine.Camera)
ищем функции в Методах два раза кликаем и получаем адрес
И так же делаем с другой функцией
и так у нас есть всё чтоб писать код
Надо ещё добавить проверки от краша ( найти камеру как объект и проверять его адресс чтоб не было краша )
И наконец использование кода
и Результат будет примерно таким
1)Camera (получение через функцию get_current (для некоторых игр это get_main) )
2)функция которая ставит фов(defolt функция в юнити set_fieldOFView)
И там мы должны получить адреса функций get_current & set_fieldOFView это можно сделать через Cheat Engine или через dnSpy
эти функции находятся в UnityEngine.CoreModule (UnityEngine.Camera)
ищем функции в Методах два раза кликаем и получаем адрес
И так же делаем с другой функцией
и так у нас есть всё чтоб писать код
C++:
#include "Fov.h"
#include <iostream>
#include "includes.h"
//GameAssembly.dll+14B4F80 get
//GameAssembly.dll+14B60A0 set
namespace functGetCamera {
uintptr_t CameraGetCur = reinterpret_cast<std::uintptr_t>(GetModuleHandle(TEXT("GameAssembly.dll"))) + 0x14B4F80;//адресс функции
using printf_t = uintptr_t(*)(int* ptr); // параметры функции и возращаемое значение
}
namespace functSetFov {
uintptr_t CameraSetFov = reinterpret_cast<std::uintptr_t>(GetModuleHandle(TEXT("GameAssembly.dll"))) + 0x14B60A0; //адресс функции
using printf_t = void(*)(uintptr_t cam, float fov, int* ptr);// параметры функции и возращаемое значение
}
{
const auto GetCam = reinterpret_cast <functGetCamera::printf_t>(functGetCamera::CameraGetCur); //инициализация функции
if (GetCam(nullptr) != NULL)
{
const auto SetFov = reinterpret_cast <functSetFov::printf_t>(functSetFov::CameraSetFov);//инициализация функции
SetFov(GetCam(nullptr), fov, nullptr); // Используем функцию(ставим фов)
}
}
C++:
#pragma once
class Fov
{
public:
void Start();
float fov = 90;
};
И наконец использование кода
C++:
#include "Fov.h"
Fov fovС;
ImGui::SliderFloat("Fov", &fovP.fov, 0, 360); // slider в меню
BOOL __stdcall StartThread(HMODULE hModule, LPTHREAD_START_ROUTINE StartAddress)
{
return CloseHandle(CreateThread(0, 0, (LPTHREAD_START_ROUTINE)StartAddress, hModule, 0, 0));
}
DWORD WINAPI FuncThread(HMODULE hMod)
{
while (true)
{
fovP.Start();
}
FreeLibraryAndExitThread(hMod, 0);
}
BOOL WINAPI DllMain(HMODULE hMod, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hMod);
CreateThread(nullptr, 0, MainThread, hMod, 0, nullptr);
StartThread(nullptr, (LPTHREAD_START_ROUTINE)FuncThread);
break;
case DLL_PROCESS_DETACH:
kiero::shutdown();
break;
}
return TRUE;
}
и Результат будет примерно таким