rce_patches/source/main.cpp
Ash Logan 9b71db4762 main: Bump version to v1.1, add DISTRO
Git/dev builds will be -git
Official builds will be -pretendo
There might be another type in the future depending on how things go
2023-07-14 14:20:52 +10:00

87 lines
No EOL
3.1 KiB
C++

#include "config.h"
#include "globals.h"
#include "patches.h"
#include "utils/logger.h"
#include <cstring>
#include <function_patcher/function_patching.h>
#include <vector>
#include <wups.h>
WUPS_PLUGIN_NAME("rce_patches");
WUPS_PLUGIN_DESCRIPTION("Patches security issues in WiiU games that could be triggered remotely");
WUPS_PLUGIN_VERSION("v1.1-" DISTRO);
WUPS_PLUGIN_AUTHOR("Rambo6Glaz, Maschell");
WUPS_PLUGIN_LICENSE("");
WUPS_USE_STORAGE("rce_patches"); // Unique id for the storage api
std::vector<PatchData> mk8Patches;
std::vector<PatchData> splatoonPatches;
void RemovePatches(std::vector<PatchData> &patchHandles) {
for (auto &patch : patchHandles) {
if (FunctionPatcher_RemoveFunctionPatch(patch.handle) != FUNCTION_PATCHER_RESULT_SUCCESS) {
DEBUG_FUNCTION_LINE_WARN("Failed to remove function patch %08X", patch.handle);
}
}
patchHandles.clear();
}
INITIALIZE_PLUGIN() {
DEBUG_FUNCTION_LINE("Patch functions");
if (FunctionPatcher_InitLibrary() != FUNCTION_PATCHER_RESULT_SUCCESS) {
OSFatal("rce_patches: FunctionPatcher_InitLibrary failed");
}
readStorage();
}
DEINITIALIZE_PLUGIN() {
RemovePatches(mk8Patches);
RemovePatches(splatoonPatches);
}
ON_APPLICATION_START() {
initLogging();
if (!gActivateMK8Patches && !mk8Patches.empty()) {
DEBUG_FUNCTION_LINE("Remove MK8 patches");
RemovePatches(mk8Patches);
} else if (gActivateMK8Patches && mk8Patches.empty()) {
DEBUG_FUNCTION_LINE("Add MK8 patches");
if (!MARIO_KART_8_AddPatches(mk8Patches)) {
DEBUG_FUNCTION_LINE_ERR("Failed to add Mario Kart 8 patches");
RemovePatches(mk8Patches);
}
}
if (!gActivateSplatoonPatches && !splatoonPatches.empty()) {
DEBUG_FUNCTION_LINE("Remove Splatoon patches");
RemovePatches(splatoonPatches);
} else if (gActivateSplatoonPatches && splatoonPatches.empty()) {
DEBUG_FUNCTION_LINE("Add Splatoon patches");
if (!SPLATOON_AddPatches(splatoonPatches)) {
DEBUG_FUNCTION_LINE_ERR("Failed to add Splatoon patches");
RemovePatches(splatoonPatches);
}
}
for (auto &patch : mk8Patches) {
bool isPatched = false;
if (FunctionPatcher_IsFunctionPatched(patch.handle, &isPatched) == FUNCTION_PATCHER_RESULT_SUCCESS && isPatched) {
DEBUG_FUNCTION_LINE("MK8: Function %s (handle: %08X) has been patched", patch.name.c_str(), patch.handle);
} else {
DEBUG_FUNCTION_LINE_ERR("MK8: Function %s (handle: %08X) has NOT been patched", patch.name.c_str(), patch.handle);
}
}
for (auto &patch : splatoonPatches) {
bool isPatched = false;
if (FunctionPatcher_IsFunctionPatched(patch.handle, &isPatched) == FUNCTION_PATCHER_RESULT_SUCCESS && isPatched) {
DEBUG_FUNCTION_LINE("Splatoon: Function %s (handle: %08X) has been patched", patch.name.c_str(), patch.handle);
} else {
DEBUG_FUNCTION_LINE_ERR("Splatoon: Function %s (handle: %08X) has NOT been patched", patch.name.c_str(), patch.handle);
}
}
}
ON_APPLICATION_ENDS() {
deinitLogging();
}