Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Получение "имени" загруженного модуля System


Автор: Riply 5.7.2009, 17:13
Здравствуйте !

Попрбую обрисовать ситуацию.
WinXP SP2 (компьютер не мой) 
Внешнее проявление:
Среди модулей, возвращаемых ZwQuerySystemInformation(SystemModuleInformation, ...)
имеется один, имя которого "затерто" пробелами.
Сторонние утилиты (например ProcessExplorere) тоже не могут корректно отобразить имя.

Подскажите, пожалуйста, как можно получить "настоящее имя" этого чуда природы ?
Хотелось бы познакимится с ним поближе, ну и прибить гада smile
Алгоритм решения может быть как для user mode, так и для kernel mode.

На данный момент:
Умеем получать PsLoadedModuleList и бегать по нему.
(Правда, и то и другое без "блокировки", но пока ладно)
Соответственно, находить нашего подопечного.
Если точнее, находим такие структуры, ему соответствующие:
(Названия структур собственнолапные и чуть-чуть не стыкуются с MSDN,
но заполняются при пробежке по PsLoadedModuleList корректно)
Код

 LDR_DATA_TABLE_ENTRY = packed record  
  InLoadOrderLinks : _LIST_ENTRY;
  InMemoryOrderLinks : _LIST_ENTRY;
  InInitializationOrderLinks : _LIST_ENTRY;
  ModuleInfoData: _LDR_MODULE_INFO;
 end;
 
Где ModuleInfoData имеет такой вид:
_LDR_MODULE_INFO = packed record
    BaseAddress      : PVOID;
    EntryPoint       : PVOID;
    SizeOfImage      : ULONG;
    FullDllName      : UNICODE_STRING;
    BaseDllName      : UNICODE_STRING;
    Flags            : ULONG;
    LoadCount        : USHORT;
    TlsIndex         : USHORT;
    HashLinks        : _LIST_ENTRY;  //???
    SectionPointer   : PVOID;
    CheckSum         : ULONG;
    TimeDateStamp    : ULONG;
    LoadedImports    : PVOID;
    EntryPointActivationContext : PVOID;
  end;


(Имена подопечного, как и ожидалось, затерты пробелами)
Как имея на руках перечисленные данные, получить сам объект ?

Т.е. если это драйвер, то как получить PDRIVER_OBJECT ?
Вообщем нужно вытащить как можно больше информации.
Например имя ключа реестра ему соответствующее или имя файла из которого он загружался.
(Если таковые имеются конечно)

Еще есть возможность побегать по SYSTEM-ому HANDLE_TABLE,
посмотреть существующие Handle`ы и их "имена".

P.S.
 Может надо парсить какие-то другие таблицы или LIST_ENTRY - ы ?

P.P.S.
 Хотелось бы это сделать своими руками, а не при помощи сторонних утилит.
 (Их буду использовать если самолапно не смогу решить задачку)

P.P.P.S.
 При работе ожидаем от подопечного любых гадостей smile
 (перехвата чего-то, правкии и т.д.)

Автор: Romikgy 5.7.2009, 17:24
я бы попробовал AVZ (хотя это стороний продукт  smile )
хотя бы посмотреть что перехвачено и чем .... а уж после в потроха лезьть ИМХО

Автор: Riply 5.7.2009, 17:54
Цитата(Romikgy @  5.7.2009,  17:24 Найти цитируемый пост)
я бы попробовал AVZ (хотя это стороний продукт   )
хотя бы посмотреть что перехвачено и чем .... а уж после в потроха лезьть ИМХО 


Такая проверка производилась.
Кроме того, что он (AVZ) мужественно поместил черепашку (SVN) в карантин, smile
ничего найдено не было.
В его отчете тоже не нашлось ничего подозрительного.

Автор: Romikgy 5.7.2009, 19:37
хммм прикольно .... он же в нулевом кольце копается ....

Автор: Riply 8.7.2009, 16:48
Цитата(Riply @  5.7.2009,  17:13 Найти цитируемый пост)
Как имея на руках перечисленные данные, получить сам объект ?
Т.е. если это драйвер, то как получить PDRIVER_OBJECT ?


Если не ошибаюсь, то получать  PDRIVER_OBJECT, соответствующий "элементу" PsLoadedModuleList,
я научилась.
Способ не очень кузявый и годится не для всех объектов, но для начала (и для начинающей) сойдет smile

Теперь встает следующий вопрос: как, имея на руках PDRIVER_OBJECT,
получить максимум информации о нем ?
Посмотрела какие поля содержат DRIVER_OBJECT и его подструктуры.
Ничего уж очень интересного не нашла, разве что DRIVER_OBJECT.DriverExtension.ServiceKeyName

А если не удастся "считать" то что нам нужно из DRIVER_OBJECT и ее содержимого,
то может можно сделать так, чтобы наш подопечный сам нам все рассказал ?
Т.е. устроить ему допрос с пристрастием ? smile

Автор: Riply 9.7.2009, 05:06
Если кому интересно:
Что-то поймано smile
Ни мышонок, ни лягушка, а atapi.sys это smile
Во всяком случае его образ загружен по искомому адресу.
Так же он отсутствует в "легальном" списке драйверов.

На вопросы типа: почему имя затерто, зачем и кем,
ваша покорная слуга ответить не в состоянии.
Точнее: пока не в состоянии smile

Автор: Romikgy 9.7.2009, 09:39
Цитата(Riply @  9.7.2009,  04:06 Найти цитируемый пост)
atapi.sys

у мя данный драйвер легализован IDE/ATAPI Port Driver © Microsoft Corporation. All rights reserved.

Автор: bems 9.7.2009, 19:17
Цитата(Romikgy @  9.7.2009,  09:39 Найти цитируемый пост)
у мя данный драйвер легализован
На сабжевой системе тоже. И совпадает с файлом из дистрибутива. Но после загрузки системы его имени нет в списке, вместо него - пробелы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)