· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Как противостоять TerminateProcess

<< . 1 . 2 . 3 . 4 . >>

Посл.отвђт Сообщенiе


Дата: Апр 23, 2004 21:04:40

Не, вернула как раз ERROR_SUCCESS, то бишь 0


Дата: Апр 23, 2004 21:27:54

Тааак, ладно, как оно обычно бывает сам не туда глянул, вот она, эта строка:
005C02D0  44 3A 28 41 3B 3B 30 78 31 66 30 66 66 66 3B 3B  D:(A;;0x1f0fff;;
005C02E0  3B 42 41 29 28 41 3B 3B 30 78 31 66 30 66 66 66  ;BA)(A;;0x1f0fff
005C02F0  3B 3B 3B 53 59 29 00                             ;;;SY).


Дата: Апр 26, 2004 10:15:34

Да, насчет INVALID_HANDLE_VALUE я немножко неправду сказал. Точнее, как раз с этим значением проблем нет. Просто я был уверен, что GetCurrentThread тоже возвращает INVALID_HANDLE_VALUE, а оказалось, что нет - он возвращает (HANDLE)(-2). Так что в данном случае с "псевдо-хэндлами" все в порядке, процесс от потока отличить можно, а больше нам ничего и не надо.

Теперь насчет твоей строки.
A - allowed
BA - built-in administrators
SY - local system
0x1f0fff - максимально возможные права доступа к процессу (это я опытным путем обнаружил, делал сначала Set 0xFFFFFFFF, потом Get - получал 0x1F0FFF).

Конкретно для этой строки твоя задача - привести ее к виду D:(A;;0x1f0ffe;;;BA)(A;;0x1f0ffe;;;SY)(D;;0x1;;;WD)

Возможно, последняя пара скобок лишняя, но лучше на всякий случай перестраховаться :)


Дата: Апр 26, 2004 11:24:11

[ RobinFood: это я опытным путем обнаружил, делал сначала Set 0xFFFFFFFF, потом Get - получал 0x1F0FFF. ]

А можно проще :) Слей WinObjEx (cсылка на главной странице васма еще видна), тыкни два раза в \ObjectTypes\Process и смотри Valid Access.


Дата: Апр 26, 2004 17:15:26

RobinFood
Ну и как мне эту строку тогда приводить к необходимому виду, что парсить её и модифицировать или можно как-то преобразовать по другому?
Что ты там говорил по поводу перевести эту строку в число, как это сделать, по какому алгоритму?


Дата: Апр 26, 2004 17:32:07

Я думаю, парсить и модифицировать. Лично для меня это - самый простой вариант, другими я просто не пользовался.

Наверняка есть и другие варианты, по идее можно воспользоваться той же SetEntriesInAcl на пару с GetExplicitEntriesFromAcl, тогда строку парсить не придется. Но, как я уже говорил, я этими методами не пользовался. Мне проще строку явно задать, и не мучиться ни с парсингом, ни с заполнением кучи структур :)


Дата: Апр 27, 2004 03:32:35

Таак, моя строка:
D:(A;;0x1f0fff;;;BA)(A;;0x1f0fff;;;SY)

Ты предлагаешь:
D:(A;;0x1f0ffe;;;BA)(A;;0x1f0ffe;;;SY)(D;;0x1;;;WD)

Откуда взялось выделенное красным это ты типа взял это число и сделал
mov eax, 1f0fffh
and eax, not PROCESS_TERMINATE

так? А где про это написано что нужно именно поступать так, в MSDN я что-то этого не нашёл, может линки какие знаешь? Где вобще можно почитать про эти строки?


Дата: Апр 27, 2004 11:07:49

Да, насчет выделенного красным - именно так я и сделал.
В MSDN я об этом и читал.
ace strings:
rights
A string that indicates the access rights controlled by the ACE. This string can be a hexadecimal string representation of the access rights, such as "0x7800003F", or it can be a concatenation of the following strings.

access mask - тут красиво разрисовано, какой бит для чего
process access rights - а тут расписано, какие биты специфичны для процессов.


Дата: Апр 27, 2004 13:52:32

Спасибо за ссылки..


Дата: Апр 29, 2004 15:26:39 · Поправил: Asterix

RobinFood
Продолжим..?
Функция ConvertStringSecurityDescriptorToSecurityDescriptor даёт нам
Pointer to a variable that receives a pointer to the converted security descriptor
а передать в SetSecurityInfo нужно Pointer to the new DACL for the object
как тут быть?


Дата: Апр 29, 2004 15:39:04

Так же, как и с GetSecurityInfo :)

Объявляешь pDacl DD ?
В ConvertStringSecurityDescriptorToSecurityDescriptor передаешь offset pDacl, а в SetSecurityInfo - просто pDacl.

Потом не забудь сделать
invoke LocalFree, pDacl


Дата: Апр 29, 2004 16:00:32 · Поправил: RobinFood

Я подумал, что ты опять немного запутался с "указателями на указатели", и написал именно об этом. А там проблема совсем в другом - ConvertStringSecurityDescriptorToSecurityDescriptor возвращает указатель на SecurityDescriptor, а SetSecurityInfo принимает указатель на DACL. Чтобы получить DACL, имея SecurityDescriptor, нужно воспользоваться функцией GetSecurityDescriptorDacl.

Значит, объявляешь 2 переменных
pDacl DD ?
pSD DD ?
Сначала вызываешь
ConvertStringSecurityDescriptorToSecurityDescriptor, ей передаешь offset pSD,
потом вызываешь GetSecurityDescriptorDacl, ей передаешь pSD и offset pDacl,
и наконец вызываешь SetSecurityInfo, ей передаешь pDacl.

После чего через LocalFree освобождаешь pSD, но не освобождаешь pDacl - он освободится вместе с pSD, потому что находится структура DACL внутри структуры SECURITY_DESCRIPTOR.


Дата: Апр 29, 2004 17:47:18

Спасибо, теперь думаю вопрос должен разрешиться :-)


Дата: Май 11, 2004 12:23:23

RobinFood
Решил вернуться к вопросу, т.к. тогда так его и не добил ;-)
Дошёл значит до функции
invoke GetSecurityDescriptorDacl, pSecurityDescriptor, LPBOOL lpbDaclPresent, OFFSET pDacl, LPBOOL lpbDaclDefaulted
и никак не врублюсь по описанию что за параметры должны быть(выделены красным)
Это поинтеры на пустую ячейку где система должна проставить флаги или это я
должен установить флаги в эти ячейки и передать поинтеры в функцию??


Дата: Май 11, 2004 12:38:04 · Поправил: q_q

Asterix
В psdk указано out, т.е. ты должен зарезервировать под каждый из BOOL'ов по DWORD'у и передать в функцию их адреса, а она их заполнит.

<< . 1 . 2 . 3 . 4 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.107