Как удалить ветку реестра или внести изменения ?

Тема в разделе "WASM.RESEARCH", создана пользователем man0war, 27 янв 2005.

  1. man0war

    man0war New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    85
    Адрес:
    Albania
    Добрый день.

    Есть программа , которая с помощью функции NtCreateKey

    создаёт в реестре ветку , в которой создаёт соответственно

    параметр и записывает в него значение.

    Изменить значение парметра с помощью regedt32 и regedit

    естественно не удаётся. Но и программными методами тоже.

    При открытии этих ключей реестра происходит ошибка

    C0000034 (STATUS_OBJECT_NAME_NOT_FOUND) .

    Как решить проблему ?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Хе, началось с этого, закончилось этим, думаю там все расписано (попробуй просто изменить длину ветки в дворде, смещение которого в OBJECT_ATTRIBUTES.object)
     
  3. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    Мобыть надо использовать OBJ_CASE_INSENSITIVE в OBJECT_ATTRIBUTES?
     
  4. man0war

    man0war New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    85
    Адрес:
    Albania
    Dr.Golova



    Я что-только не ставил , вплоть до

    OBJ_FORCE_ACCESS_CHECK . Не помогает.



    bogrus



    Я внимательно читал твою статью. Но она не помогла.

    А вот reg_link не понял.

    Разъясни подробней , плиз.
     
  5. man0war

    man0war New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    85
    Адрес:
    Albania
    bogrus

    OBJECT_ATTRIBUTES.object



    Если точнее , то OBJECT_ATTRIBUTES.objectname или

    ты имеешь ввиду поле OBJECT_ATTRIBUTES.length?
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Я тоже, но это не то

    Да именно его, проверь в юникоде ли текст ветки, и какова его реальная длина (для этого лучше посмотреть как прога его создавала)
    Код (Text):
    1. ;================================================================
    2. align               4
    3. struct              OBJECT_ATTRIBUTES
    4.       .length       dd sizeof.OBJECT_ATTRIBUTES
    5.       .directory    dd 0
    6.       .object       dd [b]sregpath[/b]
    7.       .attributes   dd OBJ_CASE_INSENSITIVE
    8.       .descriptor   dd 0
    9.       .service      dd 0
    10. ends
    11. oa                  OBJECT_ATTRIBUTES
    12. ;================================================================
    13. sregpath    dd      [b]size[/b]                         ; sizeof.regpath
    14. oregpath    dd      regpath                      ; offset regpath
    15. regpath     [b]du[/b]      '\Registry\Machine\SOFTWARE\Proga\Settings'[b],0[/b]
    16. ;================================================================
    17. size        equ     [b]$-regpath[/b]
    18. ;================================================================
    У меня тут намеренно (с помощью ",0") на 1 символ (2 байта) увеличена длина, на сколько надо у тебя, я не знаю (если в этом дело конечно)
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Если есть прога, то лучше бряк на NtOpenKey и посмотреть в стек на параметры
     
  8. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    bogrus

    У меня тут намеренно (с помощью ",0") на 1 увеличена длина, на сколько надо у тебя, я не знаю (если в этом дело конечно)



    "Есть такая маза"(с)Укуренные. На winternals.com есть статья про создание "нечитаемых" веток реестра при помощи NativeAPI и исходники примера.
     
  9. man0war

    man0war New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    85
    Адрес:
    Albania
    CyberManiac



    Я естественно читал эту статью , если ты имеешь ввиду

    reghide. Не помогла.
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    man0war reghide на sysinternals.com, давай код если не помогает
     
  11. man0war

    man0war New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    85
    Адрес:
    Albania
    Я на С написал. А ты врде бы сказал в статье ,

    что С пока не знаешь :) Если надо , то напишу на MASM-е и

    вышлю. ОК ?
     
  12. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Ну ума хватило разобратся в дебагере и чуть исправить сишный код под себя, я делал так:

    KeyName.Length = wcslen( KeyNameBuffer ) *sizeof(WCHAR)+2;
     
  13. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Кажется вот переделанный код, менявший параметр
    Код (Text):
    1. //==================================================================== ===================
    2. #include "reghide.h"
    3. WCHAR KeyNameBuffer[]        = L"\\Registry\\Machine\\SOFTWARE\\Proga\\TimeLock";
    4. WCHAR HiddenValueNameBuffer[]= L"Licensed";
    5. //==================================================================== ===================
    6. void start (void)   {
    7.  
    8.     HANDLE ntdll;
    9.         UNICODE_STRING KeyName, ValueName;
    10.         HANDLE SoftwareKeyHandle;
    11.         OBJECT_ATTRIBUTES ObjectAttributes;
    12.     int value=1;
    13.  
    14.     ntdll         = (void *) GetModuleHandle("ntdll.dll");
    15.     NtOpenKey     = (void *) GetProcAddress( ntdll, "NtOpenKey" );
    16.     NtSetValueKey = (void *) GetProcAddress( ntdll, "NtSetValueKey" );
    17.     NtClose       = (void *) GetProcAddress( ntdll, "NtClose" );
    18.  
    19.         KeyName.Buffer = KeyNameBuffer;
    20.         KeyName.Length = wcslen( KeyNameBuffer ) *sizeof(WCHAR)+2;
    21.         InitializeObjectAttributes( &ObjectAttributes, &KeyName,0x00000040, NULL, NULL );
    22.         NtOpenKey( &SoftwareKeyHandle, KEY_ALL_ACCESS, &ObjectAttributes );
    23.         ValueName.Buffer = HiddenValueNameBuffer;
    24.         ValueName.Length = wcslen( HiddenValueNameBuffer ) *sizeof(WCHAR);
    25.         NtSetValueKey( SoftwareKeyHandle, &ValueName, 0, REG_DWORD,&value,sizeof(DWORD));
    26.     NtClose (SoftwareKeyHandle);
    27.     ExitProcess(0); }
    28. //=======================================================================================
     
  14. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Ну тогда поройся на тему ACL (Access Control List) - возможно, там отдельным юзерам выставлено право доступак ключу реестра под названием "фигвам". Только делай это осторожно: человек, который делал это неосторожно, чуть было доступа к NTFS-разделу не лишился.
     
  15. man0war

    man0war New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    85
    Адрес:
    Albania
    CyberManiac

    Доступ у меня полный к этой ветке...



    bogrus

    Длину добавил. Без изменений.

    Разъясни насчёт Registry Link . Что-то я не вьехал.

    Плиз.
     
  16. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    А какую? Можно создать например такие ветки:



    path du '\Registry\Machine\SOFTWARE\Proga',0

    path du '\Registry\Machine\SOFTWARE\Proga',0,0,0

    path du '\Registry\Machine\SOFTWARE\Proga',0,0,0,0,0,0,0



    Regedit будет показывать три идентичные ветки, но ни одну не сможет открыть, и NtOpenKey не откроет, пока ты не укажешь точную длину ветки, незнаю как её узнать без проги, может перебором
     
  17. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    bogrus

    NtOpenKey не откроет, пока ты не укажешь точную длину ветки, незнаю как её узнать без проги, может перебором



    Может, NtEnumerateKey?
     
  18. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Да, похоже он подойдет, там есть соотв. поля, но я никогда ним не пользовался



    з.ы. переборщик в аттаче :)

    [​IMG] 1492075319__reglen.asm