Создание ключей Реестра,с нулевым символом (NULL-символ)

Тема в разделе "WASM.BEGINNERS", создана пользователем yuri, 10 май 2008.

  1. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    Создание ключей Реестра, в имени которых содержится так называемый нулевой символ (NULL-символ), то есть символ с кодом равным нулю.

    Мужики помогите разобраться с этой проблемой

    .386
    .model flat,stdcall
    option casemap:none


    include \masm32\include\ntdll.inc
    includelib \masm32\lib\ntdll.lib

    .const



    .data?

    szSubKey db "\Registry\Machine\SOFTWARE\мой раздел",0

    .data

    .code
    start:

    local hKey:HANDLE
    local dwDisposition:lol: WORD




    invoke ZwCreateKey, addr hKey, KEY_WRITE, (?????), 0, NULL, REG_OPTION_VOLATILE, addr dwDisposition


    или кто может с помочь с параметрами,структурами этой функции
     
  2. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    .data
    skey db 'SOFTWARE\MyKey',0

    .code
    ...

    regset proc
    LOCAL hKey : dword
    invoke RegCreateKeyEx,HKEY_LOCAL_MACHINE,ADDR skey,0,0,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,0,ADDR hKey,0
    regset endp
     
  3. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    Дело в том что нужна именно функция ZwCreateKey(ntdll.inc),так как ключи созданные этой функцией не возможно

    удалить простыми редакторами реестра(например Regedit)

    Причина, по которой ключи данного типа следует относить к категории "мусорных", заключается в том,

    что к данным ключам не удается получить полноценного доступа ни из одной обычной программы

    (что означает то, что эти ключи - скрытые ключи).


    Нулевые символы будут заменяться (на экране монитора, а не в Реестре!)

    специальной условной последовательностью обычных символов, "|0|".

    Резервные копии ключей, в которых присутствуют нулевые символы, практически бесполезны.
    Восстановить исходное содержимое Реестра с помощью импорта таких ключей невозможно.
    И причина этого вполне понятна: редактор Реестра также, как и подавляющее большинство
    других программ для работы с Реестром, просто не умеет работать со нулевыми ключами.
    Но все же существование такого REG-файла имеет для нас некоторый смысл, позволяя с его
    помощью по крайней мере детально изучить данные, хранящиеся в таком NULL-ключе.


    И для того чтобы удалить эти ключи нужна ZwCreateKey или ZwOpenKey что бы потом применить

    ZwDeleteKey

    А на эти функции не могу найти параметры и структуры

    Заранее благодарен
     
  4. ABCetc

    ABCetc New Member

    Публикаций:
    0
    Регистрация:
    1 май 2008
    Сообщения:
    9
    NTSTATUS ZwCreateKey(
    OUT PHANDLE KeyHandle,
    IN ACCESS_MASK DesiredAccess,
    IN POBJECT_ATTRIBUTES ObjectAttributes,
    IN ULONG TitleIndex,
    IN PUNICODE_STRING Class OPTIONAL,
    IN ULONG CreateOptions,
    OUT PULONG Disposition OPTIONAL );

    ObjectAttributes - указатель на OBJECT_ATTRIBUTES, обычно создается
    с помощью InitializeObjectAttributes, но если вызывать не из системного
    контекста, то при вызове функции надо указать атрибут OBJ_KERNEL_HANDLE.

    Сама структура:
    typedef struct _OBJECT_ATTRIBUTES {
    ULONG Length;
    HANDLE RootDirectory;
    PUNICODE_STRING ObjectName;
    ULONG Attributes;
    PVOID SecurityDescriptor;
    PVOID SecurityQualityOfService;} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
    typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES;

    TitleIndex - для драйверов ставим 0

    Class - указатель на Юникод (а куда ж без него) строку с именем класса ключа (о!)

    Disposition - указывает на переменную, куды будет занесно REG_CREATED_NEW_KEY, если
    создан новый ключ, или REG_OPENED_EXISTING_KEY - если такое уже проходили.


    В том что написал - сам ничего не понял. Тупо взято с Майкрософтовского сайта.
    Там при желании поподробнее можно посмотреть. А вообще г..гл рулит.

    P.S. на закуску http://www.osronline.com/DDKx/kmarch/k111_4omq.htm
    Да и тут вроде промелькнуло http://wasm.ru/print.php?article=drvw2k10
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    yuri бред какойто, во первых если так и есть смысл от такого ключа? во вторы юзермодные функции это всеголишь оболочки для драйверных, и если юзермод не читает то и Zw. Nt. тоже не прочтёт, если параметр SZ(Null Terminated String) то ни о каких нулях и речи не может идти, другое дело бинарные данные, и воабще если интересно как работают именно Zw( а в NTDLL они тоже самое что и NT, это в r0 они различаются) то читай http://wasm.ru/article.php?article=drvw2k10
     
  6. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    Если это бред то каким способом написана эта прога? И сможешь в этом ключе с помощью Regedit найти (HIDDEN VALUE)
     
  7. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    прикрепить файл что то не получается прога Reghide
     
  8. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Перехват API? возможно в r0
     
  9. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    как файл прикрепить конкретнее что то неполучается
     
  10. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    Ладно, а написание кода создания такого ключа ,хотя бы можно посмотреть, как я понял нужны ntddk.inc
     
  11. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    .386
    .model flat,stdcall
    option casemap:none
    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\gdi32.inc
    include \masm32\include\comdlg32.inc
    include \masm32\include\shell32.inc
    include \masm32\include\advapi32.inc

    include \masm32\include\w2k\ntdll.inc
    include \masm32\include\w2k\ntstatus.inc
    include \masm32\include\w2k\ntddk.inc

    include \masm32\Macros\Strings.mac

    includelib \masm32\lib\ntdll.lib

    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\gdi32.lib
    includelib \masm32\lib\comdlg32.lib
    includelib \masm32\lib\shell32.lib
    includelib \masm32\lib\advapi32.lib

    .const

    CCOUNTED_UNICODE_STRING "\\Registry\\Machine\\Software\\Мой раздел ", g_usMachineKeyName0, 4
    CCOUNTED_UNICODE_STRING "Моя папка" , g_usValueName, 4

    .data?



    WndProc pro

    local oa:OBJECT_ATTRIBUTES
    local dwDisposition:lol: WORD
    local hKey:HANDLE


    lea ecx, oa
    InitializeObjectAttributes ecx, offset g_usMachineKeyName0, OBJ_CASE_INSENSITIVE, NULL, NULL

    invoke ZwCreateKey, addr hKey,KEY_ALL_ACCESS, addr oa, ???????,offset g_usMachineClassName,REG_OPTION_NON_VOLATILE, addr dwDisposition

    invoke ZwSetValueKey, hKey, addr g_usValueName, 0, REG_SZ,addr g_wszStringData, sizeof g_wszStringData

    invoke ZwClose, hKey


    WndProc endp

    Мужики мож подскажите что здесь не правильно чтоб создать этот ключ с нулевым символом .Заранее благодарен
     
  12. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    TitleIndex
    Device and intermediate drivers set this parameter to zero. ABCetc правда уже это написал

    yuri
    Поставь себе ДДК что ли.
     
  13. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    Спасибо кто помогал ,"скрытый "ключ создаётся,но мне нужен раздел HKEY_CURRENT_USER а
    точнее (HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{111-2222-333})


    CCOUNTED_UNICODE_STRING "HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{111-2222-333}
    ", g_usMachineKeyName0,4

    При компиляции MASM ругается что очень сложный параметр


    Мож кто подскажет как это сделать правильно
     
  14. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    offtop:
    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Software\New Key #1]
    "New Value #1"=hex(f):

    ? :)
     
  15. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    Как я понял для раздела HKEY_LOCAL_MACHINE нужно "\Registry\Machine"

    для HKEY_USER нужно "\Registry\User"

    как записать имя раздела HKEY_CURRENT_USER - "\????\???\"


    CCOUNTED_UNICODE_STRING "\????\???\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{111-2222-333}"


    Semiono можно поконкретнее что то я вас не очень то понял
     
  16. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Не, я тоже не то написал! Я думал нуль в параметрах надо создать...
     
  17. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    .386
    .model flat,stdcall
    option casemap:none
    include \masm32\include\w2k\ntdll.inc
    include \masm32\include\w2k\ntstatus.inc
    include \masm32\include\w2k\ntddk.inc

    include \masm32\Macros\Strings.mac

    includelib \masm32\lib\ntdll.lib

    .const

    CCOUNTED_UNICODE_STRING "\\Registry\User"\\Software\\Microsoft", g_usMachineKeyName, 4





    .data?



    WndProc pro

    local oa:OBJECT_ATTRIBUTES
    local dwDisposition:lol: WORD
    local hKey:HANDLE


    lea ecx, oa
    InitializeObjectAttributes ecx, offset g_usMachineKeyName, OBJ_CASE_INSENSITIVE, NULL, NULL

    invoke ZwCreateKey, addr hKey,KEY_ALL_ACCESS, addr oa, 0,0,REG_OPTION_NON_VOLATILE, addr dwDisposition


    invoke ZwClose, hKey


    WndProc endp


    Мужики подскажите каким способом можно "засунуть" в CCOUNTED_UNICODE_STRING это длинное название раздела

    "\\Registry\User"\\Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved
    \\Мой раздел "

    Как я понял в CCOUNTED_UNICODE_STRING маленький лимит на символы

    Заранее благодарен
     
  18. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    ну определи как обычную строку, а потом вызови RtlAnsiStringToUnicodeString

    или тупо

    RegStr dw '\','\',R','e','g',.......,0
     
  19. yuri

    yuri New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2008
    Сообщения:
    47
    2FED извините за наивность, поконкретнее можно,
    лучше с кодом
    (что то я совсем запутался)