Прива всем И так Вопрос простой Нужно открыть файл (sys), получить адресса некоторых экспортируемых функций, а так же считать из него несколько байт... Вот только загвоздка в том, что мы в ринг0, и нужно все это сделать в драйвере... Подтолкните, как это сделать.... ну...какими функциями... )) Заранее сенкс
а ZwФункции в нулевом кольце не рулят? Если рулят, могу поискать тебе исходник вируса, который их использует. Точнее сказать ниче не могу
MSoft нжен код... т.к. я разобраться не могу что-то.... уже третий раз статью васма перечитываю... InitializeObjectAttributes - компилер ругается, что нет такой функции в ядре
n0name Блин Нашел его в ntdef.h Примерно такое содержание Включаю ntdef.h проэкт. Ответ компилятора: C:\APIS\driver.c(323) : error C2223: left of '->Length' must point to struct/union C:\APIS\driver.c(323) : error C2223: left of '->RootDirectory' must point to struct/union C:\APIS\driver.c(323) : error C2223: left of '->Attributes' must point to struct/union C:\APIS\driver.c(323) : error C2223: left of '->ObjectName' must point to struct/union C:\APIS\driver.c(323) : error C2223: left of '->SecurityDescriptor' must point to struct/union C:\APIS\driver.c(323) : error C2223: left of '->SecurityQualityOfService' must point to struct/union
Вот те тогда код записи в файл через Zw (вроде бы в ядре должно работать). Дамаю, читается аналогично: Код (Text): NTSTATUS status; UNICODE_STRING fullFileName; HANDLE fileHandle; IO_STATUS_BLOCK iostatus; OBJECT_ATTRIBUTES oa; RtlInitUnicodeString( &fullFileName, L"\\??\\C:\\Example\\testfile.txt"); InitializeObjectAttributes( &oa, &fullFileName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL ); status = ZwCreateFile ( &fileHandle, GENERIC_WRITE | SYNCHRONIZE, &oa, &iostatus, 0, // alloc size = none FILE_ATTRIBUTE_NORMAL, FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); // Здесь: // GENERIC_WRITE равно STANDARD(0x40000000L) // // FILE_GENERIC_WRITE равно STANDARD_RIGHTS_WRITE|FILE_WRITE_DATA | // FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | // SYNCHRONIZE, что можно увидеть в заголовочном файле winnt.h if( NT_SUCCESS(status)) { // Строка для записи в файл char myString[100]="string : test write!\r\n"; // Структура, которая поможет определить длину файла: FILE_STANDARD_INFORMATION fileInfo; status = // Получаем информацию о файле ZwQueryInformationFile( fileHandle, &iostatus, &fileInfo, sizeof(FILE_STANDARD_INFORMATION), FileStandardInformation ); ULONG len = strlen(myString); if( NT_SUCCESS(status) ) { LARGE_INTEGER ByteOffset = fileInfo.EndOfFile; status = ZwWriteFile(fileHandle, NULL, NULL, NULL, &iostatus, myString, len, // Записываемая строка &ByteOffset, // a если NULL? см. ниже NULL); if( !NT_SUCCESS(status) || iostatus.Information != len ) { DbgPrint("Error on writing. Status = %x.", status); } } ZwClose(fileHandle); break; }
n0name я не знаю что там за фигня, но у меня включен ntoskrnl.h при попытке врубить ntddk.h вылетает сотни 2 ошибок... В основном характера "Redefenition" При отключении ntoskrnl.h нет нескольких структур... ЗЫ: VC++ 6
ntoskrnl.h левый хидер. врубай ntddk.h, а структуры видимо не документированы, вынеси нужные тебе в один файл.
Asterix Только на ассемблере. nitrotoluol Да посмотри сорец драйвера какой-нибудь, и разберёшься, как и что включать. Есть даже сорцы с файлами проектов студии, делов-то.