Temp commit. Auth3D Object HRC breakdown

This commit is contained in:
korenkonder
2022-12-10 03:14:07 +03:00
parent a15befd8fb
commit c96c52d4d3
198 changed files with 26200 additions and 14772 deletions
+17 -50
View File
@@ -10,56 +10,44 @@
#include "shader_table.hpp"
#include <Windows.h>
typedef struct patch_struct {
struct patch_struct {
void* address;
size_t func_ptr;
void* orig_data;
} patch_struct;
};
void* inject_data(void* address, void* data, size_t count) {
void inject_data(void* address, void* data, size_t count) {
DWORD old_protect;
VirtualProtect(address, count, PAGE_EXECUTE_READWRITE, &old_protect);
void* orig_data = force_malloc(count);
memcpy(orig_data, (const void*)address, count);
memcpy(address, (const void*)data, count);
memmove(address, data, count);
VirtualProtect(address, count, old_protect, &old_protect);
return orig_data;
}
uint8_t inject_uint8_t(void* address, uint8_t data) {
void inject_uint8_t(void* address, uint8_t data) {
DWORD old_protect;
VirtualProtect(address, sizeof(uint8_t), PAGE_EXECUTE_READWRITE, &old_protect);
uint8_t value = *(uint8_t*)address;
*(uint8_t*)address = data;
VirtualProtect(address, sizeof(uint8_t), old_protect, &old_protect);
return value;
}
uint16_t inject_uint16_t(void* address, uint16_t data) {
void inject_uint16_t(void* address, uint16_t data) {
DWORD old_protect;
VirtualProtect(address, sizeof(uint16_t), PAGE_EXECUTE_READWRITE, &old_protect);
uint16_t value = *(uint16_t*)address;
*(uint16_t*)address = data;
VirtualProtect(address, sizeof(uint16_t), old_protect, &old_protect);
return value;
}
uint32_t inject_uint32_t(void* address, uint32_t data) {
void inject_uint32_t(void* address, uint32_t data) {
DWORD old_protect;
VirtualProtect(address, sizeof(uint32_t), PAGE_EXECUTE_READWRITE, &old_protect);
uint32_t value = *(uint32_t*)address;
*(uint32_t*)address = data;
VirtualProtect(address, sizeof(uint32_t), old_protect, &old_protect);
return value;
}
uint64_t inject_uint64_t(void* address, uint64_t data) {
void inject_uint64_t(void* address, uint64_t data) {
DWORD old_protect;
VirtualProtect(address, sizeof(uint64_t), PAGE_EXECUTE_READWRITE, &old_protect);
uint64_t value = *(uint64_t*)address;
*(uint64_t*)address = data;
VirtualProtect(address, sizeof(uint64_t), old_protect, &old_protect);
return value;
}
static patch_struct patch_data[] = {
@@ -89,8 +77,6 @@ static patch_struct patch_data[] = {
//{ (void*)0x00000001405F48F0, (uint64_t)&ExOsageBlock__Field_58, },
};
static uint64_t shader_bind_func_orig_data[6];
void inject_patches() {
uint8_t buf[12];
buf[0] = 0x48;
@@ -100,36 +86,17 @@ void inject_patches() {
for (int32_t i = 0; i < sizeof(patch_data) / sizeof(patch_struct); i++)
if (patch_data[i].func_ptr) {
free_def(patch_data[i].orig_data);
memcpy(&buf[2], &patch_data[i].func_ptr, sizeof(uint64_t));
patch_data[i].orig_data = inject_data(patch_data[i].address, buf, 12);
inject_data(patch_data[i].address, buf, 12);
}
glutMainLoop = (void (*)())inject_uint64_t((void*)0x0000000140966008, (uint64_t)&gl_get_func_pointers);
glutMainLoop = (void (FASTCALL*)())*(size_t*)0x0000000140966008;
inject_uint64_t((void*)0x0000000140966008, (uint64_t)&gl_get_func_pointers);
shader_bind_func_orig_data[0] = inject_uint64_t(
(void*)&shader_name_bind_func_table[0].bind_func, (uint64_t)&shader_bind_blinn);
shader_bind_func_orig_data[1] = inject_uint64_t(
(void*)&shader_name_bind_func_table[1].bind_func, (uint64_t)&shader_bind_cloth);
shader_bind_func_orig_data[2] = inject_uint64_t(
(void*)&shader_name_bind_func_table[2].bind_func, (uint64_t)&shader_bind_hair);
shader_bind_func_orig_data[3] = inject_uint64_t(
(void*)&shader_name_bind_func_table[3].bind_func, (uint64_t)&shader_bind_membrane);
shader_bind_func_orig_data[4] = inject_uint64_t(
(void*)&shader_name_bind_func_table[4].bind_func, (uint64_t)&shader_bind_eye_ball);
shader_bind_func_orig_data[5] = inject_uint64_t(
(void*)&shader_name_bind_func_table[5].bind_func, (uint64_t)&shader_bind_tone_map);
}
void inject_restore() {
for (int32_t i = 0; i < sizeof(patch_data) / sizeof(patch_struct); i++)
if (patch_data[i].func_ptr) {
void* data = inject_data(patch_data[i].address, patch_data[i].orig_data, 12);
free_def(data);
}
inject_uint64_t((void*)0x0000000140966008, (uint64_t)glutMainLoop);
for (int32_t i = 0; i < 6; i++)
inject_uint64_t(shader_name_bind_func_table[i].bind_func, shader_bind_func_orig_data[i]);
inject_uint64_t((void*)&shader_name_bind_func_table[0].bind_func, (uint64_t)&shader_bind_blinn);
inject_uint64_t((void*)&shader_name_bind_func_table[1].bind_func, (uint64_t)&shader_bind_cloth);
inject_uint64_t((void*)&shader_name_bind_func_table[2].bind_func, (uint64_t)&shader_bind_hair);
inject_uint64_t((void*)&shader_name_bind_func_table[3].bind_func, (uint64_t)&shader_bind_membrane);
inject_uint64_t((void*)&shader_name_bind_func_table[4].bind_func, (uint64_t)&shader_bind_eye_ball);
inject_uint64_t((void*)&shader_name_bind_func_table[5].bind_func, (uint64_t)&shader_bind_tone_map);
}