Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват и модификация исходящих tcp пакетов, возможно ли ? ("на лету") 
:(
    Опции темы
KotJ
Дата 16.4.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



Код

HookAPI(PChar('c:\\WINDOWS\\system32\\WS2_32.DLL'), PChar('WSASend'), @sendHookProc, @sendNextHook);
HookAPI(PChar('c:\\WINDOWS\\system32\\WS2_32.DLL'), PChar('WSASendTo'), @sendtoHookProc, @sendtoNextHook);



Исправил на это файл создался. 
Но..
некоторые ресурсы не загружаются. Некоторые загружаются. Почему?
PM MAIL   Вверх
UFO007
Дата 16.7.2013, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 13.7.2013

Репутация: нет
Всего: нет



Доброго всем времени суток!
Попалась как-то (на хакер.ру что-ли) статейка как продвинуть собственный сайт, т. е.: при гуглении "футбол" первым из "примерно 30 500 результов" браузеру подсовывается "... наши футболисты ...." ну и соответсвенно ссылочка на www.ufo_007.com(например). С обработкой текста проблем нет, а вот с перехватом трафика... В статье воспевается advAPIHook но тут я чо-то слегонца недопонял - вернее не стал разбираться т. к. подвернулось следующее:
Код
library AppSniffDll;

uses
  // madshi components
  madRemote,
  madCodeHook,
  madStrings,

  // windows units
  Windows, Winsock, SysUtils, Messages;

{$I defs.inc}

{$R *.RES}

var
  sendNextHook            : function(s: TSocket; Buf : Pointer; Len, Flags: Integer): Integer; stdcall;
  recvNextHook            : function(s: TSocket; Buf : Pointer; Len, Flags: Integer): Integer; stdcall;
  sendtoNextHook          : function(s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr;  tolen: Integer): Integer; stdcall;
  recvfromNextHook        : function(s: TSocket; var Buf; len, flags: Integer; var from: TSockAddr; var fromlen: Integer): Integer; stdcall;
  wsasendNextHook         : function(s: TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesSent : DWORD; dwFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
  wsarecvNextHook         : function(s: TSocket; lpBuffers : LPWSABUF; dwBufferCount : DWORD; var lpNumberOfBytesRecvd : DWORD; var lpFlags : DWORD; lpOverlapped : LPWSAOVERLAPPED; lpCompletionRoutine : LPWSAOVERLAPPED_COMPLETION_ROUTINE ): Integer; stdcall;
  closesocketNextHook     : function(s: TSocket): Integer; stdcall;
  listenNextHook          : function(s : TSocket; backlog : integer): integer; stdcall;
  gethostbynameNextHook   : function(name : PChar): PHostEnt; stdcall;

  ClientWindow : integer;
  showmsgbox : boolean = false;

procedure SendMsg(msg : TIPCMessage);
begin
  msg.Pid  := GetCurrentProcessID;
  SendIpcMessage('AppSniff', @msg, sizeOf(msg));
end;
...
function recvHookProc(s: TSocket; Buf : Pointer; Len, Flags: Integer): Integer; stdcall;
var      msg    : TIPCMessage;
         size   : Integer;
         saddr  : TSockAddrIn;
         slen   : Integer;
begin
  if showmsgbox then MessageBox(0, 'recv', 'info', 0);
  //call the real winsock function
  Size := recvNextHook(s, Buf, Len, Flags);
  if Size > 0 then // send message to user interface
   begin
     msg.Operation := OT_Recv;
     msg.Sock      := s;
     msg.Size      := Size;
     msg.Address   := Cardinal(Buf);
     msg.IP        := 0;
     msg.Port      := 0;
     msg.HostName  := '';
     sLen := sizeof(TSockaddrIn); // figure out the ip and port for the communication
     if GetPeerName(s, saddr, sLen) = 0 then
      begin
        move(saddr.sin_addr, msg.IP, sizeof(Cardinal));
        msg.Port := ntohs(saddr.sin_port);
      end;
     SendMsg(msg);
   end;
  Result := Size;
end;

function sendHookProc(s: TSocket; Buf : Pointer; Len, Flags: Integer): Integer; stdcall;
var      msg    : TIPCMessage;
         saddr  : TSockAddrIn;
         slen   : Integer;
begin
  if showmsgbox then MessageBox(0, 'send', 'info', 0);
  if Len > 0 then // send message to user interface
   begin
     msg.Operation := OT_Send;
     msg.Sock      := s;
     msg.Size      := Len;
     msg.Address   := Cardinal(Buf);
     msg.IP        := 0;
     msg.Port      := 0;
     msg.HostName  := '';// figure out the ip and port for the communication
     sLen := sizeof(TSockaddrIn); 
     if GetPeerName(s, saddr, sLen) = 0 then
      begin
        move(saddr.sin_addr, msg.IP, sizeof(Cardinal));
        msg.Port := ntohs(saddr.sin_port);
      end;
     SendMsg(msg);
   end;
  Result := sendNextHook(s, Buf, Len, Flags);//call the real winsock function
end;
...
procedure InitDll(_ClientWindow : integer); stdcall;
begin
  ClientWindow := _ClientWindow;
  OutputDebugString(PChar('ClientWindow is ' + IntToStr(ClientWindow)));
end;

exports
  InitDll;

begin
  showmsgbox := PosText('Mailtest.exe', ParamStr(0)) > 0;
  if showmsgbox then
   MessageBox(0, 'am in mailtest.exe', 'info', 0);
  ClientWindow := 0;
  CollectHooks;
  hookapi('ws2_32.dll',  'listen', @listenHookProc, @listenNextHook);
  hookapi('ws2_32.dll',  'gethostbyname', @gethostbynameHookProc, @gethostbynameNextHook);
  hookapi('ws2_32.dll',  'closesocket', @closesocketHookProc, @closesocketNextHook);
  hookapi('ws2_32.dll',  'send', @sendHookProc, @sendNextHook);
  hookapi('ws2_32.dll',  'recv', @recvHookProc, @recvNextHook);
  hookapi('ws2_32.dll',  'WSASend', @WSASendHookProc, @WSASendNextHook);
  hookapi('ws2_32.dll',  'WSARecv', @WSARecvHookProc, @WSARecvNextHook);
  hookapi('ws2_32.dll',  'sendto', @sendtoHookProc, @sendtoNextHook);
  hookapi('ws2_32.dll',  'recvfrom', @recvfromHookProc, @recvfromNextHook);
  FlushHooks;
end.
и в самом AppSniff - Main.pas такая процедурка:
Код
procedure TMainForm.HandleMessage(var Message: TMessage);
var  msg        : TIPCMessage;
     Buffer     : array[0..MAX_PATH] of Char;
     Proc, i    : Cardinal;
     BytesRead  : Cardinal;
     DataBytes  : PByteArray;
     inaddr     : in_addr;
     AppName    : string;
     Proto      : string;
     FullPath   : string;
     RemoteIP   : string;
     RemotePort : string;
     DataStr    : string;
     Oper       : string;
     DbgMsg     : string;
     Color      : TColor;
     ConnIndex  : integer;
     StatIndex  : integer;
begin
  if Message.wParam <> 777 then
   begin
     Message.Result := 0;
     Exit;
   end;
  // process data
  Move(pointer(Message.lParam)^, msg, sizeOf(Msg));
  ReplyMessage(1);
  // not interested in 1 byte messages
  if msg.Size = 1 then
   Exit;
  // prepare processname
  ProcessIdToFilename(msg.Pid, Buffer);
  AppName  := ExtractFileName(Buffer);
  FullPath := Process(AppName).ExeFile;
  DbgMsg   := AppName;
  // extract data from message
  DataStr := '';
  if (msg.Operation = OT_Send) or (msg.Operation = OT_WSASend) or (msg.Operation = OT_Recv) or (msg.Operation = OT_WSARecv) or (msg.Operation = OT_SendTo) or (msg.Operation = OT_RecvFrom) then
   begin
     if msg.Size > 0 then
      begin
        GetMem(DataBytes, msg.Size);
        // open remote process
        Proc := OpenProcess(PROCESS_VM_READ, False, msg.Pid);
        // check result
        if Proc > 0 then
         begin
           if ReadProcessMemory(Proc, Pointer(msg.Address), DataBytes, msg.Size, BytesRead) then
            begin
              msg.Size := BytesRead;
              for i:=0 to msg.Size - 1 do
              DataStr := DataStr + Chr(DataBytes[i]);
            end;
            // close handle to process
            CloseHandle(Proc);
         end;
         FreeMem(DataBytes);
      end;
   end;
  DbgMsg := DbgMsg + ', size=' + IntToStr(msg.size);
  DbgMsg := DbgMsg + ', sock=' + IntToStr(msg.sock);
  RemoteIP := ''; - далее идёт добыча txt.данных для ВиртуалТриВью и 3-х РичЕдитов
Так вот - по поводу вышеизложенного вопрос: можно ли отправить ДЛЛке ответ? Что-то в роде:
Код
procedure TMainForm.HandleMessage(var Message: TMessage);
...
SendIpcMessage('AppSniffDll', @msg, sizeOf(msg));
...
а в ДЛЛке:
procedure HandleMessage(var Message: TMessage);
 Ведь она ( ДЛЛка) при отправке заложила msg.Pid Оперы или она перехватит сообщение? Если "Да", то как порвать "мосты" (параллелного прослушивания): убрать recvNextHook и Опера оглохнет - вот тут как я соображаю и нужно ответное сообщение с полученными и обработанными данными ну и убрав sendNextHook проверить ответ оперы и отослать его получателю (за ислючением - если юзер тыкнет на www.ufo_007.com которого не существует). Или я заблуждаюсь? - Дык поправьте, наставьте на путь истинный. И заранее - спасибо за любую инфу вплоть до банального перечня процедур и функций из которых можно вылепить нечто подобное необходимому.

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  Defs.inc 1,32 Kb
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.