Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Создание списка файлов
Посл.ответ Сообщение

Ранг: 11.9 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 06 августа 2006 12:18 · Поправил: Igit32
· Личное сообщение · #1

Помогите разобраться. Перехватываю АПИ в ring-0 для сокрытия файлов. Перехват работает замечательно, но для удобства (как провекок, так и добавление, удаления) хотелось бы иметь список скрываемых файлов. Для этого я определил структуру:

typedef struct _FilesList
{
PVOID NextItem;
UNICODE_STRING FileName;
} TFilesList, *PFilesList;


И для работы с ней написал следующие функции:

void FilesListAddItem(PFilesList *List, WCHAR FileName[])
{
PFilesList wNewItem;
wNewItem = ExAllocatePool(NonPagedPool, sizeof(TFilesList));
wNewItem->NextItem = *List;
*List = wNewItem;
RtlInitUnicodeString( &wNewItem->FileName, FileName );
return;
}


Но при вызове FilesListAddItem(&HidenFiles, L"test.exe"); все падает в синий экран...

Подскажите, может я начал вообще нерпавильно подходить и можно проще?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 06 августа 2006 12:37
· Личное сообщение · #2

Варианта 2-посмотреть, как сделано в готовых руткитах с сорцами, благо, таких не мало, но там вроде без списков обычно. Лично я сторонник варианта не выпендриваться с дикими структурами особенно в ядре. Обычно то геморно отлаживать такие вещи, а в ядре сразу синяк. 2 вариант-сайс в зубы и собственно смотреть, где валится. Скорее всего обращается к плохим адресам.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 06 августа 2006 13:04
· Личное сообщение · #3

Igit32 пишет:
Перехватываю АПИ в ring-0

В ринг-0 не все можно вызывать. Делай список в ринг-3 или используй разрешенные функции.




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 06 августа 2006 13:58
· Личное сообщение · #4

Igit32 пишет:
PFilesList wNewItem;
wNewItem = ExAllocatePool(NonPagedPool, sizeof(TFilesList));
wNewItem->NextItem = *List;
*List = wNewItem;

Что-то сттарнно у тя с указателями. Зачем разыменовывваешь wNewItem->NextItem = *List;

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 11.9 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 06 августа 2006 15:09
· Личное сообщение · #5

Сделал так, теперь все работает:

void FilesListAddItem(PFilesList *List, PWCHAR FileName)
{
PFilesList wNewItem;
wNewItem = ExAllocatePool(NonPagedPool, sizeof(TFilesList));
wNewItem->NextItem = *List;
*List = wNewItem;
RtlInitUnicodeString( &wNewItem->FileName, FileName );
return;
}



 eXeL@B —› Программирование —› Создание списка файлов
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати