Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват системных событий, обращение к реестру фаиловой системе... 
:(
    Опции темы
sumbain
Дата 23.9.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



Здравствуйте. Необходимо сделать программу фильтр т.е программу которая отлавливает 

обращение к реестру, изменение exe фаилов и.т.д, я слышал что есть какие то апи функции 

которые позволяют перехватывать обращение к реестру и файловой системе. Есть ли такие 

функции?
PM MAIL   Вверх
Mihhail
Дата 24.9.2007, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.9.2007

Репутация: 5
Всего: 9



Цитата(Журнал Х @  01/2007(97), стр.138-142 )
Код
LONG err;
HKEY hKey;
HANDLE event;

//Получаем дескриптор ключа, который будем мониторить
err = RegOpenKey( HKEY_LOCAL_MACHINE, "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hKey );
if( err != ERROR_SUCCESS ) return;
//Создаём объект "событие"
event = CreateEvent( NULL, FALSE, FALSE, NULL );

//Ставим открытую ветку реестра под наблюдение
err = RegNotifyChangeKeyValue( hKey, TRUE, REG_NOTIFY_CHANGE_LAST_SET, event, TRUE );
if( err != ERROR_SUCCESS ) return;

//В бесконечном цикле ожидаем наступления события
while( 1 )
{
   if( WaitForSingleObjectEx( event, INFINITE, TRUE ) == WAIT_OBJECT_0 )
   {
      /*Если произошли какие-либо изменения,
       то обрабатываем их здесь, а затем опять начинаем следить за веткой*/
      err = RegNotifyChangeKeyValue( hKey, TRUE, REG_NOTIFY_CHANGE_LAST_SET, event, TRUE );
   }
}


Код
//Переменная, в которой будет храниться путь к директории с файлом hosts
TCHAR hostsDir[MAX_PATH];

HANDLE dwChangeHandle = FindFirstChangeNotification( hostsDir, FALSE, FILE__NOTIFY_CHANGE_LAST_WRITE );
if( dwChangeHandle == INVALID_HANDLE_VALUE ) return;

while( WaitForSingleObjectEx( dwChangeHandle, INFINITE, TRUE ) == WAIT_OBJECT_0 )
{
   //Обрабатываем изменения в каталоге

   //Продолжаем наблюдение за директорией
   if( FindNextChangeNotification( dwChangeHandle ) == FALSE ) break;
}


Это сообщение отредактировал(а) Mihhail - 24.9.2007, 06:47
PM MAIL WWW   Вверх
sn0w
Дата 24.9.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 24.9.2007

Репутация: нет
Всего: нет



перехват Native API решает все - в том числе скрытие ключей параметров и тд, как метод - либо прехват драйвером SDT, я вот тока не помню как делал... кажется не сплайсингом а модификацией SDT
PM MAIL   Вверх
jonie
Дата 24.9.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



поискать сорцы RegMon и FileMon от руссиновича.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
sumbain
Дата 6.10.2007, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



Цитата

поискать сорцы RegMon и FileMon от руссиновича.

Если не ошибаюсь RegMon и FileMon используют драивер системного ядра для меня это сложно.

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



Это сообщение отредактировал(а) sumbain - 6.10.2007, 06:48
PM MAIL   Вверх
W4FhLF
Дата 6.10.2007, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Цитата(sumbain @  6.10.2007,  06:39 Найти цитируемый пост)
Если не ошибаюсь RegMon и FileMon используют драивер системного ядра для меня это сложно.


Писать своё с нуля проще, чем использовать готовые интерфейсы их драйверов? Не думаю.


Цитата(sumbain @  6.10.2007,  06:39 Найти цитируемый пост)
Какую api функцию надо перехватывать чтобы отловить все обращения к реестру, запись удаление, или продется перехватывать несколько?


Ну какими функциями ты с реестром работаешь, вот те и перехватывай.


Цитата(sumbain @  6.10.2007,  06:39 Найти цитируемый пост)
Какие api нужно перехватывать для перехвата создания нитей, процессов или еще каких нибудь системных событий.


CreapeProcessA
CreapeProcessW
ZwCreateProcess
CreateThread
ZwCreateThread
...


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
sumbain
Дата 6.10.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



Цитата

Писать своё с нуля проще, чем использовать готовые интерфейсы их драйверов? Не думаю.


Я курсовой делаю, если возьму эти драиверы придется обьяснять на защите а асемблер я не знаю.
PM MAIL   Вверх
sumbain
Дата 9.10.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



Как узнать адрес перехватываемой функций например RegCreateKey?
В totalcommandere через F3\image file header\exports table - напротив названия функции стоят числа это адреса функции???
И еще как пользоватся утилотой DUMPBIN, запустил ее из под командной строки с ключем, появился диалог открыть с помощью, выбирал блокнот и word при любой кодировке только крякозяблы.
PM MAIL   Вверх
586
Дата 9.10.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(sumbain @  9.10.2007,  20:48 Найти цитируемый пост)
И еще как пользоватся утилотой DUMPBIN, запустил ее из под командной строки с ключем, появился диалог открыть с помощью, выбирал блокнот и word при любой кодировке только крякозяблы. 

может, не полное имя указал? dumpbin.exe

Это сообщение отредактировал(а) 586 - 9.10.2007, 20:50
PM   Вверх
jonie
Дата 9.10.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Цитата

В totalcommandere через F3\image file header\exports table - напротив названия функции стоят числа это адреса функции???
такой функциональноти в TC нет (видимо плагин)...а числа там уже могут быть какие угодно 8)
поройтесь на wasm.ru , там есть примеры ка перехватывать .... и вообще говоря есть целая SDK (правда коммерческая)...забыл как зовут 8(


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
sumbain
Дата 11.10.2007, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



C адресами вроде разобрался. Подскажите как в  buildere 6 указать компилятору выравнивать структуры ПОБАЙТОВО.
PM MAIL   Вверх
dumb
Дата 11.10.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



sumbain, знаешь что такое поиск? а гугл?.. перехват ему... smile
Код

#pragma pack(push,1)
typedef struct _Some
{
  ...
} Some;
#pragma pack(pop)

PM MAIL   Вверх
sumbain
Дата 14.10.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



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

Код

void Proc()
{
     MessageBox(NULL, "Hook", "DLL", 0);
}


Хук усанавливаю в приложении
Код

void SetHook(bool flag)
{
  if(flag)
  {
    HINSTANCE dllinstance;

    dllinstance = LoadLibraryExA("Project1.dll", NULL, 0);

    typedef void(__import FType());
    FType *MyFunk = (FType *)GetProcAddress(dllinstance, "_Proc");

    HWND GlobHook = SetWindowsHookEx(WH_SYSMSGFILTER, MyFunk, dllinstance,0);

    if(GlobalDateEX.GlobHook==0)
    MessageBox(0, "Error HOOK!", "DLL", 0);
  }
}

Неработает  MyFunk=NULL, как правильно передать указатель на функцию??? Пишу перехват Api и хуки первый раз поэтому просьба сразу нагами не пинать.
PM MAIL   Вверх
jonie
Дата 14.10.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Код

typedef void(*pFunct)(); //определяем функтор
pFunct Funct = (pFunct)GetProcAddress(dllinstance, "_Proc");

+вы уверены что загрузилась либа ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
sumbain
Дата 14.10.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



Цитата

Код

typedef void(*pFunct)(); //определяем функтор
pFunct Funct = (pFunct)GetProcAddress(dllinstance, "_Proc");


Funct всеравно = NULL

DLL должна загрузится, она находится в том же каталоге и хэндл не равен null.

HWND GlobHook = SetWindowsHookEx(WH_SYSMSGFILTER, MyFunk, dllinstance,0);
в этой строке выдает следующие ощибки:

[C++ Error] Unit1.cpp(100): E2034 Cannot convert 'void (*)()' to 'int (__stdcall *)()'
[C++ Error] Unit1.cpp(100): E2342 Type mismatch in parameter 'lpfn' (wanted 'int (__stdcall *)()', got 'void (*)()')

пробовал менять тип на int WINAPI Proc() теже ошибки.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.