![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Riply |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Здравствуйте !
Подскажите, пожалуйста, как работает CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ...) ? Пробовала получать аналогичный результат при помощи RtlQueryProcessDebugInformation. Но не все так сладко, как хотелось бы. RtlQuery... на некоторых процессах возвращает STATUS_ACCESS_DENIED, а вот Toolhelp32Snapshot на этих же процессах отрабатывает успешно. (WinXP SP3. Работаем под администратором и даем себе SE_DEBUG_NAME - привилегии) При трассировке Toolhelp32 в этих случаях, ничего "такого", кроме подготовки и вызова той же RtlQuery.., не увидела. Но в трассировке на меня не стоит полагаться ибо слабовата я в этом ![]() Что же она (Toolhelp32) такое хитрое делает для получения информации ? CreateRemoteThread не очень подходит, ибо целевой процесс долен разрешить создание нити, да еще и запись "в себя", на что согласны отнюдь не все ![]() Можно попробовать пробегаться, примерно таким образом:
Работает на всех процессах, на которых работает и CreateToolhelp, только вот пользоваться подобной пробежкой без блокировки PEB.LdrData нельзя. Способов залочить LdrData без использования CreateRemoteThread я не вижу. Варианты типа SuspendProcess(или все нити поочереди) мне не нравятся (очень грубые), уж не говоря о том, что хоть почти все процессы и открываются с PROCESS_SUSPEND_RESUME доступом, но вызов же непосредственно NtSuspendProcess на некоторых возвращает STATUS_ACCESS_DENIED. А вот Toolhelp32 как-то выкручивается. Очень хочется понять как именно. Если, вдруг, кто захочет повозится с этим делом, ![]() набросала пару процедур для сравнения работы сабжевых ф-ий:
|
||||
|
|||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
Хитроумная функция
![]() Что удалось выяснить, работает она в три этапа, первые два связаны - если первый не отрабатывает, то до второго дело не доходит. И только после успешно завершенного второго идет третий ![]() Вот, собственно, листинг:
Думаю, для полноты понимания придется дизассемблировать неэкспортируемые внутренние функции библиотеки. Ну а сейчас можно попробовать пошагово проэмулировать работу функции на Delphi. А конкретно первый этап выполнить. Может там вся разгадка ![]() Это сообщение отредактировал(а) Rrader - 24.11.2008, 18:22 |
|||
|
||||
Virtuals |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Rrader,
а так не более удобочитаемо? да и комментарий достаточно интересен ![]() Copyright © Microsoft Corporation
думаю эта функция более интересна Copyright © Microsoft Corporation
Это сообщение отредактировал(а) Virtuals - 23.11.2008, 21:05 |
||||||
|
|||||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Будем считать это ответом на вопрос, заданный между строк: "А не заблудилась ли я в трех соснах ?" ![]() Основательно, поразбираться пока еще не успела, но мне кажется, что Rrader прав в предположении: Т.е. мне кажется, что все спрятано в ThpCreateRawSnap (imho, после нее идет только обработка результатов) Случайно Microsoft Corporation, не предоставила тебе исходники и этой функции ? ![]() Это сообщение отредактировал(а) Riply - 24.11.2008, 05:21 |
|||
|
||||
Virtuals |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Riply,
![]() ![]() хм а там как раз все ваши предположения ![]()
Это сообщение отредактировал(а) Virtuals - 24.11.2008, 05:49 |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
В том то и дело, что не все или все, но не такие, или такие, но не совсем, или совсем, но не там ![]() Ибо у них, черт побери, это каким-то образом работает, а у меня нет ![]() |
|||
|
||||
Virtuals |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Riply, может чего с правами?
в ThpAllocateSnapshotSection явно извращаются ![]() |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Да, вряд-ли. Я ж эти функции "одновременно" вызываю. Т.е. они в равных условиях, в смысле прав... "Нет... Тут что-то не так..." (с) Сильвер ![]() Возможно, где-то в проекте партачу. Попробую ка переписать модуль заново (не подглядывая в старый, дабы не скопировать ошибку). Может что и выдет... Добавлено через 8 минут и 47 секунд Согласна. Извращенцы еще те ![]() Но как я понимаю, если не отрабатывает ThpCreateRawSnap, то мы туда и не должны попасть... |
|||
|
||||
Virtuals |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Riply, хм странно
в ThpCreateRawSnap все интуитивно понятно, для модулей одно для процессов потоков дпугое, правда прикольно они память выделяют ![]() |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Переодически возвращаюсь к этому вопросу
Все, чего достигла - получение (из пользовательского режима) BSOD тремя разными способами ![]() Это наводит на мысли либо о том, что либо должна существовать обертка, для использования RtlQueryProcessDebugInformation (Native, а не Toolhelp) , либо у меня что-то не-то с константами или экспортом ![]() Нет ли у кого значений для RTL_QUERY_PROCESS_XXX..., и заодно ее прототипа ? (не из общеизвестных источников, типа Jwa. Просто я уже сталкивалась с тиражированием ошибок) Это сообщение отредактировал(а) Riply - 1.12.2008, 21:35 |
|||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
Riply, имхо исходники, приведенные Virtuals - те самые обрезки, что от допотопной Win 2000 гуляют... Возможно сейчас все изменилось. Сомнения появились, потому что дизассемблировал некоторые Thp функции (у себя в XP SP2) и нашел несоответствия.
Вы эмулировали эти коды? RTL_QUERY_PROCESS_HEAP_SUMMARY = 4; Самое интересное, что у меня в kernel32.dll вызов в ThpCreateRawSnap произошел с RTL_QUERY_PROCESS_MODULES = $80000001
|
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Не возможно, а точно ![]() Постоянно сталкиваюсь с этим. Может "на ты" а ? ![]()
Я предполагала наличие дополнительных битов в маске. Очень похоже, что именно здесь собачка то и порылась ![]() Побежала проверять ![]() P.S. Это займет время, ибо не могу тестировать на основном компьютере из-за возможных BSOD-ов ![]() |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Есть у меня список задач с пометкой "нерешенные".
(Ну нехватает мне ума или знаний для их решения в настоящий момент) И когда я вычеркиваю из этого списка задачу - то у меня маленький праздник ![]() Rrader и Virtuals устроили мне сегодня такой праздник ![]() Спасибо вам огромное ! Уря ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |