Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2012.03.04;
Скачать: [xml.tar.bz2];

Вниз

Как перехватить API функции (Connect, Bind) и изменить их парамет   Найти похожие ветки 

 
MALAN ©   (2009-02-25 14:25) [0]

Некий процесс в системе хочет соединиться с XXX.XXX.XXX.XXX:YYYYY (IP:PORT), а для этого вызывает команду Connect с IP адресом и номером порта. Необходимо чтобы программа перехватчик изменила параметры команды Connect так чтобы если YYYYY = 25, то соединение перенаправлялось на локальный порт который слушает программа перехватчик, а отттуда уже изменённые данные отправлялись бы куда надо.

Перерыл много инфы, и хотя задача вроде бы не сложная, но в силу своей тупости и малого опыта ничего конкретного сделать не смог.
Насколько я понял есть несколько вариантов (изменение  Winsock.dll, сплайсинг), наиболее вменяемый это внедрение специальной DLL во все создаваемые процессы (http://www.rsdn.ru/article/baseserv/InjectDll.xml).
Но как должна выглядеть эта DLL, чтобы она могла модифицировать комманду Connect, а оригинальную отправлять программе перехватчику?


 
Anatoly Podgoretsky ©   (2009-02-25 15:04) [1]

> MALAN  (25.02.2009 14:25:00)  [0]

Это называется файрвол.
Говоришь не сложная задача, ну-ну.


 
Сергей М. ©   (2009-02-25 15:41) [2]


> MALAN ©   (25.02.09 14:25)  


Клиент где находится, в корп. лок.сети или подключен непосредственно к сети провайдера ?


 
Rouse_ ©   (2009-02-25 17:33) [3]

Тут пример перехвата recv, wsarecv и wsarecvex через правку таблицы импорта, переделай на сплайсинг и на connect

http://forum.sources.ru/index.php?showtopic=86903


 
MALAN ©   (2009-02-25 18:20) [4]

>Сергей М. ©   (25.02.09 15:41) [2]

>Клиент где находится, в корп. лок.сети или подключен непосредственно к >сети провайдера ?

всё находится на локальной машине, топология сети значения не имеет

>Anatoly Podgoretsky ©   (25.02.09 15:04) [1]

>Это называется файрвол.
>Говоришь не сложная задача, ну-ну.

Скорее уж прокси-сервер


 
Сергей М. ©   (2009-02-25 19:55) [5]


> топология сети значения не имеет
>


Да ты что ?
А мужики-то и не знали ..

Как же не имеет, если, например, есть возможность доступа к интересующему трафику на подконтрольном шлюзе или прокси-серверу сети ?


 
MALAN ©   (2009-02-25 20:12) [6]

>Сергей М. ©   (25.02.09 19:55) [5]

меня интересует только трафик идущий от/к программам запущенным на локальной машине, если ещё точнее, то почта


 
Сергей М. ©   (2009-02-25 20:20) [7]

Вот я и спрашиваю - идет ли этот трафик непосредственно через интерфейс провайдера или на пути к интерфейсу провайдера в сети имеется подконтрольный тебе шлюз и/или прокси ?


 
MALAN ©   (2009-02-25 20:35) [8]

>Сергей М. ©   (25.02.09 20:20) [7]

А какая собственно разница? Перехват-то должен происходить на сеансовом уровне модели OSI и на той же самой локальной машине, структура сети не должна влиять на работу программы... работа программы-перехватчика должна быть похожа на реализацию атаки "человек-посередине" (ну т.е. посередине будет не человек, а программа, но принцип вообщем-то тот же)


 
Сергей М. ©   (2009-02-25 20:53) [9]


> MALAN ©   (25.02.09 20:35) [8]


> какая собственно разница?


Ты действительно тупой или прикидываешься ?)

Одно дело - совершенно штатным и легальным образом задействовать SMTP/POP3/IMAP-фильтр на хосте-шлюзе в своей ЛВС, мимо которого не пройдет ни один байт внешнего трафика, и совсем другое дело - заниматься ректальным внедрением всякого рода "шпионских" DLL во вс е подряд процессы, не имея при этом никакой гарантии успешности начатой кампании !

И если тебе нужно просто подслушать трафик на лок.машине, то что-то куда-то внедрять нет никакой необходимости - есть готовая легальная проверенная WinPCap, она чудесно справляется со шпионскими делами


 
MALAN ©   (2009-02-25 21:14) [10]

