Главная страница
    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]

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

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

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

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

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

Видимо нет



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

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

Наверх





Память: 0.57 MB
Время: 0.005 c
15-1320993358
Andy BitOff
2011-11-11 10:35
2012.03.04
Ну что, ждем? =)


2-1322269435
Vyacheslav
2011-11-26 05:03
2012.03.04
Получить результат выполнения команды консоли?


15-1321116538
Laguna
2011-11-12 20:48
2012.03.04
Пропал доступ к ресурсам из меню.


15-1321034703
Процик
2011-11-11 22:05
2012.03.04
Какие нужны книги?


15-1321012496
alexdn
2011-11-11 15:54
2012.03.04
Radikal.ru





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский