5 / 5 / 0
Регистрация: 12.08.2009
Сообщений: 25
1

ZwOpenSection ACCESS_VIOLETION

14.09.2009, 18:10. Показов 2763. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Делаю вот что:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
; #########################################################################
 
    .686P
    .model flat, stdcall
    option casemap :none   ; case sensitive
 
; #########################################################################
 
    extern RtlInitUnicodeString@8 : near
    extern ZwOpenSection@12 : near          
          
; #########################################################################
 
    includelib \masm32\lib\ntdll.lib
    
; #########################################################################
 
    UNICODE_STRING struct
        Len                               dw ?
        MaximumLength               dw ?    
        Buffer                            dd ?
    UNICODE_STRING ends
    OBJECT_ATTRIBUTES struct
        OALength                       dd ?
        RootDirectory                  dd ?
        ObjectName                    dd ?
        Attribute                        dd ?
        SecurityDescriptor           dd ?
        SecurityQualityOfService   dd ?
    OBJECT_ATTRIBUTES ends                  
 
    .data
    
        UNISTR          UNICODE_STRING <?>
        MemStr          db '\Device\PhysicalMemory', 0
        ObjAttr         OBJECT_ATTRIBUTES <?>
        Hwnd            dd ?
        
    .code
    
    start:                                
        
        push offset MemStr ; исходная строка
        push offset UNISTR ; Структура полученой строки
        call RtlInitUnicodeString@8 ; перевод строки в UNICODE
        
        ; заполнение OBJECT_ATTRIBUTES
        
        mov eax, 18h ; размер OBJECT_ATTRIBUTES в байтах
        
        mov [ObjAttr.OALength], eax
        
        xor eax, eax                        
        mov [ObjAttr.RootDirectory], eax ; нулевая директория
        mov eax, offset ObjAttr ; указатель на UNICODE_STRING
        mov [ObjAttr.ObjectName], eax
        xor eax, eax
        mov eax, 240h ; аттрибуты объекта OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE
        
        mov [ObjAttr.Attribute], eax ; OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE
        xor eax, eax
        mov [ObjAttr.SecurityDescriptor], eax ; ноль
        mov [ObjAttr.SecurityQualityOfService], eax ; ноль
        mov eax, 60000h ; аттрибуты доступа к объекту 20000h OR 40000h = 60000h (WRITE_DAC or READ_CONTROL)
        
        push offset ObjAttr
        push eax
        push Hwnd
        call ZwOpenSection@12 ; собственно гвоздь программы
        mov ecx, Hwnd ; проверка получения Хендела
        ret                             
        
    end start
Ну вот вроде эксперементировал со структурами и указателями на структуры и аттрибутами, остановился вот на этом варианте функция выбрасывает STATUS_ACCESS_VIOLETION (C0000005)
Вот...
Чего я делаю неправильно?
0
14.09.2009, 18:10
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
14.09.2009, 20:39 2
Во-первых MemStr никак не юникод строка.
Во-вторых нужно ложить в стек указатель, а не сам хендл, которого еще нет
Код
push [B]offset[/B]  Hwnd
В-третьих в мсдн написано, что доступа к устройству \Device\PhysicalMemory начиная с win2003 sp1 не имеет даже System.
1
5 / 5 / 0
Регистрация: 12.08.2009
Сообщений: 25
14.09.2009, 21:28  [ТС] 3
Цитата Сообщение от Goodwin98 Посмотреть сообщение
Во-первых MemStr никак не юникод строка.
Во-вторых нужно ложить в стек указатель, а не сам хендл, которого еще нет
Код
push [B]offset[/B]  Hwnd
В-третьих в мсдн написано, что доступа к устройству \Device\PhysicalMemory начиная с win2003 sp1 не имеет даже System.
По во-первых: т.е. последующая функция RtlInitUnicodeString не переделывает строку заданую в Юникод строку... ладно а как надо было задать правильно - я просто капался во всякого рода источниках и не нашел примера как задать PCWSTR как сказано делать в msdn... Наверно нетам копался.
По во-вторых: Да...
По в-третьих: Я это на ХР СП2 кочевряжу (без каких-либо заплпток и тому подобного). Ну в некоторых источниках пишут что \Device\PhysicalMemory еще доступен как в ХР СП2 так и в 2003м СП2. Если получиться - хорошо, не получиться буду страдать над драйвером...
0
5 / 5 / 0
Регистрация: 12.08.2009
Сообщений: 25
15.09.2009, 13:17  [ТС] 4
Переделал воттак
Assembler
1
2
3
4
5
6
7
8
9
10
11
MemStr dw 23 dup (0)
...
mov [MemStr], 0EFFFh ;ключ Юникодовский хз зачем но все юникоды с него начинаются
mov [MemStr + 2], 5Ch ; бэкслешь в юникоде: на выходе 005Сh 16 бит
mov [MemStr + 4], 54h ; D в Юникоде: 0054h и т.д. чтобы собралось \Device\PhysicalMemory
...
; в конце
push offset ObjAttr
push eax
push offset Hwnd
call ...
Теперь выбрасывет код 80000002, который означает либо то что драйвер занят либо то что параметры не соответствуют (рылся в хедерах DDK и API из пакета WinDDK там просто несколько дефайнов для этого кода). Ну собственно если драйвер то значит доступ к памяти закрыт таким способом, а если параметры то вчем делото не пойму никак.
Да и в строке 57 первого поста там на самом деле:
Assembler
1
2
3
...
mov eax, offset UNISTR
...
Ато я позно вечером делал две структуры перепутал местами))))
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
15.09.2009, 13:53 5
Когда я смотрел ваш код, то тоже встречался с этой ошибкой. Она означает, что данные не выровнены по границе 16 байт. А вот насчет 57 строки я и не заметил...
Кароче вот этот код уже что-то возвращает
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
; #########################################################################
 
    .686P
    .model flat, stdcall
    option casemap :none   ; case sensitive
 
; #########################################################################
 
    extern RtlInitUnicodeString@8 : near
    extern ZwOpenSection@12 : near          
          
; #########################################################################
 
    includelib \masm32\lib\ntdll.lib
    
; #########################################################################
 
    UNICODE_STRING struct
        Len                               dw ?
        MaximumLength               dw ?    
        Buffer                            dd ?
    UNICODE_STRING ends
    OBJECT_ATTRIBUTES struct
        OALength                       dd ?
        RootDirectory                  dd ?
        ObjectName                    dd ?
        Attribute                        dd ?
        SecurityDescriptor           dd ?
        SecurityQualityOfService   dd ?
    OBJECT_ATTRIBUTES ends                  
 
.data
    Hwnd dd ?
    UNISTR UNICODE_STRING <?>
    
    MemStr dw '\','D','e','v','i','c','e','\','P','h','y','s','i','c','a','l','M','e','m','o','r','y', 0
    dw ?
    ObjAttr OBJECT_ATTRIBUTES <?>
    
    
.code
 
start:                                
    
    push offset MemStr ; исходная строка
    push offset UNISTR ; Структура полученой строки
    call RtlInitUnicodeString@8 ; перевод строки в UNICODE
    
    ; заполнение OBJECT_ATTRIBUTES
    
    mov eax, 18h ; размер OBJECT_ATTRIBUTES в байтах
    
    mov [ObjAttr.OALength], eax
    
    xor eax, eax                        
    mov [ObjAttr.RootDirectory], eax ; нулевая директория
    mov eax, offset UNISTR ; указатель на UNICODE_STRING
    mov [ObjAttr.ObjectName], eax
    xor eax, eax
    mov eax, 240h ; аттрибуты объекта OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE
    
    mov [ObjAttr.Attribute], eax ; OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE
    xor eax, eax
    mov [ObjAttr.SecurityDescriptor], eax ; ноль
    mov [ObjAttr.SecurityQualityOfService], eax ; ноль
    mov eax, 60000h ; аттрибуты доступа к объекту 20000h OR 40000h = 60000h (WRITE_DAC or READ_CONTROL)
    
    push offset ObjAttr
    push eax
    push offset Hwnd
    call ZwOpenSection@12 ; собственно гвоздь программы
    mov ecx, Hwnd ; проверка получения Хендела
    ret                             
    
end start
1
5 / 5 / 0
Регистрация: 12.08.2009
Сообщений: 25
15.09.2009, 18:34  [ТС] 6
Цитата Сообщение от Goodwin98 Посмотреть сообщение
MemStr dw '\','D','e','v','i','c','e','\','P','h','y','s','i','c','a','l','M','e','m','o', 'r','y', 0
dw ?
Во спосибо ато я тока допер до побайтового заполнения))
И всетаки Юникод не требует ключа вначале? - я никогда с ним не работал до сих пор.
Сохранил в текстовом редакторе в Юникоде и посмотрел в хексе, а там FFFE вначале.. Это что за зверек такой? Или это приблуда редактора?
Спосибо большое попробую завтра)))
0
15.09.2009, 18:34
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Ключевые слова Python
hw_wired 15.02.2025
Ключевые слова в Python - это специальные зарезервированные слова, которые имеют особое значение и функции в языке. В настоящее время Python включает 35 ключевых слов и 4 мягких ключевых слова. Эти. . .
Отличия изменяемых и неизменяемых типов в Python
hw_wired 15.02.2025
В Python существует принципиальное различие между изменяемыми (mutable) и неизменяемыми (immutable) типами данных, которое оказывает существенное влияние на работу программ. Это различие часто. . .
Python: сравнение списков и кортежей
hw_wired 15.02.2025
В Python последовательности являются одними из самых важных и часто используемых типов данных. Они позволяют хранить упорядоченные наборы элементов, к которым можно обращаться по индексу. Среди всех. . .
Как скачивать файлы с URL с помощью Python
hw_wired 15.02.2025
Для скачивания файлов Python предлагает как встроенные средства, так и сторонние библиотеки. Встроенный модуль urllib из стандартной библиотеки обеспечивает базовую функциональность для работы с URL. . .
Использование SQLAlchemy в Python
hw_wired 15.02.2025
SQLAlchemy - мощная библиотека для работы с базами данных в Python, которая предоставляет полноценный набор средств для объектно-реляционного отображения (ORM) и обширные возможности для работы с. . .
Взаимодействие с REST API в Python
hw_wired 15.02.2025
В современном мире разработки программного обеспечения REST API стал неотъемлемой частью архитектуры веб-приложений. API (Application Programming Interface) - это набор правил и протоколов,. . .
Разделение строк в Python
hw_wired 15.02.2025
Python предлагает богатый набор возможностей для работы со строками, и среди них разделение строк занимает особое место. Этот процесс позволяет разбивать текст на отдельные компоненты, что критично. . .
Объединение строк в Python
hw_wired 15.02.2025
При работе с текстовыми данными в Python нередко возникает необходимость объединять несколько строк в одну. Это может потребоваться при форматировании вывода, обработке текстовых файлов или создании. . .
Лучшие игровые движки на Python
hw_wired 15.02.2025
В последнее время разработка игр стала одним из самых популярных направлений программирования, и Python не остался в стороне от этого тренда. Несмотря на то, что Python обычно не ассоциируется с. . .
Декоратор jit в Python
hw_wired 15.02.2025
Если вы достаточно долго изучаете программы и пакеты на Python для машинного обучения, то наверняка замечали, что паттерн "JIT-декоратор" довольно популярен. Этот подход позволяет превратить обычные. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru