Войти

Показать полную графическую версию : Перехват функций обращения к реестру в C#


geolone
03-02-2012, 21:09
Здравствуйте, помогите пожалуйста решить проблему. Мне необходимо перехватывать обращения любой программы к реестру и затем заменять реальное значение на свое. Как все это реализовать в C#?

Любезный
03-02-2012, 21:53
С какой целью это нужно? Написать что-то вредоносное?

Drongo
03-02-2012, 22:24
А какже контроль целостности приложений в антивирусах? Они кстати тоже отслеживают обращения к реестру и попытки записать туда свои значения.

geolone
03-02-2012, 22:30
Нужно исключительно для себя, не каких злых умыслов. Тем более о каких вредоносных программах может идти речь используя C#.

opel431
03-02-2012, 23:01
Тем более о каких вредоносных программах может идти речь используя C#. »
Ну, да! Эти гадости, пишутся на папирусе!
А, вообще, смотрите исходники регмонитора.

Delirium
04-02-2012, 03:50
http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=C%23+monitoring+registry
http://stackoverflow.com/questions/826971/registry-watcher-c-sharp

http://www.codeproject.com/Articles/20973/RegMon

Этих ссылок более чем достаточно для решения вопроса.

Любезный
04-02-2012, 13:14
А какже контроль целостности приложений в антивирусах? Они кстати тоже отслеживают обращения к реестру и попытки записать туда свои значения. »

Но они не делают этого:
и затем заменять реальное значение на свое. »

geolone
04-02-2012, 16:43
http://www.google.ru/search?sourceid...oring+registry
http://stackoverflow.com/questions/8...atcher-c-sharp
http://www.codeproject.com/Articles/20973/RegMon
Этих ссылок более чем достаточно для решения вопроса. »

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

Delirium
05-02-2012, 14:18
geolone, в таком случае приводи свою проблему более развернуто. А то мы тут распинаемся, предоставляем данные, а ты, оказывается, уже все это читал и есть еще вопросы. В чем вопрос то конкретно?

geolone
06-02-2012, 19:04
В общем здесь http://stackoverflow.com/questions/8...atcher-c-sharp я понял, что в этом RegMon реализован мониторинг на стадии изменения ключа, но мне нужно перехватить функцию при попытке чтения ключа и затем вернуть значение которое задам сам, а может я все не так понял?

Дальше http://www.codeproject.com/Articles/20973/RegMon вообще глухо ниче не понимаю здесь.

Единственно что смог сделать так это подключить dll

[DllImport("advapi32.dll", SetLastError = true)] internal static extern UInt32 RegQueryValue( IntPtr hKey, [MarshalAs(UnmanagedType.LPStr)]string lpSubKey, StringBuilder lpValue, ref UInt32 lpcbValue);

как с ней работать дальше? какие функции нужно использовать для перехвата RegQueryValue? или может вообще я пошел не в ту степь?

Delirium
07-02-2012, 02:05
перехватить функцию при попытке чтения ключа »
Что подразумевается под ПОПЫТКОЙ чтения ключа? Вот чисто с твоей точки зрения?

В ссылке (http://stackoverflow.com/questions/826971/registry-watcher-c-sharp ) приводится 2 варианта. Второй да, отслеживает изменения после изменения. Первый же мониторит состояния путем

ManagementEventWatcher watcher = new ManagementEventWatcher(query);
Console.WriteLine("Waiting for an event...");
// Set up the delegate that will handle the change event.
watcher.EventArrived

EventWatcher как раз и мониторит все состояния и попытки доступа аналогично FileSystemWatcher.

Специально сделал проектик, создал раздел в реестре и попытался изменить значение. При нажатии на Enter программа перехватила мою попытку записать данные.

Посмотри вот это еще:
http://www.codeproject.com/Articles/30624/Asynchronous-Registry-Notification-Using-Stronglyhttp://msdn.microsoft.com/en-us/library/aa393035.aspx - здесь более подробно разобраны эти вопросы.

и вот это:
http://www.codeproject.com/Articles/27637/EasyHook-The-reinvention-of-Windows-API-hooking




© OSzone.net 2001-2012