Конференция "Сети" » Как перехватить API функции (Connect, Bind) и изменить их парамет [D7, WinXP]
 
  • Сергей М. © (27.02.09 09:03) [20]

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


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


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

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


    > что дальше?


    Дальше либо надежное, но сложное в реализации решение с NDIS Miniport-драйвером  либо ненадежное и не менее сложное решение с драйвером, инжектирующим dll-перехватчик.
  • Anatoly Podgoretsky © (27.02.09 09:51) [21]

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

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

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

    На самом деле именно так и нужно, а файрволом надо запретить выход на XXX.XXX.XXX.XXX:25, только на zzz.zzz.zzz.zzz:25 при том обязательно с аутентификацией. Именно почти так у меня и сделано, мне просто не нужно изменение.
  • MALAN © (27.02.09 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 © (27.02.09 11:54) [23]
    Удалено модератором
    Примечание: дубль
  • Сергей М. © (27.02.09 14:06) [24]

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


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


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


    А ты что хотел ?)
  • Palladin © (27.02.09 14:09) [25]

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

    Ага, а сыр - это сметана )
  • MALAN © (27.02.09 14:18) [26]
    Palladin ©   (27.02.09 14:09) [25]
    >> Если уж на то пошло то прокси-сервер это и есть фаерволл
    >> уровня приложений

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

    А ты попробуй ввести в поиск "брандмауэр сетевого сеансового прикладного уровня", узнаешь много нового:)
  • Сергей М. © (27.02.09 14:51) [27]

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


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

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

    Только в твоем случае тебя это уже никак не касается - интересующая тебя приблуда не имеет отношения к межсетевому взаимодействию.
  • Palladin © (27.02.09 15:25) [28]

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

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

    Если два чего то растут из одного места - низя утверждать что одно есть, по сути, второе и наоборот.
  • MALAN © (27.02.09 15:34) [29]
    Сергей М. ©   (27.02.09 14:51) [27];

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

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

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

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

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

    Короче "медведь и панда"(c).... я тебя понял:)
  • Сергей М. © (27.02.09 15:55) [31]

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


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

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

    RestoreDATA - это, видимо, указатель на область данных в твоей DLL, куда при сплайсинге будет сохранен оригинальный фрагмент контекста перехватываемой тобой функции
  • Сергей М. © (27.02.09 16:02) [32]

    > MALAN


    При прочих равных условиях в твоем случае я бы предпочел не сплайсинг, а модификацию EAT/IAT.
  • MALAN © (27.02.09 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;

    но как узнать или присвоить ей указатель? А также как передать ей старую команду с параметрами, которые нужно проверить???
  • Сергей М. © (27.02.09 23:05) [34]

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


    GetModuleHandle()


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


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


    > OpenThread


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


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


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

    p.s.

    Рано тебе заниматься "перехватами" - ты азов не знаешь. Обычных дельфийских.
  • MALAN © (03.03.09 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'.
    Вообщем что я упускаю?
  • Сергей М. © (03.03.09 21:33) [36]

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


    Самую малость - наличие в Делфи встроенного отладчика
  • MALAN © (03.03.09 21:55) [37]
    Сергей М. ©   (03.03.09 21:33) [36]

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

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

    А можно поподробнее? Почему dll якобы внедряется в процесс, но загрузочный код библиотеки не исполняется?
  • Сергей М. © (03.03.09 21:58) [38]
    Ты программист или где ?)
    Что значит "якобы" ?
    Ты вообще в курсе про отладчик ?
  • Сергей М. © (03.03.09 22:07) [39]

    > MALAN


    Тоже мне - "рассуждалкин" на "высокие материи" нашелся)
    Сначала азы отладки Делфи-кода освой !
 
Конференция "Сети" » Как перехватить API функции (Connect, Bind) и изменить их парамет [D7, WinXP]
Есть новые Нет новых   [134437   +30][b:0][p:0.001]