Сергей М. ©   (25.02.09 20:53) [9]

>Ты действительно тупой или прикидываешься ?)

>Одно дело - совершенно штатным и легальным образом задействовать SMTP/>POP3/IMAP-фильтр на хосте-шлюзе в своей ЛВС

>И если тебе нужно просто подслушать трафик на лок.машине, то что-то >куда-то внедрять нет никакой необходимости - есть готовая легальная >проверенная WinPCap, она чудесно справляется со шпионскими делами

А я где-то написал что мне нужно просто "подслушать траффик"? Я же русским по белому пишу, нужно модифицировать информацию (заметьте, не пакеты, а саму информацию, в частности текст письма, добавлять заголовки) причём, прозрачно для почтовых программ, а для этого перехват лучше осуществлять на сеансовом уровне просто перенаправляя соединение, и программа эта должна находится не на шлюзе, а на локальной машине


 
Сергей М. ©   (2009-02-26 08:31) [11]


> не пакеты, а саму информацию


Информацию эту несут как раз те самые пакеты.

http://www.wasm.ru/article.php?article=netfilter


 
Сергей М. ©   (2009-02-26 08:32) [12]


> как должна выглядеть эта DLL


Что значит "как" ?
Обычно должна выглядеть - DLL она и есть DLL..


 
MALAN ©   (2009-02-26 08:42) [13]

>Сергей М. ©   (26.02.09 08:31) [11]

>Информацию эту несут как раз те самые пакеты.

Кто бы мог подумать:))

>Что значит "как" ?
>Обычно должна выглядеть - DLL она и есть DLL..

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


 
Сергей М. ©   (2009-02-26 09:16) [14]


> кода, который исполняется автоматически при подключении
> что должен содержать этот исполняемый код


Подготовить все необходимое для гарантированного получения управления при вызове впоследствии тех или иных требуемых API-функций, что же еще ?


 
Сергей М. ©   (2009-02-26 09:18) [15]


> что должен содержать этот исполняемый код


Вот это самое все необходимое для подготовки он и должен содержать.


 
Anatoly Podgoretsky ©   (2009-02-26 12:28) [16]

> MALAN  (25.02.2009 18:20:04)  [4]

При (http) прокси сервере ни о каком интернете и речи нет, и даже об локалке, все заканчивается прокси сервером, клиент никуда кроме этой машиные не подключается.


 
Сергей М. ©   (2009-02-26 12:36) [17]


> Anatoly Podgoretsky ©   (26.02.09 12:28) [16]


Его почтовый трафик заботит, а не гипертекстовый..

Причем так до сих пор и партизанит : непонятно как этот хост ходит в тырнет - то ли прямиком к провайдеру маршрут лежит, то ли через корпоративный прокси и/или шлюз ..


 
MALAN ©   (2009-02-26 20:54) [18]

Сергей М. ©   (26.02.09 12:36) [17]

>Причем так до сих пор и партизанит : непонятно как этот хост ходит в >тырнет - то ли прямиком к провайдеру маршрут лежит, то ли через >корпоративный прокси и/или шлюз ..

Ну хорошо, напрямую провайдеру... что дальше?:)


 
brother ©   (2009-02-27 06:18) [19]

> Ну хорошо, напрямую провайдеру... что дальше?:)

пиши программу!


 
Сергей М. ©   (2009-02-27 09:03) [20]


> MALAN ©   (26.02.09 20:54) [18]


> Ну хорошо, напрямую провайдеру


Вот теперь понятно, что локальный перехват трафика остается единственным решением.

Долго же ты ломался)


> что дальше?


Дальше либо надежное, но сложное в реализации решение с NDIS Miniport-драйвером  либо ненадежное и не менее сложное решение с драйвером, инжектирующим dll-перехватчик.


 
Anatoly Podgoretsky ©   (2009-02-27 09:51) [21]


> Его почтовый трафик заботит, а не гипертекстовый..

Так, но вот что он написал в [4]

> Скорее уж прокси-сервер

На самом деле именно так и нужно, а файрволом надо запретить выход на XXX.XXX.XXX.XXX:25, только на zzz.zzz.zzz.zzz:25 при том обязательно с аутентификацией. Именно почти так у меня и сделано, мне просто не нужно изменение.


 
MALAN ©   (2009-02-27 11:54) [22]

