Исходник Информация Как удалить приложение из NVIDIA Control Panel

Receiver

leet-cheats 👑
Автор темы
Проверенный
624
892
QQ TEAM! думаю многие знают или даже сталкивались с проверками от админов сервочков и вас сто процентов заставляли открывать панельку нвидиа, чтобы прочекать проги с гуишкой. так вот, щас разберём что это такое, как оно устроено изнутри и как это наебошить. значится список программулек по пути C:\ProgramData\NVIDIA Corporation\Drs\nvAppTimestamps. казалось бы можно просто удалить этот файлик, но тогда вас забанят за то что в панельке ничего нет=) поэтому я расчекал этот файл (по закону подлости там содержится: хуня + хуня + путь) и на кондициях написал функцию удаляющую путь по условию из коллбека.

Разбор формата файла:

1731707834609.png


из курса C++ за 2 часа мы помним то что каждая C-строка оканчивается нуль-терминатором. поэтому берём строку с запасом в 1 байт. помимо наших предположений, это так же учитывается в поле с размером строки, доказать это просто: 4A = 74. 74 / 2 = 37. значит длина первого пути со скриншота равна 37 байтам памяти.

Исходный код:

C++:
namespace nvAppTimestamps {
/**
 * Удалить запись из NVIDIA Control Panel
 * @param timestamp_path Путь до nvAppTimestamps (включительно)
 * @param condition Callback функция условия удаления
 * @return Nihua! Дропает рядом файл с расширением .new
 **/
void remove_if(const std::string& timestamp_path,
               const std::function<bool(wchar_t*)>& condition) {
  std::ifstream ifs{timestamp_path, std::ios::in | std::ios::binary};
  ifs.unsetf(std::ios::skipws);

  std::ofstream ofs{timestamp_path + ".new", std::ios::out | std::ios::binary};
  ofs.unsetf(std::ios::skipws);

  std::uint8_t unused{};
  ifs.read(reinterpret_cast<char*>(&unused), sizeof(unused));
  ofs.write(reinterpret_cast<char*>(&unused), sizeof(unused));

  while (true) {
    std::uint8_t unused_2[3]{};
    ifs.read(reinterpret_cast<char*>(&unused_2), sizeof(unused_2));
    if (ifs.eof()) break;
    std::uint16_t path_size{};
    ifs.read(reinterpret_cast<char*>(&path_size), sizeof(path_size));
    wchar_t* path = new wchar_t[path_size];
    ifs.read(reinterpret_cast<char*>(path), path_size);
    std::uint8_t unused_3[7]{};
    ifs.read(reinterpret_cast<char*>(&unused_3), sizeof(unused_3));

    if (!condition(path)) {
      ofs.write(reinterpret_cast<char*>(&unused_2), sizeof(unused_2));
      ofs.write(reinterpret_cast<char*>(&path_size), sizeof(path_size));
      ofs.write(reinterpret_cast<char*>(path), path_size);
      ofs.write(reinterpret_cast<char*>(&unused_3), sizeof(unused_3));
    }

    delete[] path;
  }

  ofs.write("\x01", 1);
}
};  // namespace nvAppTimestamps

Пример использования:
C++:
std::filesystem::path nvidia_path{"C:\\ProgramData\\NVIDIA Corporation\\Drs\\nvAppTimestamps"};
nvAppTimestamps::remove_if(nvidia_path.string(), [](wchar_t* path) {
  return std::wstring{path}.find(L"app.exe") != std::wstring::npos; // true - удалить, false - оставить
});
std::filesystem::rename(nvidia_path.string() + ".new", nvidia_path);
 
Последнее редактирование: