Сбой функции Ntcreatefile API Windows XP

Обновлено: 21.11.2024

привет
я работаю над перехватом файлов
я применил два основных перехвата, т.е. NTCreateFile и NtOpenFile
я почти закончил, но с очень простой ошибкой, и я не могу решить:

я выделяю динамическую память указателю char, т.е.
char *cPtrDst ;
cPtrDst = (char*)malloc(size);
и освободить его с помощью free:
free(cPtrDst);

и я преобразовываю этот массив в переменную wchar_t,
используя:
wchar_t dir[10];//предположим, что это массив
result = mbtowc(dir,cPtrDst,size);< /p>


при компиляции драйвера выдает ошибку:
ошибка LNK2019: неразрешенный внешний символ __imp__free, указанный в функции
_freePolicyData@0

в функции есть ссылка на неразрешенный внешний символ __imp__malloc
_policyWriteNeither@8

я включил stdlib.h

а зря.
есть идеи об ошибке?

Дон Бёрн

Гость

Ну, вы далеки от завершения по многим причинам. Во-первых, вы не можете использовать
вызовы malloc, free или другие вызовы пользовательского пространства в драйвере ядра, поэтому, по сути,
весь код, который вы перечислили, не будет работать в ядре.

Но это не самое страшное, вы перехватываете два вызова, которые легко
перехватываются утвержденными средствами. Перехват чрезвычайно опасен и
заблокирован для 64-разрядных систем. Кроме того, перехватывающие драйверы помечаются как ВРЕДОНОСНОЕ ПО,
поэтому вы создали что-то, на что будут смотреть с пренебрежением.

Купите WDK и несколько хороших книг, таких как "Программирование модели
драйвера Windows, второе издание" Уолтера Онея, и планируйте потратить некоторое время на
понимание среды.

Хасбер

Гость

Дон Бёрн

Гость

Нет, вы можете выделить память и выполнить преобразование, но вы должны использовать
правильный API, а не среду выполнения c. Что вы пытаетесь сделать, и почему вы
настаиваете на крючке? Поскольку вы, очевидно, новичок, шансы на то, что вы
подключитесь без разрушения системы, вероятно, ничтожны.

Хасбер

Гость

хорошо, мистер дон,
я работаю над проектом, который ограничит злонамеренное перемещение
файлов по сети или на любой физический носитель,
в котором я буду применять такую ​​политику, как "блокировать удаление доступа к txt файлы"
"блокировать копирование и вставку доступа к pdf"
Чтобы сделать это, я просто подключаю функции.
Теперь я знаю, что не могу использовать его в Vista.
Теперь подскажите, что мне нужно принять для работы, потому что мне нужно снова все переписывать.

В неанглоязычных версиях Windows XP, также называемой Windows Embedded POSReady 2009, обновление для системы безопасности 3126593, также известное как MS16-014 (и, конечно, все более поздние обновления, которые также содержат более новые версии NTDLL.dll), вносит ошибку: для идентификаторов сообщений 0x8020000B. и далее, то есть все сообщения об ошибках 0xC…, записи в ресурсе MESSAGETABLE NTDLL.dll отключены на единицу!

Примечание. См. определение кодов серьезности NTSTATUS.

Проявление

Из-за этой ошибки загрузчик модулей Windows показывает неправильные и вводящие в заблуждение сообщения об ошибках для всех ошибок, возникающих во время загрузки и инициализации приложений и их зависимых библиотек DLL.

Причина скрывается на виду!

В то время как первый (и единственный) заполнитель формата %lx правильного текста сообщения указывает числовое значение, первый заполнитель формата %hs неверного текста сообщения, но указывает строковое значение: значения NTSTATUS 0xC000007B, 0xC0000022 и 0xC0000142 таким образом интерпретируются как адреса, что приводит к исключениям нарушения прав доступа.
Они перехватываются загрузчиком модулей Windows, который отображает общий (английский) текст сообщения об ошибке вместо неправильного текста сообщения с (локализованным) заголовком последнего.

Демонстрация

Создайте DLL FUBAR.DLL и приложение FUBAR.EXE из исходного файла FUBAR.C, созданного на шаге 1. Подробности и справку см. в статьях MSDN «Параметры компилятора» и «Параметры компоновщика».

Примечание: оба переносимых исполняемых файла созданы без библиотек MSVCRT.

Краткая информация

Если ваше приложение вызывает исключение нарушения прав доступа в немецкой версии Windows XP или Windows Embedded POSReady 2009, вы увидите неправильное сообщение об ошибке с текстом идентификатора сообщения 0xC0000006 псевдонима STATUS_IN_PAGE_ERROR, включая довольно длинную строку 81. шестнадцатеричные цифры вместо правильного текста для идентификатора сообщения 0xC0000005 псевдоним STATUS_ACCESS_VIOLATION, включая понятный текст Lesen , Schreiben или Ausführen

Несовместимость

Тексты сообщений (точнее: заполнители их формата) в ресурсе MESSAGETABLE библиотеки NTDLL.dll не записываются в стандартном формате, определяемом текстовыми файлами сообщений и ожидаемом от функции Win32 FormatMessage():

%0 Завершает текст сообщения строка без завершающего символа новой строки.Эта escape-последовательность может использоваться для создания длинных строк или для завершения самого сообщения без завершающего символа новой строки. Это полезно для подсказок.
% n ! строка формата ! Идентифицирует вставку. Значение n может быть в диапазоне от 1 до 99. Строка формата (которая должна быть окружена восклицательными знаками) является необязательной и по умолчанию имеет значение !s! если не указано. […]

Поэтому все тексты сообщений, содержащие %0 (два примера см. в предыдущем разделе), усекаются при извлечении с помощью этой функции Win32!

Примечание. Соответствующие значения NTStatus 0xC0000144 status status_unhandled_exception и 0xc000021a status status_ssystem_process_terminated NTDLL.dll в таблицы сообщений системных библиотек Win32, таким образом перенося эту ошибку: в текущих версиях Windows NT командные строки выдают искаженный вывод вместо правильного вывода

Контакт

Если вы что-то упустили здесь, у вас есть дополнения, комментарии, исправления, критика или вопросы, вы хотите оставить отзыв, подсказку или совет, сообщить о неработающих ссылках, ошибках, недостатках, ошибках, неточностях, искажениях, упущениях, недостатках, уязвимостях или слабостях. , …: не стесняйтесь обращаться ко мне и не стесняйтесь спрашивать, комментировать, критиковать, флеймить, уведомлять или сообщать!

Примечание: письмо в странном формате и без правильного имени отправителя, скорее всего, будет удалено!

Приложение WinAPI Search было разработано в первую очередь для разработчиков Windows, исследователей и инженеров по обратному анализу вредоносных программ. Его первоначальная цель состояла в том, чтобы предоставить утилиту для поиска функций Win32 по имени, но позже это приложение расширилось и стало включать дополнительные функции.

Поддерживаются следующие функции:

Эта утилита не требует установки и может быть запущена из любого места на диске.

Включено в пакет загрузки или может быть просмотрено в Интернете.

Вы можете использовать это программное обеспечение столько, сколько вам нужно, делать столько копий загруженного пакета, сколько требуется, и бесплатно распространять его среди любых людей и организаций.

Вам НЕ РАЗРЕШАЕТСЯ изменять или переименовывать какие-либо части загруженного пакета и/или руководства в нем; распространять его под другим названием и/или именем автора; переупаковывать или повторно распространять отдельные компоненты скачанного пакета; продавать, сдавать в аренду или получать какую-либо финансовую выгоду от этого программного обеспечения.

Авторы этого веб-сайта и данного конкретного программного обеспечения гарантируют, что эта компьютерная программа не содержит преднамеренно вредоносных или вредоносных материалов, которые могут каким-либо образом неблагоприятно повлиять на вашу систему. Все программное обеспечение, размещенное на этом веб-сайте, представляет собой специально созданные компьютерные программы, которые были разработаны в первую очередь для нашего личного использования. Мы тестируем его в течение некоторого времени, прежде чем опубликовать здесь. Несмотря на это и в связи с тем, что мы люди, мы не исключаем, что это программное обеспечение может содержать ошибки и непреднамеренные ошибки, которые могут представлять собой дезинформацию в программном смысле и/или могут временно повлиять на стабильность вашего компьютера. Если это так, сообщите нам об этом через отзыв на этом сайте, и мы сделаем все возможное, чтобы устранить проблему и предоставить вам последнее обновление.

И, наконец, загружая и используя это программное обеспечение, вы соглашаетесь делать это "как есть" без какой-либо подразумеваемой или выраженной ответственности со стороны авторов и/или распространителей этого программного обеспечения.

Мы обещаем, что установочный пакет, который вы загружаете с этой страницы, не будет содержать никакого рекламного ПО, маркетинговых панелей инструментов или другого "мешающего" программного обеспечения, не связанного с продуктом, описанным на этой странице.

Создайте новую голую функцию, внутри которой вы можете реализовать MessageBox. Обновите asm следующим образом:

Автор этой статьи начинает с того, что процессы — это то, как работают различные вредоносные программы, и поэтому, похоже, полагает, что важны только EXE-файлы. Windows будет загружать и выполнять множество различных типов файлов, а некоторые вредоносные программы полностью используют существующие процессы для доставки своей полезной нагрузки.

Если какой-то процесс начинает записывать исполняемые файлы на жесткий диск, пора беспокоиться. Перехват NtCreateFile() и NtOpenFile() позволит в некоторой степени обнаружить такую ​​активность. Но даже этого на самом деле недостаточно. Если мошеннический код может попасть в список автозагрузки системы, пользователь облажался.

Но для большинства вредоносных программ перехват NtCreateFile() и NtOpenFile() решит большинство проблем. Так что, хотя это и не идеально, это лучше, чем просто перехват NtCreateSection(). Я бы передал вызов открытия файла официальному API, чтобы получить дескриптор файла, а затем прочитал несколько байтов в файле (независимо от имени), ища «MZ», «NE» и «LE» в первом два байта. Или, может быть, вместо этого читается файл ловушки. В конце концов, кого волнует, удалось ли открыть вызов или нет? Неспособность передать данные вызывающей стороне является более коварной. В любом случае, если в начале файла находится «MZ», я вижу, соответствует ли заголовок спецификации формата файла PE. Я бы проявил осторожность с двумя другими типами. Если он выглядит как файл в формате PE-файла, то он является исполняемым. В конце концов, DLL, загруженная в работающий EXE-файл, так же опасна, как и запуск нового процесса.

500 символов в этом пробеле, 500 символов в этом пробеле, вставьте вышеприведенное, напишите еще немного, в этом пробеле осталось 369 символов.

Читайте также: