Регистрация службы из драйвера вручную

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by spider-intruder, 16 Feb 2008.

  1. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Столкнулся с такой проблемой.
    Драйвер должен зарегистрировать службу.
    (если кто знает как из драйвера заюзать SCM еще лучше)

    Пишу в реестр:

    HANDLE hkey=NULL;
    OBJECT_ATTRIBUTES oa1;
    UNICODE_STRING RegistryKey;
    UNICODE_STRING DNP,valname1,valname2,valname3;

    WCHAR DN[15]=L"LSecure Service"; //display name
    RtlInitUnicodeString(&DNP, L"DisplayName");

    ULONG value1=2;
    RtlInitUnicodeString(&valname1, L"Start");

    ULONG value2=32;
    RtlInitUnicodeString(&valname2, L"Type");

    ULONG value3=1;
    RtlInitUnicodeString(&valname3, L"ErrorControl");

    WCHAR path[16]=L"c:\\lservice.exe"; //display name
    RtlInitUnicodeString(&Ppath, L"ImagePath");

    RtlInitUnicodeString(&RegistryKey, L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\LSecure");
    InitializeObjectAttributes(&oa1, &RegistryKey, OBJ_CASE_INSENSITIVE, NULL, NULL);
    status = ZwCreateKey(&hkey,KEY_WRITE, &oa1, 0, NULL,REG_OPTION_NON_VOLATILE,NULL);
    ZwSetValueKey(hkey, &DNP, 0, REG_SZ, &DN, sizeof(DN));
    ZwSetValueKey(hkey, &valname1, 0, REG_DWORD, &value1, sizeof(ULONG));
    ZwSetValueKey(hkey, &valname2, 0, REG_DWORD, &value2, sizeof(ULONG));
    ZwSetValueKey(hkey, &valname3, 0, REG_DWORD, &value3, sizeof(ULONG));
    ZwSetValueKey(hkey, &Ppath, 0, REG_EXPAND_SZ, &path, sizeof(path));
    ZwClose(hkey);
    return status;


    В реестре с виду все нормально.
    Но когда делаю net start LSecure - вываливается с ошибкой. Файл не найден

    Может я не правильно пишу REG_EXPAND_SZ
     
    #1 spider-intruder, 16 Feb 2008
    Last edited: 16 Feb 2008
    4 people like this.
  2. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    для того чтобы установить службу мало добавить ее в реестр, надо еще зарегистрировать в SCM. Как это делать из ядра я точно не знаю, но возможно тебе поможет эта статья:
    _http://www.rootkit.com/newsread.php?newsid=419

    если это все же обязательно должно быть инициировано из ядра то можно создать юзермодную APC, которая регистрирует эту службу.
     
    #2 bons, 17 Feb 2008
    Last edited: 17 Feb 2008
  3. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    тутор от Four-F почитай
     
  4. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    Four-F пишет, что SCM регистрирует службы сразу после загрузки винды.
    Т.е. если добавить в службу реестр и перезагрузить то она будет установлена.

    Правда надо еще добавить REG_SZ с именем ObjectName и значением LocalSystem
    тогда твой код будет работать
     
  5. Nova

    Nova Green member

    Joined:
    15 Jul 2005
    Messages:
    1,233
    Likes Received:
    423
    Reputations:
    280
    КЕЗ не кипятись мои посты тоже удаляют =(
     
    _________________________
    1 person likes this.
  6. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    Проблема все же решилась или нет?
     
  7. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Конечно решилась.