Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.04;
Скачать: CL | DM;

Вниз

Как перехватить 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]

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

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

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

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

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

Видимо нет



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

Текущий архив: 2012.03.04;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.01 c
2-1322472936
jacksotnik
2011-11-28 13:35
2012.03.04
Как показать картинку с Blob поля


15-1321269775
картман
2011-11-14 15:22
2012.03.04
файлы


15-1321291140
Омлет
2011-11-14 21:19
2012.03.04
«Начинающим» отпала


3-1272050895
штуша-кутуша
2010-04-23 23:28
2012.03.04
Имеет ли смысл размещать таблицы базы данных в разных файлах?


15-1321409838
Sher
2011-11-16 06:17
2012.03.04
DBGrid to StringGrid