Перейти к содержанию

Создаем internal мультихак, на примере CryEngine3 SDK [9 часть]

JustHack

122 просмотра

 

1.thumb.png.5eebdd2c57b7d173efcb983c1dc80bcd.png

 

 

В этой статье, мы с вами отключим назойливую рекламу и персональные предложения в игре.  Поиск всех необходимых смещений для этого вы уже знаете, поэтому, я не буду останавливаться на этом подробно. Остановимся только на ключевых моментах.

 

Добавим в наш код новые смещения

 

Спойлер

#define ICVAR_OFFS_ADVERTISING			0x90
#define ICVAR_OFFS_PERSONAL_OFFER		0xB4

 

 

В итоге, мы имеем такой набор смещений

 

Спойлер

#define ICVAR_ADDR				0x1420DD458
#define IGAMEFRAMEWORK_ADDR			0x1420DE108
  
#define IGAMEFRAMEWORK_GETCLIENTACTOR		0x470
#define ICVAR_OFFS_IDLECHECK			0x168
#define ICVAR_OFFS_LOBBYAFK			0x7B0
#define ICVAR_OFFS_INGAMEAFK			0x5D0
#define ICVAR_OFFS_ADVERTISING			0x90
#define ICVAR_OFFS_PERSONAL_OFFER		0xB4
#define ICVAR_OFFS_GAMETYPE			0x600

 

 

Добавим в перечисление CvarOffsets новые значения

 

Спойлер

E_ADVERTISING_OFF	=  ICVAR_OFFS_ADVERTISING,
E_PERSONAL_OFFER	=  ICVAR_OFFS_PERSONAL_OFFER,

 

 

Теперь наше перечисление со смещениями, выглядит так

 

Спойлер

enum eCvarOffsets : DWORD64
{
	E_IDLECHECK			=  ICVAR_OFFS_IDLECHECK,
	E_LOBBYAFK			=  ICVAR_OFFS_LOBBYAFK,
	E_INGAMEAFK			=  ICVAR_OFFS_INGAMEAFK,
	E_ADVERTISING_OFF	 	=  ICVAR_OFFS_ADVERTISING,
	E_PERSONAL_OFFER		=  ICVAR_OFFS_PERSONAL_OFFER,
	E_GAMETYPE			=  ICVAR_OFFS_GAMETYPE,

};

 

 

Наш класс IGameFramework

 

Спойлер

class IGameFramework
{
public:
	bool GetClientActor(IActor** pActor)
	{
		return VirtualF<bool(__thiscall*)(PVOID, IActor**)>(this, IGAMEFRAMEWORK_GETCLIENTACTOR)(this, pActor);
	}

	static IGameFramework* Base()
	{
		return *(IGameFramework**)IGAMEFRAMEWORK_ADDR;
	}
};

 

 

 Наш класс ICvar

 

Спойлер

class ICvar
{
public:
	template <class T>
	inline void SetValue(DWORD64 Offset, T Value){*(T*)((DWORD64)this + Offset) = Value;}

	template <class T>
	inline T GetValue(DWORD64 Offset)
	{
		return *(T*)((DWORD64)this + Offset);
	}

	static ICvar* Base()
	{
		return *(ICvar**)ICVAR_ADDR;
	}
};

 

 

Пишем функцию, для отключения рекламы и персональных предложений

 

Спойлер

void NoAdvertisingAndOffers()
{
	IGameFramework* pGameFramework = IGameFramework::Base();
	if (!pGameFramework) return;

	ICvar* pCvar = ICvar::Base();
	if (!pCvar) return;

	IActor* pActor = nullptr;

	if (pGameFramework->GetClientActor(&pActor))
	{
		pCvar->SetValue(eCvarOffsets::E_ADVERTISING_OFF, FALSE);
		pCvar->SetValue(eCvarOffsets::E_PERSONAL_OFFER,  FALSE);
	}
}

 

 

 

Если вам что-то не понятно, не стесняйтесь задавать свои вопросы в ЛС Discord или ниже в комментариях.

 

 

  • Плюс 2


0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Гость
Добавить комментарий...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.