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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание драйверов в Delphi 
V
    Опции темы
drkot
Дата 24.7.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



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

PS: чето я непойму откуда у народа такая любовь к хукам на сокеты. 
http://www.wasm.ru/article.php?article=netfilter 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
ASGDeveloper
Дата 24.7.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Вот код перехватчика. Бага в том, что данные не сразу попадают в буфер. Не знаете в чем проблема?

Код

library injmod;

uses
  WinSock2,
  WinDows,
  madCodeHook;

var
  WSARecvNextHook: function(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD; var lpNumberOfBytesRecvd: DWORD; var lpFlags: DWORD;
    lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;

function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar; assembler;
asm
        PUSH    EDI
        PUSH    ESI
        PUSH    EBX
        MOV     ESI,EAX
        MOV     EDI,EDX
        MOV     EBX,ECX
        XOR     AL,AL
        TEST    ECX,ECX
        JZ      @@1
        REPNE   SCASB
        JNE     @@1
        INC     ECX
@@1:    SUB     EBX,ECX
        MOV     EDI,ESI
        MOV     ESI,EDX
        MOV     EDX,EDI
        MOV     ECX,EBX
        SHR     ECX,2
        REP     MOVSD
        MOV     ECX,EBX
        AND     ECX,3
        REP     MOVSB
        STOSB
        MOV     EAX,EDX
        POP     EBX
        POP     ESI
        POP     EDI
end;

function StrPCopy(Dest: PChar; const Source: string): PChar;
begin
  Result := StrLCopy(Dest, PChar(Source), Length(Source));
end;

function AnsiLowerCase(const S: string): string;
var
  Len: Integer;
begin
  Len := Length(S);
  SetString(Result, PChar(S), Len);
  if Len > 0 then CharLowerBuff(Pointer(Result), Len);
end;

function WSARecvHookProc(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD; var lpNumberOfBytesRecvd: DWORD; var lpFlags: DWORD;
  lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
var
  str: string;
begin
  Result := WSARecvNextHook(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
  str := PChar(lpBuffers.buf);

  if Pos('subject: ', AnsiLowerCase(str)) > 0 then
  begin
    //str := 'X-Application: Test' + #13#10 + str;

    StrPCopy(lpBuffers.buf, str);
    lpBuffers.len := Length(str);
     lpNumberOfBytesRecvd := Length(str);
  end;
end;

procedure EntryPoint(Ac: dword); stdcall;
begin
  if Ac = DLL_PROCESS_ATTACH then
  begin
    HookAPI('ws2_32.dll', 'WSARecv', @WSARecvHookProc, @WSARecvNextHook);
  end;
end;

begin
  DLLProc := @EntryPoint;
  EntryPoint(DLL_PROCESS_ATTACH);
end.

 

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


sceloglauxalbifacies
****


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

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



гы... smile почитай msdn на тему WSARecv.

посмотри что возвращает WSARecv - WSA_IO_PENDING? smile
тут одним хуком не отделаешься. в данном случае WSARecv только инициирует прием, непосредственно получение данных сопровождается либо вызовом lpCompletionRoutine(если она не NULL при вызове), либо "выставлением" эвента(lpOverlapped.hEvent).
похукать lpCompletionRoutine не проблема. а вот если получение ожидается на эвенте, тогда сложнее. никаких "простых" решений в голову не приходит... 
PM MAIL   Вверх
ASGDeveloper
Дата 25.7.2006, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Цитата(dumb @  24.7.2006,  17:42 Найти цитируемый пост)
никаких "простых" решений в голову не приходит... 

Угу. Кроме драйвера.  smile 

Хм, какие еще будут предложения? Желательно для дельфы или борландовского билдера. 
PM MAIL   Вверх
drkot
Дата 25.7.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Насколько я понимаю в нт системах можно написать сервис и установить его как драйвер без хитрых манипуляций описаных на МАСМе.
И перехватывать думаю надо не вызовы функций, а непосредственно поток пакетов в стеке протоколоа TCP\IP. 
Цитата(ASGDeveloper @  24.7.2006,  13:01 Найти цитируемый пост)
 перехват, проверка и модификация (если надо) POP3-трафика

ето как раз та задача которая решается NDIS фильтрами. 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
ASGDeveloper
Дата 25.7.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Цитата(drkot @  25.7.2006,  10:12 Найти цитируемый пост)
ето как раз та задача которая решается NDIS фильтрами.

а примерчик не знаешь где можно взять?

ЗЫ ВинПКап не подходит в виду того, что автор хочет его платным сделать  smile (мы с ним списывались) 
PM MAIL   Вверх
drkot
Дата 25.7.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Цитата(ASGDeveloper @  25.7.2006,  10:47 Найти цитируемый пост)
ЗЫ ВинПКап не подходит в виду того, что автор хочет его платным сделать

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

http://www.wasm.ru/article.php?article=netfilter
http://www.wasm.ru/comment.php?artcode=netfilter
Встречал статью по реализации фильтра на си тока ссылочку не помню.
примеров сервисов на форуме полно. 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
ASGDeveloper
Дата 25.7.2006, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Цитата(drkot @  25.7.2006,  11:21 Найти цитируемый пост)
таки исходники есть.

хм, не уточнишь где?


Цитата(drkot @  25.7.2006,  11:21 Найти цитируемый пост)
должны распространятся GNU

К сожалению GNU/GPL меня не устраивает.


Цитата(drkot @  25.7.2006,  11:21 Найти цитируемый пост)
примеров сервисов на форуме полно.

На каком форуме? Васмовском или этом? 
PM MAIL   Вверх
drkot
Дата 25.7.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Цитата(ASGDeveloper @  25.7.2006,  11:24 Найти цитируемый пост)
хм, не уточнишь где?

http://www.winpcap.org/archive/

Цитата(ASGDeveloper @  25.7.2006,  11:24 Найти цитируемый пост)
К сожалению GNU/GPL меня не устраивает.

жал

Цитата(ASGDeveloper @  25.7.2006,  11:24 Найти цитируемый пост)
На каком форуме?

на этом 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
bems
Дата 25.7.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(dumb @  24.7.2006,  17:42 Найти цитируемый пост)
похукать lpCompletionRoutine не проблема. а вот если получение ожидается на эвенте, тогда сложнее. никаких "простых" решений в голову не приходит...

lpCompletionRoutine можно и не хукать. А в хуке на WSARecv использовать свою lpCompletionRoutine, в ней делать обработку и вызывать переданную вызывающим кодом. 

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


--------------------
Обижено школьников: 8
PM MAIL   Вверх
dumb
Дата 25.7.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

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



тупим-с... smile  
PM MAIL   Вверх
ASGDeveloper
Дата 25.7.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Цитата(drkot @  25.7.2006,  12:59 Найти цитируемый пост)
http://www.winpcap.org/archive/

Дык WinPCap не пойдет. Или можно по-другому?  smile 


Цитата(dumb @  25.7.2006,  17:34 Найти цитируемый пост)
тупим-с... smile   

Это ты о чем? 
PM MAIL   Вверх
dumb
Дата 25.7.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

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



Цитата(ASGDeveloper @  25.7.2006,  17:47 Найти цитируемый пост)
Это ты о чем? 

это я о том, что решение, лежащее на поверхности(которое указал bems), мне в голову не пришло.  smile smile 
PM MAIL   Вверх
bems
Дата 25.7.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(dumb @  25.7.2006,  17:52 Найти цитируемый пост)
решение, лежащее на поверхности
это оно в принципе на поверхности. Конкретная реализация будет не слишком простой, если учитывать возможное количество одновременных вызовов WSARecv из разный потоков/прцессов. Мой вариант этого кода уже почти всегда корректно работает, но не дам, тк автор темы мне конкурент smile Уж извини
 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ASGDeveloper
Дата 25.7.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Цитата(bems @  25.7.2006,  18:02 Найти цитируемый пост)
тк автор темы мне конкурент smile 

Да ладно тебе! Поделись! smile
Чего у тебя в подписи? Мы за свободный рынок!  smile  
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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