Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокировка сайтов в Windows 7 
:(
    Опции темы
snakesoft
  Дата 14.7.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, уважаемые!
Разрабатывал программу для блокировки сайтов в Windows XP посредством перехвата Send, WSASend.
На Windows 7 данный способ не работает.
Браузеры просто зависают единогласно.
Подскажите пожалуйста, актуален ли способ перехвата Send, WsaSend в Windows 7 (возможно ли это, может программе нужны особые права?) или нужно копать в другую сторону?
Спасибо.

Это сообщение отредактировал(а) snakesoft - 14.7.2011, 21:18
PM MAIL   Вверх
Чучмек
Дата 16.7.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Твоя программа- внедряемая в браузеры dll?
Как внедряешь?

Добавлено через 4 минуты и 15 секунд
Цитата(snakesoft @  14.7.2011,  21:17 Найти цитируемый пост)
или нужно копать в другую сторону

hosts



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Poseidon
Дата 17.7.2011, 17:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



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


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
snakesoft
Дата 18.7.2011, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 Чучмек

Да.
Внедряю так:

Код

type TShp = procedure (hk: HHOOK) stdcall;

procedure InjectDLL(dll_name: string);
var
   p: pointer;
   sh: TShp;
begin
    mylib:=LoadLibrary(PAnsiChar(dll_name));
     if mylib=0 then
        begin
           exit;
        end;
     p:=GetProcAddress(mylib, 'HookProc');
     @sh:=GetProcAddress(mylib, 'SetHK');
     if ((p=nil) or (@sh=nil)) then
        begin
             FreeLibrary(mylib);
             exit;
        end;
     hook:=SetWindowsHookEx(WH_CALLWNDPROC, p, mylib, 0);
     if hook=0 then
        begin
             FreeLibrary(mylib);
             exit;
        end;
     sh(hook);
     FreeLibrary(mylib);
end;


hosts - неактуально, очень легко обойти
PM MAIL   Вверх
Чучмек
Дата 18.7.2011, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



А попробуй через реестр.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
В семерке по моему тоже действует.
Или через мой Injector_dl, Правда в Win7 в установленные проги не внедряет. Почему?... Не разбирался. Не доходят руки установить семерку.  
Заменил вложение на исправленный 24.12.12

Это сообщение отредактировал(а) Чучмек - 25.12.2012, 01:26

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  Injector_dll.exe 408,50 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
snakesoft
Дата 19.7.2011, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 Чучмек. Обязательно попробую и отпишусь о результатах.
PM MAIL   Вверх
snakesoft
Дата 20.7.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 Чучмек

При использовании параметра AppInit_DLLs в реестре, блокировка не работает (((
PM MAIL   Вверх
Чучмек
Дата 20.7.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Код перехвата winAPI,пожалуйста.
После virtualprotect, удается ли записать в область памяти отведенную под dll????
Сколько байт winAPI перезаписывается?
Семерошную WS2_32.dll мне.

Добавлено через 3 минуты и 5 секунд
Цитата(snakesoft @  20.7.2011,  14:13 Найти цитируемый пост)
При использовании параметра AppInit_DLLs в реестре, блокировка не работает ((( 

Симптомы те же? Зависание?

Это сообщение отредактировал(а) Чучмек - 20.7.2011, 15:00


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
snakesoft
Дата 20.7.2011, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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-ке перехват работает, но лишь с одним приколом, что браузер потом вылетает.

Присоединённый файл ( Кол-во скачиваний: 63 )
Присоединённый файл  mydll.rar 158,23 Kb
PM MAIL   Вверх
Чучмек
Дата 20.7.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Я правильно понял...
Основой является HookProc из advApiHook стороннего разработчика?
Вот там и бок.

Добавлено через 5 минут и 47 секунд
Завтра будет время - дам свой вариант.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
snakesoft
Дата 20.7.2011, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблему почти решил. в AdvApiHook.pas нужно было заменить способ выделения памяти GetMem на VirtualAlloc, далее PAGE_READWRITE заменить на PAGE_EXECUTE_READWRITE.
После выполненных действий блокировка на WIN7 заработала ... Проверял на Opera, FireFox, Chrome
Но..... IE иногда глючит по непонятным мне причинам, долго обрабатывает запрос, а иногда вообще не отображает страницы.

Как можно этот баг устранить?

Спасибо.

Это сообщение отредактировал(а) snakesoft - 21.7.2011, 01:46
PM MAIL   Вверх
Чучмек
Дата 21.7.2011, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Цитата(snakesoft @  20.7.2011,  17:38 Найти цитируемый пост)
Но..... IE иногда глючит по непонятным мне причинам

В ie первый запрос идет по UDP на 127.0.0.1, 'внутренний запрос'(по крайней мере в 6). Если это соединение оборвать - IE будет долго тормозить.
Я не знаю связанно это или нет с
Цитата(snakesoft @  20.7.2011,  17:38 Найти цитируемый пост)
Но..... IE иногда глючит по непонятным мне причинам, долго обрабатывает запрос, а иногда вообще не отображает страницы.
 Но если в запросе будет 'google.ru' он будет оборван.
Кроме того, конструкция 
Цитата

if pos('google.ru', String(lpBuffers.Buf))>0 then

Будет обрывать все запросы содержащие строку 'google.ru'.
Попробуй ввести в яндексе этот самый 'google.ru'. - выдаст "невозможно отобразить страницу"



Это сообщение отредактировал(а) Чучмек - 21.7.2011, 08:59


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 21.7.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Цитата(snakesoft @  20.7.2011,  17:38 Найти цитируемый пост)
AdvApiHook.pas

Можно посмотреть?


Цитата(Чучмек @  20.7.2011,  17:22 Найти цитируемый пост)
Завтра будет время - дам свой вариант. 

Вот
Код

function WinApiPatch(WinApiProcAddr,MyWinApiProcAddr,OldWinApiProcAddr:pointer):integer;
type
 tjmprec=packed record
    jmpbyte:byte; // $E9
    jmpsize:integer;  // Адресс назначения - Адресс jmprec  - sizeOf(jmprec)  (5 b)
    end;
 pjmprec=^tjmprec;
const
 minLength=sizeOf(tjmprec);
function getLengthDataForCopy(ProcAdr:pointer):integer;
  begin
  result:=minLength;
  end;
Var
 atr1,atr2:integer;
 CopyByte:integer;
 i:cardinal;
 jmptoMy,jmptoOld:pjmprec;
begin
CopyByte:=getLengthDataForCopy(WinApiProcAddr);  //Определяю размер переписываемой части пропатчиваемой WinApi равный длинному jmp(5байт)+выравнивание под переносимые команды WinApi
virtualprotect(WinApiProcAddr,CopyByte,PAGE_READWRITE,@atr1); //Разрешаю чтение-запись в WinApi в пропатчиваемо-копируемой области
virtualprotect(OldWinApiProcAddr,CopyByte+minLength,PAGE_READWRITE,@atr2);//Разрешаю чтение-запись в заготовку под перенос WinApi в области размером=переносимые данные+длинный jmp(5байт) в не изменяемый остаток WinApi
for i:=0 to CopyByte-1 do
pbyte(cardinal(OldWinApiProcAddr)+i)^:=pbyte(cardinal(WinApiProcAddr)+i)^;
jmptoMy:=WinApiProcAddr;
jmptoOld:=pointer(cardinal(OldWinApiProcAddr)+CopyByte);
jmptoMy^.jmpbyte:=$E9;
jmptoMy^.jmpsize:=cardinal(MyWinApiProcAddr)-cardinal(jmptoMy)-sizeOf(tjmprec);
jmptoOld^.jmpbyte:=$E9;
jmptoOld^.jmpsize:=cardinal(WinApiProcAddr)+CopyByte-cardinal(jmptoOld)-sizeOf(tjmprec);
virtualprotect(WinApiProcAddr,CopyByte,atr1,@atr1); //Востанавливаю атрибуты
virtualprotect(OldWinApiProcAddr,CopyByte+minLength,atr2,@atr2);
end;



Пример использования:
Код

function old_connect(s: integer; var name: Tsockaddr; namelen: Integer): Integer; stdcall;
begin
asm db '00000000000000000000000000000000000000000000000000000';end;
end;

function my_connect(s: integer; var name: Tsockaddr; namelen: Integer): Integer; stdcall;
begin
...
...
...
result:=old_connect(s,name,namelen);
end;

var 
hws:cardinal;
adrf:pointer;
...
begin
hws:=loadlibrary('WS2_32.dll');       //Загружаю библиотеку сокетов
adrf:=GetProcAddress(hws,'connect');  //Получаю адресс  connect
  WinApiPatch(adrf,@my_connect,@old_connect);  //пропатчиваю connect, теперь вместо connect будет вызыватся my_connect, а для вызова connect нужно вызывать old_connect
end;



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
snakesoft
Дата 21.7.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 Чучмек

Прилагаю архив с исправленным AdvApiHook

Присоединённый файл ( Кол-во скачиваний: 77 )
Присоединённый файл  advApiHook.rar 16,08 Kb
PM MAIL   Вверх
Чучмек
Дата 21.7.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Перехват WinApi не будет работать в следующих случаях
1.Не получается внедрить dll в процесс.
2.virtualprotect не устанавливает необходимые атрибуты.
3. Не правильно определен CopyByte и соответственно управление передается в средину инструкции.
4. В системе имеется другая dll(чаще всего вирус) перехватывающая те же функции.

1 и 2 следует ожидать в новых версиях windows, в связи с параноидальным увеличением безопасности.
3 -  при изменении версии dll (если CopyByte не определяется динамически под функцию, об этом ниже)
4 - связано с использованием относительных переходов - при переносе кода, точка передачи управления тоже смещается.(Выход(частичный) - абсолютные переходы. Позже дам измененную WinApiPatch)

CopyByte - динамически:
Код

function getLengthDataForCopy(ProcAdr:pointer):integer;
  begin
  result:=0;
  repeat
  result:=result+lde_opcode_length(pointer(cardinal(ProcAdr)+result));
  until result>=minLength;
  end;

lde_opcode_length смотри Размер машинных инструкций 




--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




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


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

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