Сергей М. ©   (27.02.09 09:03) [20]

>Дальше либо надежное, но сложное в реализации решение с NDIS Miniport->драйвером  либо ненадежное и не менее сложное решение с драйвером, >инжектирующим dll-перехватчик.

Гора родила мышь;)

Anatoly Podgoretsky ©   (27.02.09 09:51) [21]
>На самом деле именно так и нужно, а файрволом надо запретить выход на >XXX.XXX.XXX.XXX:25, только на zzz.zzz.zzz.zzz:25 при том обязательно с >аутентификацией. Именно почти так у меня и сделано, мне просто не >нужно изменение.

Что то мне подсказывает что почтовые программы в этом случае необходимо будет перенастраивать.

P.S.Если уж на то пошло то прокси-сервер это и есть фаерволл уровня приложений


 
MALAN ©   (2009-02-27 11:54) [23]

Удалено модератором
Примечание: дубль


 
Сергей М. ©   (2009-02-27 14:06) [24]


> прокси-сервер это и есть фаерволл


Прокси это прокси, а файрвол это файрвол.
У них очень разные задачи.


> Гора родила мышь


А ты что хотел ?)


 
Palladin ©   (2009-02-27 14:09) [25]


> Если уж на то пошло то прокси-сервер это и есть фаерволл
> уровня приложений

Ага, а сыр - это сметана )


 
MALAN ©   (2009-02-27 14:18) [26]

Palladin ©   (27.02.09 14:09) [25]
>> Если уж на то пошло то прокси-сервер это и есть фаерволл
>> уровня приложений

>Ага, а сыр - это сметана )

А ты попробуй ввести в поиск "брандмауэр сетевого сеансового прикладного уровня", узнаешь много нового:)


 
Сергей М. ©   (2009-02-27 14:51) [27]


> MALAN ©   (27.02.09 14:18) [26]


А не надо нам тут америки открывать)

Да, по мере продвижения к вершине OSI-модели грани разничий в функциональности файрволов и прокси-сервисов становятся все более малоразличимы.

Только в твоем случае тебя это уже никак не касается - интересующая тебя приблуда не имеет отношения к межсетевому взаимодействию.


 
Palladin ©   (2009-02-27 15:25) [28]


> MALAN ©   (27.02.09 14:18) [26]

Я спорю что ли? )
Сыр и сметана - оба продукта молочные. ) Однако ни кто же не утверждает, что сыр это по сути сметана, на уровне исходных материалов )

Если два чего то растут из одного места - низя утверждать что одно есть, по сути, второе и наоборот.


 
MALAN ©   (2009-02-27 15:34) [29]

Сергей М. ©   (27.02.09 14:51) [27];

Может тогда всё-таки поможешь?:)

Нарыл библиотеку для перехвата, но вот как запустить одну из функций (вообщем-то самую главную, установка зука методом сплайсинга) не понял:
function SetProcedureHook(ModuleHandle:HMODULE;ProcedureName:PChar;NewProcedureAddress:Po inter;   RestoreDATA:PFunctionRestoreData):Boolean;
Что в параметрах писать? ProcedureName вроде как "Connect", а остальное?


 
MALAN ©   (2009-02-27 15:37) [30]

Palladin ©   (27.02.09 15:25) [28]

>> MALAN ©   (27.02.09 14:18) [26]

>Я спорю что ли? )
>Сыр и сметана - оба продукта молочные. ) Однако ни кто же не >утверждает, что сыр это по сути сметана, на уровне исходных материалов )

>Если два чего то растут из одного места - низя утверждать что одно есть, >по сути, второе и наоборот.

Короче "медведь и панда"(c).... я тебя понял:)


 
Сергей М. ©   (2009-02-27 15:55) [31]


> а остальное?


ModuleHandle - хэндл модуля ws2_32.dll в АП процесса-жертвы.

NewProcedureAddress - адрес твоей собственной функции, куда будет передано управление в рез-те вызова жертвой ф-ции Connect

RestoreDATA - это, видимо, указатель на область данных в твоей DLL, куда при сплайсинге будет сохранен оригинальный фрагмент контекста перехватываемой тобой функции


 
Сергей М. ©   (2009-02-27 16:02) [32]


> MALAN


