LockWorkStation для NT
- From
- Sergei Shumakov (2:5005/47)
- To
- Timur Shemsedinov
- Date
- 2002-03-21T08:29:05Z
- Area
- SU.WINDOWS.NT.PROG
Hello Timur!
Wednesday March 20 2002 23:51, Timur Shemsedinov wrote to Dmitry Lubimov:
TS> гадость точно с паpаметpами и пеpвый точно DWORD. А вообще слухи о
TS> ней дошли до меня из одного очень стаpого аpхива, где
TS> RU.DELPHI.MASTER, где обсуждалась тема о использовании STrace
TS> (утилиты по отслеживанию системных вызовов), и пpиводился лог функций
TS> пpи нажатии Ctrl+Alt+Del.
=== Cut ===
= Клуб мастеров Borland Delphi (2:5005/47) ================= RU.DELPHI.MASTER =
Msg : 625 of 1355 -623 *628 Snt Loc
From : Sergei Shumakov 2:5005/47 22 Mar 00 08:10:09
To : Victor Amosoff 22 Mar 00 08:28:00
Subj : WinSock API: получение состояния всех сокетов.
===============================================================================
Hello Victor!
Tuesday March 21 2000 16:52, Victor Amosoff wrote to All:
VA> Я не тупой, можно просто дать ссылку на толковую доку, или просто
VA> хотя бы в каком направлении копать (RTFM сойдет :-))
чтоб не очень долго определяться с направлением раскопок возьми strace, должно
помочь. натрави его на netstat ...
=== Cut ===
─ Томск. Про Windows NT (2:5005/47) ─────────────────────────────── TSK.WINNT ─
Msg : 1663 of 1663 Snt Loc
From : Sergei Shumakov 2:5005/47 Tue 21 Mar 00 18:27
To : All Tue 21 Mar 00 18:49
Subj : ОТСЛЕЖВАНИЕ СИСТЕМНЫХ ВЫЗОВОВ В СРЕДЕ WINNT
───────────────────────────────────────────────────────────────────────────────
* Originally in TSK.WINNT
* Crossposted in SU.WINDOWS.NT.PROG
* Crossposted in RU.WINDOWS.NT
Hello All!
Источник: http://void.ru/oboz/0003/10.html
=== Cut ===
ОТСЛЕЖВАНИЕ СИСТЕМНЫХ ВЫЗОВОВ В СРЕДЕ WINNT
В одной из предыдущих статей, посвящённых переполнению буффера в среде Alpha,
вы могли видеть пример использования отладчика strace, позволяющего
просматривать системные вызовы, производимые программой. Совсем наедавно
подобная удобная утилита была портирована и на платформу winNT. Автор утилиты -
tsabin@bos.bindview.com.
Итак, использование. Поместите файлы strace.sys и strace.exe в папку
%windir%\system. Затем попробуйте запустить отладчик:
[c:\strace] strace notepad
В случае успеха, вы увидите что-либо вроде
1 133 139 NtOpenKey (0x80000000, {24, 0, 0x40, 0, 0, "\Registry\Machine [...]
2 133 139 NtCreateEvent (0x100003, 0x0, 1, 0, ... 8, ) == 0x0
3 133 139 NtAllocateVirtualMemory (-1, 1243984, 0, 1244028, 8192, 4, ... ) ==
0x0
4 133 139 NtAllocateVirtualMemory (-1, 1243980, 0, 1244032, 4096, 4, ... ) ==
0x0
5 133 139 NtAllocateVirtualMemory (-1, 1243584, 0, 1243644, 4096, 4, ... ) ==
0x0
[...]
9 133 139 NtClose (16, ... ) == 0x0...
Первая колонка - идентификатор, который позволяет понять, какие вызовы не были
произведены немедленно. Вторая и третья колонки - идентификаторы процесса и его
нити (thread), производящей вызов. Затем идёт имя системного вызова, входные
параметры, три точки, затем идёт возвращённая после отработки вызова информация
и код, с которым завершилась операция.
Вы можете произвести трассировку запущенного процесса, указывая его pid.
Например, если вы хотите знать, что делает winlogon после нажатия клавиш
alt-ctrl-del, найдите его pid в taskmanagere и затем
[c:\strace] strace -p 34
1 34 33 NtUserPeekMessage (1244272, 0, 0, 0, 1, 1244192, ... ) == 0x1
2 34 33 NtUserLockWindowStation (68, ... ) == 0x1
3 34 33 NtUserOpenInputDesktop (0, 0, 33554432, ... ) == 0xd8
4 34 33 NtUserGetObjectInformation (216, 2, 0, 0, 1244100, ... ) == 0x0
5 34 33 NtUserGetObjectInformation (216, 2, 1294320, 16, 1244100, ... ) == 0x1
6 34 33 NtUserSwitchDesktop (84, ...
7 34 33 NtOpenKey (0x20019, {24, 0, 0x40, 0, 0,
"\Registry\Machine\Hardware\DeviceMap\Video"},
... 244, ) == 0x0
m\CurrentControlSet [...]
10 34 33 NtClose (244, ... ) == 0x0
Так же вы можете перехватывать вообще все системные вызовы, указав pid
контролируемого процесса равным 0.
ПРИНЦИПЫ РАБОТЫ
Данная утилита использует недокументированные возможности Winows NT,
используемые так же утилитой MTRegMon и подобными утилитами. Основное отличие
от подобных утилит заключается в том, что strace перехватывает каждый системный
вызов, произведённый контролируемым процессом.
Перехват осуществляется драйвером виртуального устройства, которое так же
перехватывает параметры и результаты системных вызовов. Так как в
сопроводительной документации к WinNT не указывается о разграничении прав
доступа к устройствам устройство strace перед стартом проверяет значение
SetDebugPrivilege перед тем, как позволить пользователю обратитсья к нему. Это
означает, что strace может быть использовано только лишь алминистратором
cистемы. Если же другим пользователям разрешено иметь доступ к ресурсам на
уровне SeDebigPrivilege, то они смогут запускать strace - но с другой стороны,
это позволит пользователям разными путями получить права администратора.
СОВМЕСТИМОСТЬ С РАЗЛИЧНЫМИ СИСТЕМАМИ.
strace без проблем работала на NT4 sp4,5,6 ; windows 2000 GA. По необходимости
может быть добавлена поддержка сервис-паков более ранних версий.
КОММЕНТАРИИ
Не запускайте утилиту на важных серверах - она пока ещё нестабильна и
результатом всего может стать BSOD.
В природе существует огромное количество незадокумментированых системных
вызовов winNT. Иногда требуется точно знать тип аргумента вызова, чтобы успешно
его декодировать
По техическим причинам драйвер перехвата вызовов не может быть выгружен. Итак,
если вы захотите от него избавиться, вам придётся перегружаться. Это происходит
потому, что драйвер перехватывает любой производящийся системныйй вызов и
осуществляет его сам, и возвратный адрес указывает именно на драйвер strace.
Понятно, что при выгрузке драйвера все системные вызовы возвратятся не туда, и
система осыпется.
При вызове strace -p 0 (отслеживание всех процессов), вы увидите большое
количество write и ioctl. Это выозвы, производимые самой strace. Автор обещает,
что от этого в скором времени удастся избавиться.
Прилагается полный исходный текст. Любые дополнения приветствуются, включая
добавление базы типов параметров многочисленных системных вызовов.
Появление утилиты такого класса не может не пройти незамеченным: консольные
утилиты для Windows NT, разработчиком которого не является Microsoft,
становятся всё более полезными и открывают возможности, которыми не обладают
никакие коммерческие продукты. Вспомним, что у нас в арсенале "консольного" уже
имеется pv.exe - аналог ps, netcat, pwdump ..теперь к этому ряду добавился и
strace.
Скачать internet Xaviour beta5 (393 K)
=== Cut ===
Sergei e-mail: sergei.shumakov@altavista.net
ICQ: 14192519
--- GoldED+/W32 snapshot-2000.12.24
* Origin: Visual Systems. Tomsk. Russia. (2:5005/47)