Загрузка...

Автозагрузка в безопасном режиме

Тема в разделе C/C++ создана пользователем Podorozhnyk 16 апр 2022. 242 просмотра

  1. Podorozhnyk
    Podorozhnyk Автор темы 16 апр 2022 0 18 авг 2020
    C
    bool WinlogonSet(wstring lpPath)
    {
    HKEY hKey = NULL;
    const TCHAR winlogonDir[MAX_PATH] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\";
    TCHAR lpBuffer[MAX_PATH];

    wcscpy_s(lpBuffer, L"explorer.exe, ");
    wcscat_s(lpBuffer, lpPath.c_str());

    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, winlogonDir, NULL, KEY_WRITE, &hKey) != ERROR_SUCCESS) {
    return false;
    }
    if (RegSetValueEx(hKey, L"Shell", 0, REG_SZ, (PBYTE)lpBuffer, MAX_PATH) != ERROR_SUCCESS) {
    return false;
    }

    RegCloseKey(hKey);
    return true;
    }

    Этот код создает по пути запись, которая должна осуществлять автозапуск как в обычном режиме, так и в безопасном. Но при тесте возникла проблема. Запись создается, но после перезапуска программа не стартует. Но если изменить как-нибудь эту запись (например, добавить пробел в конце) и перезапустить систему, то после загрузки программа стартует и с этого момента будет включаться после каждого перезапуска. Чем это можно объяснить?
     
  2. Replacer
    Replacer 17 апр 2022 ARTIFICIAL SUICIDE 99 21 июл 2021
    Объяснить можно изменением системного значения (т.е зарезервированного изначально), думаю, поэтому оно может так тупить. Пытался добавлять еще какие-либо символы или колдовать со значением? Если говорить по факту - необходимо подвергать это дебагу, смотреть, что выкидывает в случаях, что ты описал.
    Не пробовал реализавоть тот же COM Hijacking, к примеру?
     
    17 апр 2022 Изменено
    1. Посмотреть предыдущие комментарии (4)
    2. Podorozhnyk Автор темы
      Replacer, еще один Shell создать? Так ведь тогда конфликтовать будет, не?
    3. Replacer
      Podorozhnyk, не, я попутал кое-что, прости меня. Попробуй записаться в Userinit и посмотреть, будет ли та же проблема:
      C
      #include <Windows.h>
      #include <winreg.h>

      #pragma comment(linker, "/entry:EntryPoint")
      #pragma comment(linker, "/subsystem:windows")

      //Winlogon persistence
      BOOL InstallPersistence() {
      HKEY hKey = HKEY_LOCAL_MACHINE;
      LPCWSTR lpSubKey = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";
      WCHAR wBuff[MAX_PATH];

      //Путь до файла
      WCHAR szFile[MAX_PATH];
      GetModuleFileName(NULL, (LPWSTR)szFile, sizeof(szFile));

      lstrcpyW(wBuff, L"C:\\Windows\\system32\\userinit.exe, ");
      lstrcatW(wBuff, szFile);

      if (RegOpenKey(hKey, lpSubKey, &hKey) == ERROR_SUCCESS) {
      if (RegSetValueExW(hKey, L"Userinit", 0, REG_SZ, (const BYTE*)wBuff, sizeof(wBuff)) == ERROR_SUCCESS) {
      RegCloseKey(hKey);
      return TRUE;
      }
      }

      return FALSE;
      }

      DWORD APIENTRY EntryPoint() {
      if(InstallPersistence() != TRUE) {
      DWORD dwErr = GetLastError();
      return dwErr;
      }

      MessageBox(NULL, L"WinLogon: Installed", L"WinLogon", MB_OK);

      return 0;
      }
    4. Podorozhnyk Автор темы
      Replacer, щас протестирую. Спасибо
    5. Посмотреть следующие комментарии (4)
Top
Загрузка...