При прочих равных условиях в твоем случае я бы предпочел не сплайсинг, а модификацию EAT/IAT.


 
MALAN ©   (2009-02-27 22:31) [33]

>Сергей М. ©   (27.02.09 15:55) [31]

>ModuleHandle - хэндл модуля ws2_32.dll в АП процесса-жертвы.

ясно, но как получить-то хендл этого модуля? какой командой?
OpenThread(dwDesiredAccess: DWORD;bInheritHandle: BOOL;
     dwThreadID: DWORD)? Если да, то что прописывать в параметрах?
dwDesiredAccess - желаемый уровень доступа к процессу? Какой необходимо для внедрения библиотеки и перехвата API?
bInheritHandle - я так понял это опция наследования... она имеет принципиальное значение?
dwThreadID - это тоже самое что и ProcessID?

>NewProcedureAddress - адрес твоей собственной функции, куда будет >передано управление в рез-те вызова жертвой ф-ции Connect

Вот это мне вообще непонятно, допустим где-то у меня написана функция-перехватчик, например:
Procedure NewConnect(IP,Port:Integer);
var
...
begin
end;

но как узнать или присвоить ей указатель? А также как передать ей старую команду с параметрами, которые нужно проверить???


 
Сергей М. ©   (2009-02-27 23:05) [34]


> как получить-то хендл этого модуля?


GetModuleHandle()


> какой командой?


Никакой.
В Делфи нет "команд" - есть операторы.


> OpenThread


Эта т.н. "команда" не имеет ни малейшего отношения к хэндлу модуля.


> dwThreadID - это тоже самое что и ProcessID?


Нет, это две совершенно разные разницы.

p.s.

Рано тебе заниматься "перехватами" - ты азов не знаешь. Обычных дельфийских.


 
MALAN ©   (2009-03-03 21:11) [35]

ну DLL"ку вроде написал осталось внедрить в чужой процесс и тут о5 возникла проблема. Внедрение происходит при помощи функции:

function LoadLibrary_Ex(ProcessID:DWORD;LibName:PChar):boolean;
var
 pLL,pDLLPath:Pointer;
 hProcess,hThr:THandle;
 LibPathLen,_WR,ThrID:DWORD;
begin
 Result:=False;
 LibPathLen:=Length(string(LibName));
 hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
 if hProcess=0 then exit;
 pDLLPath:=VirtualAllocEx(hProcess,0,LibPathLen+1,MEM_COMMIT,PAGE_READWRITE);
 if DWORD(pDLLPath)=0 then exit;
 pLL:=GetProcAddress(GetModuleHandle(kernel32),"LoadLibraryA");
 WriteProcessMemory(hProcess,pDLLPath,LibName,LibPathLen+1,_WR);
 hThr:=CreateRemoteThread(hProcess,0,0,pLL,pDLLPath,0,ThrID);
 if hThr=0 then exit;
 Result:=CloseHandle(hProcess);
end;


При попытке внедрения в чужой процесс функция работает без ошибок, но эффекта нет. Функция работает как надо только если внедряет библиотеку в свой собственный процесс.
Поясню: допустим есть два процесса pr1.exe, pr2.exe и библиотека lib1.dll которая при внедрении должна выдать сообщение, типа, "Hello World".
если процесс pr1.exe попытается внедрить lib1.dll в pr2.exe, то ничего не происходит, если же он пытается внедрить его в самого себя, то библиотека успешно грузится и выдаёт сообщение "Hello World".
Вообщем что я упускаю?


 
Сергей М. ©   (2009-03-03 21:33) [36]


> что я упускаю?


Самую малость - наличие в Делфи встроенного отладчика


 
MALAN ©   (2009-03-03 21:55) [37]

Сергей М. ©   (03.03.09 21:33) [36]

>> что я упускаю?

>Самую малость - наличие в Делфи встроенного отладчика

А можно поподробнее? Почему dll якобы внедряется в процесс, но загрузочный код библиотеки не исполняется?


 
Сергей М. ©   (2009-03-03 21:58) [38]

Ты программист или где ?)
Что значит "якобы" ?
Ты вообще в курсе про отладчик ?


 
Сергей М. ©   (2009-03-03 22:07) [39]


> MALAN


