2015-12-28 20:52:31 -05:00
|
|
|
#include "..\..\STDInclude.hpp"
|
2015-12-23 10:56:02 -05:00
|
|
|
|
|
|
|
namespace Components
|
|
|
|
{
|
|
|
|
Utils::Hook Materials::ImageVersionCheckHook;
|
|
|
|
|
|
|
|
void __declspec(naked) Materials::ImageVersionCheck()
|
|
|
|
{
|
|
|
|
__asm
|
|
|
|
{
|
|
|
|
cmp eax, 9
|
|
|
|
je returnSafely
|
|
|
|
|
|
|
|
jmp Materials::ImageVersionCheckHook.Original
|
|
|
|
|
|
|
|
returnSafely:
|
|
|
|
mov al, 1
|
|
|
|
add esp, 18h
|
|
|
|
retn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-12-30 10:06:58 -05:00
|
|
|
Game::Material* Materials::VerifyMaterial(Game::Material* material)
|
|
|
|
{
|
|
|
|
if (!IsBadReadPtr(material, 4) && !IsBadReadPtr(material->name, 1))
|
|
|
|
{
|
|
|
|
return material;
|
|
|
|
}
|
|
|
|
|
|
|
|
return Game::DB_FindXAssetHeader(Game::XAssetType::ASSET_TYPE_MATERIAL, "default").material;
|
|
|
|
}
|
|
|
|
|
|
|
|
void __declspec(naked) Materials::DrawMaterialStub()
|
|
|
|
{
|
|
|
|
__asm
|
|
|
|
{
|
|
|
|
push eax
|
|
|
|
call Materials::VerifyMaterial
|
|
|
|
add esp, 4h
|
|
|
|
|
|
|
|
mov edx, 5310F0h
|
|
|
|
jmp edx
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-12-23 10:56:02 -05:00
|
|
|
Materials::Materials()
|
|
|
|
{
|
|
|
|
// Allow codo images
|
|
|
|
Materials::ImageVersionCheckHook.Initialize(0x53A456, Materials::ImageVersionCheck, HOOK_CALL)->Install();
|
2015-12-30 10:06:58 -05:00
|
|
|
|
|
|
|
// Fix material pointer exploit
|
|
|
|
Utils::Hook(0x534E0C, Materials::DrawMaterialStub, HOOK_CALL).Install()->Quick();
|
2015-12-23 10:56:02 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
Materials::~Materials()
|
|
|
|
{
|
|
|
|
Materials::ImageVersionCheckHook.Uninstall();
|
|
|
|
}
|
|
|
|
}
|