diff options
author | Vaxry <[email protected]> | 2024-04-28 18:28:19 +0100 |
---|---|---|
committer | Vaxry <[email protected]> | 2024-04-28 18:28:19 +0100 |
commit | 28c85619243e6320e75d7abcfe8244fa99d054dd (patch) | |
tree | c81b09958b2e8a07088d51d74c505f4c1d8bd8c9 | |
parent | 82a6fba6ec0c5a667582b9ad48adadc36bef2702 (diff) | |
download | Hyprland-28c85619243e6320e75d7abcfe8244fa99d054dd.tar.gz Hyprland-28c85619243e6320e75d7abcfe8244fa99d054dd.zip |
hooksystem: use a random 700 directory for assembler
-rw-r--r-- | src/plugins/HookSystem.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/plugins/HookSystem.cpp b/src/plugins/HookSystem.cpp index 59654816..5082f54c 100644 --- a/src/plugins/HookSystem.cpp +++ b/src/plugins/HookSystem.cpp @@ -1,6 +1,7 @@ #include "HookSystem.hpp" #include "../debug/Log.hpp" #include "../helpers/VarList.hpp" +#include "../managers/TokenManager.hpp" #define register #include <udis86.h> @@ -135,24 +136,30 @@ CFunctionHook::SAssembly CFunctionHook::fixInstructionProbeRIPCalls(const SInstr currentAddress += len; } - std::ofstream ofs("/tmp/hypr/.hookcode.asm", std::ios::trunc); + const auto RANDOMDIR = "/tmp/hypr/" + g_pTokenManager->getRandomUUID(); + + if (!std::filesystem::create_directory(RANDOMDIR)) + return {}; + + std::filesystem::permissions(RANDOMDIR, std::filesystem::perms::owner_all, std::filesystem::perm_options::replace); + + std::ofstream ofs(RANDOMDIR + "/.hookcode.asm", std::ios::trunc); ofs << assemblyBuilder; ofs.close(); - std::string ret = execAndGet( - "cc -x assembler -c /tmp/hypr/.hookcode.asm -o /tmp/hypr/.hookbinary.o 2>&1 && objcopy -O binary -j .text /tmp/hypr/.hookbinary.o /tmp/hypr/.hookbinary2.o 2>&1"); + std::string ret = execAndGet(std::string{"cc -x assembler -c " + RANDOMDIR + "/.hookcode.asm -o " + RANDOMDIR + "/.hookbinary.o 2>&1 && objcopy -O binary -j .text " + + RANDOMDIR + "/.hookbinary.o " + RANDOMDIR + "/.hookbinary2.o 2>&1"} + .c_str()); Debug::log(LOG, "[functionhook] assembler returned:\n{}", ret); - if (!std::filesystem::exists("/tmp/hypr/.hookbinary2.o")) { - std::filesystem::remove("/tmp/hypr/.hookcode.asm"); - std::filesystem::remove("/tmp/hypr/.hookbinary.asm"); + if (!std::filesystem::exists(RANDOMDIR + "/.hookbinary2.o")) { + std::filesystem::remove(RANDOMDIR + "/.hookcode.asm"); + std::filesystem::remove(RANDOMDIR + "/.hookbinary.asm"); return {}; } - std::ifstream ifs("/tmp/hypr/.hookbinary2.o", std::ios::binary); + std::ifstream ifs(RANDOMDIR + "/.hookbinary2.o", std::ios::binary); returns = {std::vector<char>(std::istreambuf_iterator<char>(ifs), {})}; ifs.close(); - std::filesystem::remove("/tmp/hypr/.hookcode.asm"); - std::filesystem::remove("/tmp/hypr/.hookbinary.o"); - std::filesystem::remove("/tmp/hypr/.hookbinary2.o"); + std::filesystem::remove_all(RANDOMDIR); return returns; } |