-
Некий процесс в системе хочет соединиться с 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, а оригинальную отправлять программе перехватчику?
-
> MALAN (25.02.2009 14:25:00) [0]
Это называется файрвол. Говоришь не сложная задача, ну-ну.
-
> MALAN © (25.02.09 14:25)
Клиент где находится, в корп. лок.сети или подключен непосредственно к сети провайдера ?
-
-
>Сергей М. © (25.02.09 15:41) [2]
>Клиент где находится, в корп. лок.сети или подключен непосредственно к >сети провайдера ?
всё находится на локальной машине, топология сети значения не имеет
>Anatoly Podgoretsky © (25.02.09 15:04) [1]
>Это называется файрвол. >Говоришь не сложная задача, ну-ну.
Скорее уж прокси-сервер
-
> топология сети значения не имеет >
Да ты что ? А мужики-то и не знали ..
Как же не имеет, если, например, есть возможность доступа к интересующему трафику на подконтрольном шлюзе или прокси-серверу сети ?
-
>Сергей М. © (25.02.09 19:55) [5]
меня интересует только трафик идущий от/к программам запущенным на локальной машине, если ещё точнее, то почта
-
Вот я и спрашиваю - идет ли этот трафик непосредственно через интерфейс провайдера или на пути к интерфейсу провайдера в сети имеется подконтрольный тебе шлюз и/или прокси ?
-
>Сергей М. © (25.02.09 20:20) [7]
А какая собственно разница? Перехват-то должен происходить на сеансовом уровне модели OSI и на той же самой локальной машине, структура сети не должна влиять на работу программы... работа программы-перехватчика должна быть похожа на реализацию атаки "человек-посередине" (ну т.е. посередине будет не человек, а программа, но принцип вообщем-то тот же)
-
> MALAN © (25.02.09 20:35) [8]
> какая собственно разница?
Ты действительно тупой или прикидываешься ?)
Одно дело - совершенно штатным и легальным образом задействовать SMTP/POP3/IMAP-фильтр на хосте-шлюзе в своей ЛВС, мимо которого не пройдет ни один байт внешнего трафика, и совсем другое дело - заниматься ректальным внедрением всякого рода "шпионских" DLL во вс е подряд процессы, не имея при этом никакой гарантии успешности начатой кампании !
И если тебе нужно просто подслушать трафик на лок.машине, то что-то куда-то внедрять нет никакой необходимости - есть готовая легальная проверенная WinPCap, она чудесно справляется со шпионскими делами
-
Сергей М. © (25.02.09 20:53) [9]
>Ты действительно тупой или прикидываешься ?)
>Одно дело - совершенно штатным и легальным образом задействовать SMTP/>POP3/IMAP-фильтр на хосте-шлюзе в своей ЛВС
>И если тебе нужно просто подслушать трафик на лок.машине, то что-то >куда-то внедрять нет никакой необходимости - есть готовая легальная >проверенная WinPCap, она чудесно справляется со шпионскими делами
А я где-то написал что мне нужно просто "подслушать траффик"? Я же русским по белому пишу, нужно модифицировать информацию (заметьте, не пакеты, а саму информацию, в частности текст письма, добавлять заголовки) причём, прозрачно для почтовых программ, а для этого перехват лучше осуществлять на сеансовом уровне просто перенаправляя соединение, и программа эта должна находится не на шлюзе, а на локальной машине
-
-
> как должна выглядеть эта DLL
Что значит "как" ? Обычно должна выглядеть - DLL она и есть DLL..
-
>Сергей М. © (26.02.09 08:31) [11]
>Информацию эту несут как раз те самые пакеты.
Кто бы мог подумать:))
>Что значит "как" ? >Обычно должна выглядеть - DLL она и есть DLL..
Насколько я знаю обычная DLL состоит из набора вызываемых функций, и загрузочного кода, который исполняется автоматически при подключении DLL, вот меня и интересует что должен содержать этот исполняемый код
-
> кода, который исполняется автоматически при подключении > что должен содержать этот исполняемый код
Подготовить все необходимое для гарантированного получения управления при вызове впоследствии тех или иных требуемых API-функций, что же еще ?
-
> что должен содержать этот исполняемый код
Вот это самое все необходимое для подготовки он и должен содержать.
-
> MALAN (25.02.2009 18:20:04) [4]
При (http) прокси сервере ни о каком интернете и речи нет, и даже об локалке, все заканчивается прокси сервером, клиент никуда кроме этой машиные не подключается.
-
> Anatoly Podgoretsky © (26.02.09 12:28) [16]
Его почтовый трафик заботит, а не гипертекстовый..
Причем так до сих пор и партизанит : непонятно как этот хост ходит в тырнет - то ли прямиком к провайдеру маршрут лежит, то ли через корпоративный прокси и/или шлюз ..
-
Сергей М. © (26.02.09 12:36) [17]
>Причем так до сих пор и партизанит : непонятно как этот хост ходит в >тырнет - то ли прямиком к провайдеру маршрут лежит, то ли через >корпоративный прокси и/или шлюз ..
Ну хорошо, напрямую провайдеру... что дальше?:)
-
> Ну хорошо, напрямую провайдеру... что дальше?:)
пиши программу!
-
> MALAN © (26.02.09 20:54) [18]
> Ну хорошо, напрямую провайдеру
Вот теперь понятно, что локальный перехват трафика остается единственным решением.
Долго же ты ломался)
> что дальше?
Дальше либо надежное, но сложное в реализации решение с NDIS Miniport-драйвером либо ненадежное и не менее сложное решение с драйвером, инжектирующим dll-перехватчик.
-
> Его почтовый трафик заботит, а не гипертекстовый..
Так, но вот что он написал в [4]
> Скорее уж прокси-сервер
На самом деле именно так и нужно, а файрволом надо запретить выход на XXX.XXX.XXX.XXX:25, только на zzz.zzz.zzz.zzz:25 при том обязательно с аутентификацией. Именно почти так у меня и сделано, мне просто не нужно изменение.
-
Сергей М. © (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.Если уж на то пошло то прокси-сервер это и есть фаерволл уровня приложений
-
Удалено модератором Примечание: дубль
-
> прокси-сервер это и есть фаерволл
Прокси это прокси, а файрвол это файрвол. У них очень разные задачи.
> Гора родила мышь
А ты что хотел ?)
-
> Если уж на то пошло то прокси-сервер это и есть фаерволл > уровня приложений
Ага, а сыр - это сметана )
-
Palladin © (27.02.09 14:09) [25] >> Если уж на то пошло то прокси-сервер это и есть фаерволл >> уровня приложений
>Ага, а сыр - это сметана )
А ты попробуй ввести в поиск "брандмауэр сетевого сеансового прикладного уровня", узнаешь много нового:)
-
> MALAN © (27.02.09 14:18) [26]
А не надо нам тут америки открывать)
Да, по мере продвижения к вершине OSI-модели грани разничий в функциональности файрволов и прокси-сервисов становятся все более малоразличимы.
Только в твоем случае тебя это уже никак не касается - интересующая тебя приблуда не имеет отношения к межсетевому взаимодействию.
-
> MALAN © (27.02.09 14:18) [26]
Я спорю что ли? ) Сыр и сметана - оба продукта молочные. ) Однако ни кто же не утверждает, что сыр это по сути сметана, на уровне исходных материалов )
Если два чего то растут из одного места - низя утверждать что одно есть, по сути, второе и наоборот.
-
Сергей М. © (27.02.09 14:51) [27];
Может тогда всё-таки поможешь?:)
Нарыл библиотеку для перехвата, но вот как запустить одну из функций (вообщем-то самую главную, установка зука методом сплайсинга) не понял: function SetProcedureHook(ModuleHandle:HMODULE;ProcedureName:PChar;NewProcedureAddress:Po inter; RestoreDATA:PFunctionRestoreData):Boolean; Что в параметрах писать? ProcedureName вроде как "Connect", а остальное?
-
Palladin © (27.02.09 15:25) [28]
>> MALAN © (27.02.09 14:18) [26]
>Я спорю что ли? ) >Сыр и сметана - оба продукта молочные. ) Однако ни кто же не >утверждает, что сыр это по сути сметана, на уровне исходных материалов )
>Если два чего то растут из одного места - низя утверждать что одно есть, >по сути, второе и наоборот.
Короче "медведь и панда"(c).... я тебя понял:)
-
> а остальное?
ModuleHandle - хэндл модуля ws2_32.dll в АП процесса-жертвы.
NewProcedureAddress - адрес твоей собственной функции, куда будет передано управление в рез-те вызова жертвой ф-ции Connect
RestoreDATA - это, видимо, указатель на область данных в твоей DLL, куда при сплайсинге будет сохранен оригинальный фрагмент контекста перехватываемой тобой функции
-
> MALAN
При прочих равных условиях в твоем случае я бы предпочел не сплайсинг, а модификацию EAT/IAT.
-
>Сергей М. © (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;
но как узнать или присвоить ей указатель? А также как передать ей старую команду с параметрами, которые нужно проверить???
-
> как получить-то хендл этого модуля?
GetModuleHandle()
> какой командой?
Никакой. В Делфи нет "команд" - есть операторы.
> OpenThread
Эта т.н. "команда" не имеет ни малейшего отношения к хэндлу модуля.
> dwThreadID - это тоже самое что и ProcessID?
Нет, это две совершенно разные разницы.
p.s.
Рано тебе заниматься "перехватами" - ты азов не знаешь. Обычных дельфийских.
-
ну 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'. Вообщем что я упускаю?
-
> что я упускаю?
Самую малость - наличие в Делфи встроенного отладчика
-
Сергей М. © (03.03.09 21:33) [36]
>> что я упускаю?
>Самую малость - наличие в Делфи встроенного отладчика
А можно поподробнее? Почему dll якобы внедряется в процесс, но загрузочный код библиотеки не исполняется?
-
Ты программист или где ?) Что значит "якобы" ? Ты вообще в курсе про отладчик ?
-
> MALAN
Тоже мне - "рассуждалкин" на "высокие материи" нашелся) Сначала азы отладки Делфи-кода освой !
-
>Ты программист или где ?)
Ну не учили меня системному программированию, не вешаться же теперь из-за этого.
>Что значит "якобы" ?
ЯКОБЫ частица Употр. при обозначении мнимости, несоответствия действительности; соответствует по значению сл.: будто бы, как будто.
>Ты вообще в курсе про отладчик ?
Видимо нет
-
> не учили меня системному
А системному (а не эмпирическому) подходу к анализу результатов применения знаний тебя учили ?
Причем здесь вообще "системное программирование" ?
Ты какого вообще лешего не анализируешь результат выполнения функции WriteProcessMemory ?
> Видимо нет
И что ?
Тебя в "Сетях" (а не в "Начинающих" !!) учить элементарным основам пользования встроенного дельфийского отладчика ?
А ты не припух ли, а ? Гнешь здесь про какой-то там "перехват", не зная и не владея обязательными элементарными общими знаниями и навыками ?
-
MALAN, библиотекой для перехвата поделитесь плз. Тоже интересует данный вопрос
-
Сергей М. © (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свою библиотеку не выкладываю ибо ещё не доделана, если вопросы будут пиши
-
> MALAN © (03.03.09 22:50) [43]
Т.е. это эксклюзивный пирог, испеченный сапожником ?) Или эксклюзивный сапог, который тачал пирожник ?)
-
На безрыбье и лебедь раком:)
-
А вот если, например, приложение вызывает bind/listen несколько раз (на разные порты - рандомные). Как параметры каждого из них изменить на определенный статистический порт? т.е. для каждой функции другой порт.
-
ну вроде также, в функции-перехватчике пишешь дополнительное условие типа: if (name.sin_port>10000 and name.sin_port<20000) then name.sin_port:=111;
-
ну вроде также, в функции-перехватчике пишешь дополнительное условие типа: if (name.sin_port>10000 and name.sin_port<20000) then name.sin_port:=111;
-
Можно с вами как-то приватно пообщаться? Сори за оффтоп.
-
_bass (04.03.09 23:35) [49] ну по мылу: malan-x@yandex.ru или по аське: 306177482
-
Удалено модератором
|