Untitled
unknown
c_cpp
a month ago
7.4 kB
14
Indexable
// original
void obfuscate_get_function_pointer_origin(uint64_t origin_xor_1, uint64_t origin_xor_2, iw9_u4 secure_origin, vec3_t* out_origin)
{
uint32_t function_pointer_origin = (uint32_t)((aab_get_pointer_origin ^ origin_xor_1 ^ ~origin_xor_2) - game::module_base);
iw9_u3 out_pos = {};
{
if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_0)
{
get_obfuscation_origin_0(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_1)
{
get_obfuscation_origin_1(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_2)
{
get_obfuscation_origin_2(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_3)
{
get_obfuscation_origin_3(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_4)
{
get_obfuscation_origin_4(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_5)
{
get_obfuscation_origin_5(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_6)
{
get_obfuscation_origin_6(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_7)
{
get_obfuscation_origin_7(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_8)
{
get_obfuscation_origin_8(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_9)
{
get_obfuscation_origin_9(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_10)
{
get_obfuscation_origin_10(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_11)
{
get_obfuscation_origin_11(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_12)
{
get_obfuscation_origin_12(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_13)
{
get_obfuscation_origin_13(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_14)
{
get_obfuscation_origin_14(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_15)
{
get_obfuscation_origin_15(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_16)
{
get_obfuscation_origin_16(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_17)
{
get_obfuscation_origin_17(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_18)
{
get_obfuscation_origin_18(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_19)
{
get_obfuscation_origin_19(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_20)
{
get_obfuscation_origin_20(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_21)
{
get_obfuscation_origin_21(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_22)
{
get_obfuscation_origin_22(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_23)
{
get_obfuscation_origin_23(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_24)
{
get_obfuscation_origin_24(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_25)
{
get_obfuscation_origin_25(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_26)
{
get_obfuscation_origin_26(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_27)
{
get_obfuscation_origin_27(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_28)
{
get_obfuscation_origin_28(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_29)
{
get_obfuscation_origin_29(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_30)
{
get_obfuscation_origin_30(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_31)
{
get_obfuscation_origin_31(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_32)
{
get_obfuscation_origin_32(&secure_origin, &out_pos);
}
else if (function_pointer_origin == offsets::BO6::pose::o_get_obfuscation_origin_33)
{
get_obfuscation_origin_33(&secure_origin, &out_pos);
}
}
*out_origin =
{
*reinterpret_cast<f32*>(&out_pos.v[0]),
*reinterpret_cast<f32*>(&out_pos.v[1]),
*reinterpret_cast<f32*>(&out_pos.v[2])
};
}
// change the *out_origin at the end to the code after my info
// compared old dump to new and noticed o_decrypt_origin points
// to 2^-16 in both. game stores coords as int * 65536 so the
// multiplier converts back. was just reinterpreting bits before
// which worked on old binary by luck. need to actually do the
// math now
constexpr double poseMulti = 1.0 / 65536.0;
*out_origin =
{
static_cast<f32>(static_cast<double>(static_cast<int32_t>(out_pos.v[0])) * poseMulti),
static_cast<f32>(static_cast<double>(static_cast<int32_t>(out_pos.v[1])) * poseMulti),
static_cast<f32>(static_cast<double>(static_cast<int32_t>(out_pos.v[2])) * poseMulti)
};Editor is loading...
Leave a Comment