aboutsummaryrefslogtreecommitdiff
path: root/client/src/injection/mapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/injection/mapper.cpp')
-rw-r--r--client/src/injection/mapper.cpp90
1 files changed, 40 insertions, 50 deletions
diff --git a/client/src/injection/mapper.cpp b/client/src/injection/mapper.cpp
index 0b993a0..052dc39 100644
--- a/client/src/injection/mapper.cpp
+++ b/client/src/injection/mapper.cpp
@@ -5,94 +5,84 @@
#include "mapper.h"
void mmap::thread(tcp::client& client) {
- while (client.mapper_data.imports.empty()) {
- std::this_thread::sleep_for(std::chrono::seconds(2));
+ while (client.state != tcp::client_state::imports_ready) {
+ std::this_thread::sleep_for(std::chrono::seconds(1));
}
- std::vector<util::process> process_list;
- util::fetch_processes(process_list);
+ util::system_data_t dat;
+ util::fetch_system_data(dat);
- auto needle = std::find_if(process_list.begin(), process_list.end(), [&](util::process& proc) {
- return proc.name() == "notepad++.exe";
+ auto needle = std::find_if(dat.processes.begin(), dat.processes.end(), [&](util::process_data_t& dat) {
+ return dat.name == client.selected_game.process_name;
});
- while (needle == process_list.end()) {
- std::this_thread::sleep_for(std::chrono::seconds(2));
-
- util::fetch_processes(process_list);
-
- io::logger->info("size {}", process_list.size());
-
- io::logger->info("waiting for process..");
-
- needle = std::find_if(process_list.begin(), process_list.end(), [&](util::process& proc) {
- return proc.name() == "notepad++.exe";
- });
+ if (needle == dat.processes.end()) {
+ io::log_error("failed to find process.");
+ return;
}
- if (!needle->open()) {
+ util::process32 proc(*needle);
+
+ if (!proc.open()) {
return;
}
- if (!needle->enum_modules()) {
- io::logger->error("failed to enum {} modules", needle->name());
+ if (!proc.enum_modules()) {
+ io::log_error("failed to enum {} modules", proc.name());
return;
}
- auto image = needle->allocate(client.mapper_data.image_size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
+ auto image = proc.allocate(client.mapper_data.image_size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (!image) {
- io::logger->error("failed to allocate memory for image.");
+ io::log_error("failed to allocate memory for image.");
return;
}
- io::logger->info("image base : {:x}", image);
+ io::log("image base : {:x}", image);
auto imports = nlohmann::json::parse(client.mapper_data.imports);
nlohmann::json final_imports;
for (auto& [key, value] : imports.items()) {
- auto base = needle->load(key);
+ auto base = proc.load(key);
if (!base) {
- io::logger->error("failed to load {}", key);
+ io::log_error("failed to load {}", key);
continue;
}
for (auto& i : value) {
auto name = i.get<std::string>();
- final_imports[name] = needle->module_export(base, name);
+ final_imports[name] = proc.module_export(base, name);
}
}
+ imports.clear();
nlohmann::json resp;
resp["alloc"] = image;
+ resp["id"] = client.selected_game.id;
client.write(tcp::packet_t(resp.dump(), tcp::packet_type::write, client.session_id, tcp::packet_id::image));
+ resp.clear();
- auto proc_imports = final_imports.dump();
- client.stream(proc_imports);
-
- proc_imports.clear();
+ client.stream(final_imports.dump());
final_imports.clear();
- imports.clear();
- client.mapper_data.imports.clear();
- io::logger->info("please wait...");
- while (client.mapper_data.image.size() != client.mapper_data.image_size) {
- std::this_thread::sleep_for(std::chrono::seconds(2));
+ io::log("please wait...");
+ while (client.state != tcp::client_state::image_ready) {
+ std::this_thread::sleep_for(std::chrono::seconds(1));
}
- if (!needle->write(image, client.mapper_data.image.data(), client.mapper_data.image.size())) {
- io::logger->error("failed to write image.");
+ if (!proc.write(image, client.mapper_data.image.data(), client.mapper_data.image.size())) {
+ io::log_error("failed to write image.");
return;
}
-
client.mapper_data.image.clear();
auto entry = image + client.mapper_data.entry;
- io::logger->info("entry : {:x}", entry);
+ io::log("entry : {:x}", entry);
static std::vector<uint8_t> shellcode = { 0x55, 0x89, 0xE5, 0x6A, 0x00, 0x6A, 0x01, 0x68, 0xEF, 0xBE,
0xAD, 0xDE, 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0xFF, 0xD0, 0x89, 0xEC, 0x5D, 0xC3 };
@@ -100,23 +90,23 @@ void mmap::thread(tcp::client& client) {
*reinterpret_cast<uint32_t*>(&shellcode[8]) = image;
*reinterpret_cast<uint32_t*>(&shellcode[13]) = entry;
- auto code = needle->allocate(shellcode.size(), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
- if (!needle->write(code, shellcode.data(), shellcode.size())) {
- io::logger->error("failed to write shellcode.");
+ auto code = proc.allocate(shellcode.size(), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
+ if (!proc.write(code, shellcode.data(), shellcode.size())) {
+ io::log_error("failed to write shellcode.");
return;
}
- io::logger->info("shellcode : {:x}", code);
-
- needle->thread(code);
+ io::log("shellcode : {:x}", code);
- needle->free(code, shellcode.size());
+ proc.thread(code);
- needle->close();
+ proc.free(code, shellcode.size());
- io::logger->info("done");
+ //proc.free(image, client.mapper_data.image_size);
- client.shutdown();
+ proc.close();
client.state = tcp::client_state::injected;
+
+ io::log("done");
} \ No newline at end of file