| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Блокировка сайтов в Windows 7 |
| Автор: snakesoft 14.7.2011, 21:17 |
| Здравствуйте, уважаемые! Разрабатывал программу для блокировки сайтов в Windows XP посредством перехвата Send, WSASend. На Windows 7 данный способ не работает. Браузеры просто зависают единогласно. Подскажите пожалуйста, актуален ли способ перехвата Send, WsaSend в Windows 7 (возможно ли это, может программе нужны особые права?) или нужно копать в другую сторону? Спасибо. |
| Автор: Чучмек 16.7.2011, 16:46 |
| Твоя программа- внедряемая в браузеры dll? Как внедряешь? Добавлено через 4 минуты и 15 секунд hosts |
| Автор: Poseidon 17.7.2011, 17:52 |
| Меня всегда умиляли инженеры-разработчики велосипедов. В Win7 есть прекрасно работающий родительский контроль, который справляется не только с блокировкой сайтов. |
| Автор: snakesoft 18.7.2011, 13:55 | ||
| 2 Чучмек Да. Внедряю так:
hosts - неактуально, очень легко обойти |
| Автор: Чучмек 18.7.2011, 20:12 |
| А попробуй через реестр. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs В семерке по моему тоже действует. Или через мой Injector_dl, Правда в Win7 в установленные проги не внедряет. Почему?... Не разбирался. Не доходят руки установить семерку. Заменил вложение на исправленный 24.12.12 |
| Автор: snakesoft 19.7.2011, 07:44 |
| 2 Чучмек. Обязательно попробую и отпишусь о результатах. |
| Автор: snakesoft 20.7.2011, 14:13 |
| 2 Чучмек При использовании параметра AppInit_DLLs в реестре, блокировка не работает ((( |
| Автор: snakesoft 20.7.2011, 15:22 |
| 2 Чучмек В архиве прилагаю рабочий пример для Windows XP (блокирует доступ к google.ru), а также семерошную WS2_32.dll. Поставил себе Winxp sp3 и Win7 Максимальная. Запускаю Injector.exe на XP, запускаю любой браузер - доступ к googl'y блокируется. (Перехватывал Send, WsaSend). Делаю тоже самое на Win 7 - браузер либо зависает, либо вообще вылетает, как IE, так и Opera с FireFox'ом. Пробовал ставить MessageBox'ы в функциях перехвата. В мессаджах получал имена хостов, к которым происходит попытка доступа, т.е. в принципе как я понял и на 7-ке перехват работает, но лишь с одним приколом, что браузер потом вылетает. |
| Автор: Чучмек 20.7.2011, 17:22 |
| Я правильно понял... Основой является HookProc из advApiHook стороннего разработчика? Вот там и бок. Добавлено через 5 минут и 47 секунд Завтра будет время - дам свой вариант. |
| Автор: snakesoft 20.7.2011, 17:38 |
| Проблему почти решил. в AdvApiHook.pas нужно было заменить способ выделения памяти GetMem на VirtualAlloc, далее PAGE_READWRITE заменить на PAGE_EXECUTE_READWRITE. После выполненных действий блокировка на WIN7 заработала ... Проверял на Opera, FireFox, Chrome Но..... IE иногда глючит по непонятным мне причинам, долго обрабатывает запрос, а иногда вообще не отображает страницы. Как можно этот баг устранить? Спасибо. |
| Автор: Чучмек 21.7.2011, 08:57 | ||||
В ie первый запрос идет по UDP на 127.0.0.1, 'внутренний запрос'(по крайней мере в 6). Если это соединение оборвать - IE будет долго тормозить. Я не знаю связанно это или нет с
Кроме того, конструкция
Будет обрывать все запросы содержащие строку 'google.ru'. Попробуй ввести в яндексе этот самый 'google.ru'. - выдаст "невозможно отобразить страницу" |
| Автор: Чучмек 21.7.2011, 14:10 | ||||
Можно посмотреть? Вот
Пример использования:
|
| Автор: snakesoft 21.7.2011, 14:37 |
| 2 Чучмек Прилагаю архив с исправленным AdvApiHook |
| Автор: Чучмек 21.7.2011, 14:49 | ||
| Перехват WinApi не будет работать в следующих случаях 1.Не получается внедрить dll в процесс. 2.virtualprotect не устанавливает необходимые атрибуты. 3. Не правильно определен CopyByte и соответственно управление передается в средину инструкции. 4. В системе имеется другая dll(чаще всего вирус) перехватывающая те же функции. 1 и 2 следует ожидать в новых версиях windows, в связи с параноидальным увеличением безопасности. 3 - при изменении версии dll (если CopyByte не определяется динамически под функцию, об этом ниже) 4 - связано с использованием относительных переходов - при переносе кода, точка передачи управления тоже смещается.(Выход(частичный) - абсолютные переходы. Позже дам измененную WinApiPatch) CopyByte - динамически:
lde_opcode_length смотри http://forum.vingrad.ru/forum/topic-325368.html |
| Автор: snakesoft 21.7.2011, 16:33 |
| 2 Чучмек А в самом AdvApiHook.pas можно что-то изменить, чтобы в IE на семерке всё заработало? |
| Автор: Чучмек 21.7.2011, 20:00 | ||
| А тут уже не вAdvApiHook.pas проблема. С пустой Nsend IE нормально работает ?
Проверял? |
| Автор: snakesoft 22.7.2011, 05:02 |
| 2 Чучмек. Да, с пустой NSend нормально работает. Всё разобрался с NSend. Спасибо. |
| Автор: Чучмек 22.7.2011, 09:33 | ||
Вот так должно работать. Но учти, что блокировать надо не все запросы. А только ПЕРВЫЙ send в соединении. И только вслучае если он содержит строку вида: #13#10+'Host:google.ru'+#13#10 |
| Автор: Akella 22.7.2011, 11:00 | ||
даже если программа запущена от обычного пользователя? |
| Автор: snakesoft 22.7.2011, 13:09 |
| 2 Akella На ограниченной учётной записи не проверял. На учётной записи с правами администратора всё ОК 2 Чучмек Ок.Понял |
| Автор: Akella 22.7.2011, 14:01 | ||
Я тебе намекнул, что не работает из-за того, что винда не даёт программе достаточно прав. На семёрке нужно запрашивать повышения прав (UAC). |
| Автор: snakesoft 22.7.2011, 17:39 |
| 2 Akella Скажи пожалуйста, у тебя случайно нет манифеста, который можно прикрутить к своей программе, чтобы она запускалась с правами администратора в Windows 7? |
| Автор: Akella 22.7.2011, 22:40 | ||
| Неа. Но, думаю, что найти его через гуголь или взять у любой другой программы не проблема. Добавлено @ 22:41 В крайнем случае в ярлыке запуска можно включить "Запускать с правами администратора". И не путать с термином "от имени администратора". Добавлено @ 22:49 тут есть манифест: http://forum.oszone.net/thread-197803.html http://krez0n.org.ua/archives/318 здесь есть примеры на дельфи, как без манифеста запросить у пользователя разрешение на поднятие прав: http://www.delphimaster.net/view/15-1281636818/0-39 http://forum.codeby.net/topic42048.html и это полезно: http://windows.microsoft.com/ru-RU/windows7/help/columns/Simplify-applications-launch-in-Windows7 Добавлено @ 22:50 Как видишь, 10 минут в гугле и куча инфы как на ладони ;) Добавлено @ 22:53
Программа не будет запущена сразу с правами админа, т.к. для начала винда покажет пользователю соответствующий запрос. И уже пользователь будет решать, запускать программу или нет Кстати, ещё интересный момент. Можно сделать так, что даже если пользователь нажмёт НЕТ при запросе, то программа всё равно запуститься, но без прав админа. Не знаю как это реализовать, посмотри примеры, может там есть. |
| Автор: snakesoft 25.7.2011, 02:57 |
| 2 Akella Тебя понял, спасибо, поизучаю. Да, здесь дело в UAC. Кстати заметил следующую интересную тенденцию: Если при включенном UAC запускаю свою программу - она блокирует список сайтов во всех браузерах кроме IE. Если выключаю UAC - после перезагрузки программа блокирует сайты и в IE. В принципе парадоксален лишь один факт. Почему при включенном UAC блокирует во всех браузерах кроме IE? Насколько я понял IE использует Tsend, а все остальные браузеры - TWSASend, или, возможно я ошибаюсь? Но код блокировки в функции перехвата Tsend идентичен коду в перехвате TWSASend, тогда в чём загвоздка? И если при включенном UAC захожу в свойства -> совместимость -> уровень прав и выставляю галочку "Выполнять эту программу от имени администратора" в IE сайты не блокируются всё равно, только если отключаешь UAC перезагружаешься, тогда всё OK На XP соответственно всё работает нормально, как в IE так и во всех других браузерах... |
| Автор: Akella 28.7.2011, 10:23 | ||
даже, если работать от имени простого пользователя? |
| Автор: snakesoft 28.7.2011, 22:40 |
| 2 Akella Да, специально для этого создал учетную запись с ограниченными правами и проверил. |
| Автор: Чучмек 29.7.2011, 09:28 |
| snakesoft, В таком виде (AdvApiHook),для серьезных программ, перехват WinAPI не годится. Подключи две dll перехватывающие одну и ту же функцию... Если у пользователя уже стоит нечто подобное(в плане перехвата WinAPI) - он удалит твою программу сразу после установки. |