Тоже мне - "рассуждалкин" на "высокие материи" нашелся)
Сначала азы отладки Делфи-кода освой !


 
MALAN ©   (2009-03-03 22:08) [40]

>Ты программист или где ?)

Ну не учили меня системному программированию, не вешаться же теперь из-за этого.

>Что значит "якобы" ?

ЯКОБЫ частица
Употр. при обозначении мнимости, несоответствия действительности; соответствует по значению сл.: будто бы, как будто.

>Ты вообще в курсе про отладчик ?

Видимо нет


 
Сергей М. ©   (2009-03-03 22:26) [41]


> не учили меня системному


А системному (а не эмпирическому) подходу к анализу результатов применения знаний тебя учили ?

Причем здесь вообще "системное программирование" ?

Ты какого вообще лешего не анализируешь результат выполнения функции WriteProcessMemory ?


> Видимо нет


И что ?

Тебя в "Сетях" (а не в "Начинающих" !!) учить элементарным основам пользования встроенного дельфийского отладчика ?

А ты не припух ли, а ?
Гнешь здесь про какой-то там "перехват", не зная и не владея обязательными элементарными общими знаниями и навыками ?


 
_bass   (2009-03-03 22:27) [42]

MALAN, библиотекой для перехвата поделитесь плз. Тоже интересует данный вопрос


 
MALAN ©   (2009-03-03 22:50) [43]

Сергей М. ©   (03.03.09 22:26) [41]

>Гнешь здесь про какой-то там "перехват", не зная и не владея >обязательными элементарными общими знаниями и навыками ?

Успокойся, разобрался я с этим перехватом уже, и т.н. эмпирический подход в моём случае быстрее, чем изучение твоих т.н. "азов" (всё-таки чтобы прибить полку архитектурный институт заканчивать не обязательно), щас речь о другом:)

_bass   (03.03.09 22:27) [42]

>MALAN, библиотекой для перехвата поделитесь плз. Тоже интересует >данный вопрос

я при создании своей библиотеки пользовался этой http://www.codenet.ru/progr/delphi/stat/apihook2.zip
а это статья где она описывается: http://www.codenet.ru/progr/delphi/stat/api-hook.php

свою библиотеку не выкладываю ибо ещё не доделана, если вопросы будут пиши


 
Сергей М. ©   (2009-03-03 23:16) [44]


> MALAN ©   (03.03.09 22:50) [43]


Т.е. это эксклюзивный пирог, испеченный сапожником ?)
Или эксклюзивный сапог, который тачал пирожник ?)


 
MALAN ©   (2009-03-03 23:44) [45]

На безрыбье и лебедь раком:)


 
_bass   (2009-03-04 22:27) [46]

А вот если, например, приложение вызывает bind/listen несколько раз (на разные порты - рандомные). Как параметры каждого из них изменить на определенный статистический порт?
т.е. для каждой функции другой порт.


 
MALAN ©   (2009-03-04 23:28) [47]

ну вроде также, в функции-перехватчике пишешь дополнительное условие типа: if (name.sin_port>10000 and name.sin_port<20000) then name.sin_port:=111;


 
MALAN ©   (2009-03-04 23:28) [48]

ну вроде также, в функции-перехватчике пишешь дополнительное условие типа: if (name.sin_port>10000 and name.sin_port<20000) then name.sin_port:=111;


 
_bass   (2009-03-04 23:35) [49]

Можно с вами как-то приватно пообщаться?
Сори за оффтоп.


 
MALAN ©   (2009-03-05 08:51) [50]

_bass   (04.03.09 23:35) [49]
ну по мылу: malan-x@yandex.ru
или по аське: 306177482


 
имя   (2009-09-17 14:18) [51]

Удалено модератором



Страницы: 1 2 вся ветка

Форум: "Сети";
Текущий архив: 2012.03.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.004 c
2-1322388950
я
2011-11-27 14:15
2012.03.04
длина bmp в пикселях


6-1252927401
Дмитрий Белькевич
2009-09-14 15:23
2012.03.04
Можно ли как-то узнать, какое приложение фильтрует порт?


15-1320746965
Витя
2011-11-08 13:09
2012.03.04
Я старею , или нет?


1-1287517747
christoforov
2010-10-19 23:49
2012.03.04
Прозрачная картинка


2-1322051301
jacksotnik
2011-11-23 16:28
2012.03.04
Заполнение формы до её отображения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский