Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+5 невидимых)

 eXeL@B —› Программирование —› Аналог recv
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 27 августа 2008 21:02
· Личное сообщение · #1

Недавно начал ковырять одну очень интересную прогу, (не могу сказать какую), и суть в том, что внедряя свою библиотеку, мне прекрасно удаётся перехватить функцию send, и я знаю, что она отправляет серверу, но при перехвате функции recv ничего не происходит, т.к. прога её не использует. Внимание, вопрос, как можно ещё принимать данные от удалённого сервера, и как их перехватить, буду рад любым советам, вплоть до написания драйвера, лишь бы знать, что писать, т.к. уже всё, вроде бы, перепробовал

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 27 августа 2008 21:06
· Личное сообщение · #2

если не recv то возможно просто read




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 27 августа 2008 21:10
· Личное сообщение · #3

arnix
можно поподробнее, а то про эту функцию я ни хрена не знаю

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 27 августа 2008 21:14
· Личное сообщение · #4

recv_from




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 27 августа 2008 21:17
· Личное сообщение · #5

Av0id
в смысле, та что recvfrom? Не, не она

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 27 августа 2008 21:29
· Личное сообщение · #6

ARCHANGEL
пример
n = read(socket, pbuf, 32)

socket - понятно
pbuf - char* указатель на буффер
32 - сколько байт максимум читать (получить)

возвращает число полученных байт

кста, эта функция точно есть в unix-ax, может в винде нет не помню (или называется _read)




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 27 августа 2008 21:35 · Поправил: ARCHANGEL
· Личное сообщение · #7

arnix
Вырезка с MSDN:

_read
Reads data from a file.

int _read( int handle, void *buffer, unsigned int count );


Ты уверен, что в винде такое есть? В смысле, оно связано с сетью?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 27 августа 2008 21:38 · Поправил: arnix
· Личное сообщение · #8

так, извиняюсь read/write и вправду только в юниксах, просто я недавно писал сервер под линукс и использовал read/write вместа recv/send вот и подумал что в виндах тоже можно, а оказывается:

[url=http://www.cs.brown.edu/~scl/files/IPCWinNTUNIX.pdf
]http://www.cs.brown.edu/~scl/files/IPCWinNTUNIX.pdf
[/url]

"Some Berkeley socket applications use the _read() and _write() calls since UNIX treats sockets as
files. Windows sockets support these functions, but some additional work on the part of the
programmer is required. The socket must be opened as non-overlapped and must be converted to a
file handle by calling _open_osfhandle(). This will return a file handle (i.e. an int) which can then
be used with _read() and _write()."

тойсть _read() и _write() использовать можно на сокетах но сначала нужно "конвертнуть сокет в файл" с помощью _open_osfhandle()




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 27 августа 2008 21:46
· Личное сообщение · #9

arnix
я проверю, ну, а можно ли что-то более низкоуровневое? Как, например, тот же OutPost определяет, что возникла сетевая активность со стороны какого-то приложения?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 27 августа 2008 21:57
· Личное сообщение · #10

Драйвер вешает аутпост, в эту тему без ОГРОМНОЙ надобности лучше не соваться. Для общего представления можешь почитать обход аутпоста на васме, там частично описано, что он хукает и как. Но вряд ли это тебе поможет.
Сам я не игрался с сетевыми апи, могу только посоветовать посмотреть на экспорт, какие по именам функи ещё ближе+потрассить сам recv, возможно, натолкнёт на мысль, к какой низкоуровневой функции сводятся вызовы получения.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 27 августа 2008 22:06
· Личное сообщение · #11

Archer
чтоб узнать, какие функции хукает Outpost, много ума не надо, надо посмотреть по KDT перехват в ядре, например, через Rootkit Unhooker, плюс ещё перехват с помощью удалённых хуков в третьем кольце, и обойти это можно гораздо проще, чем на васме написано, притом не древнюю 4 версию, а новую 6. Но проблема в том, что если я просто полезу в ядро, то лес станет ещё темнее, а партизаны толще, и ничего не проясниться, но всё равно спасибо, попробую потрассировать.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 28 августа 2008 22:52
· Личное сообщение · #12

я не силен в сетевых апи, но может стоит попробовать отследить хендлы открываемых сокетов программой и смотреть кто их использует и как?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 29 августа 2008 01:33
· Личное сообщение · #13

ARCHANGEL посмотри у целевой проги табличку импорта (вызовы), просто тупо просматривая функцию за функцией и скорее всего увидишь то что интересует. Скорее всего даже будет рядом с send

-----
Yann Tiersen best and do not fuck




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 29 августа 2008 11:07
· Личное сообщение · #14

ARCHANGEL
А ReadFile смотрел ?
>>For asynchronous read operations, hFile can be any handle that is opened with the FILE_FLAG_OVERLAPPED flag by the CreateFile function, or a socket handle returned by the socket or accept function.

-----
My love is very cool girl.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 04 сентября 2008 18:51
· Личное сообщение · #15

theCollision
Смотрел - не она!

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 37.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 05 сентября 2008 10:38 · Поправил: sss
· Личное сообщение · #16

ARCHANGEL - WSARecv, WSARecvEx, WSARecvMsg, WSARecvFrom, TransmitFile???



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 05 сентября 2008 10:58 · Поправил: flamer
· Личное сообщение · #17

ARCHANGEL пишет:
как можно ещё принимать данные от удалённого сервера

Высокоуровневых методов до фига. Это не полный список:
winApi = Весь комплект из Winhttp.dll , wininet.dll ws ws2_32.dll
mswsock.dll winsock.dll wsock32.dll ws2help.dll
.NET
Namespace: System.Net
Assembly: System (in system.dll)

А вообще, изначально посмотри на импорты.

Возможно, имеет смысл узнать куда и по какому протоколу суется софтинка.
Code:
  1. // drf.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #pragma comment( lib, "ws2_32.lib" )
  5. #include <conio.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <winsock2.h>
  9. #define MAX_PACKET_SIZE    0x10000
  10. #define SIO_RCVALL         0x98000001
  11. // Буфер для приёма данных
  12. char Buffer[MAX_PACKET_SIZE]; // 64 Kb
  13. //Структура заголовка IP-пакета
  14. typedef struct IPHeader {
  15.   UCHAR   iph_verlen; // версия и длина заголовка
  16.   UCHAR   iph_tos; // тип сервиса
  17.   USHORT  iph_length; // длина всего пакета
  18.   USHORT  iph_id; // Идентификация
  19.   USHORT  iph_offset; // флаги и смещения
  20.   UCHAR   iph_ttl; // время жизни пакета
  21.   UCHAR   iph_protocol; // протокол
  22.   USHORT  iph_xsum; // контрольная сумма
  23.   ULONG   iph_src; // IP-адрес отправителя
  24.   ULONG   iph_dest; // IP-адрес назначения
  25. } IPHeader;
  26. char src[10];
  27. char dest[10];
  28. char ds[15];
  29. unsigned short lowbyte;
  30. unsigned short hibyte;
  31. int _tmain(int argc, _TCHAR* argv[])
  32. {
  33.   WSADATA     wsadata; // Инициализация WinSock.
  34.   SOCKET      s; // Cлущающий сокет.
  35.   char        name[128]; // Имя хоста (компьютера).
  36.   HOSTENT*    phe; // Информация о хосте.
  37.   SOCKADDR_IN sa; // Адрес хоста
  38.   IN_ADDR sa1; //
  39.   unsigned long        flag = 1; // Флаг PROMISC Вкл/выкл.
  40.   // инициализация
  41.   WSAStartup(MAKEWORD(2,2), &wsadata);
  42.   s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
  43.   gethostname(name, sizeof(name));
  44.   phe = gethostbyname( name );
  45.   ZeroMemory( &sa, sizeof(sa) );
  46.   sa.sin_family = AF_INET;
  47.   sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
  48.   bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
  49.   
  50.   // Включение promiscuous mode.
  51.   ioctlsocket(s, SIO_RCVALL, &flag);
  52.   // Бесконечный цикл приёма IP-пакетов.
  53.   while( !_kbhit() )
  54.   {
  55.     int count;
  56.     count = recv( s, Buffer, sizeof(Buffer), 0 );
  57.     // обработка IP-пакета
  58.     if( count >= sizeof(IPHeader) )
  59.     {
  60.       IPHeader* hdr = (IPHeader *)Buffer;
  61.       //Начинаем разбор пакета...
  62.          // Преобразуем в понятный вид адрес отправителя.
  63.          printf("From ");
  64.          sa1.s_addr = hdr->iph_src;
  65.          printf(inet_ntoa(sa1));
  66.          // Преобразуем в понятный вид адрес получателя.
  67.          printf(" To ");
  68.          sa1.s_addr = hdr->iph_dest;
  69.          printf(inet_ntoa(sa1));
  70.          // Вычисляем протокол. Полный список этих констант
  71.          // содержится в файле winsock2.h
  72.          printf(" Prot: ");
  73.          if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP ");
  74.          if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP ");
  75.          // Вычисляем размер. Так как в сети принят прямой порядок
  76.          // байтов, а не обратный, то прийдётся поменять байты местами.
  77.          lowbyte = hdr->iph_length>>8;
  78.          hibyte = hdr->iph_length<<8;
  79.          hibyte = hibyte + lowbyte;
  80.          
  81.          
  82.          printf("Size: %d TTL:%d\n", hibyte,hdr->iph_ttl);
  83.          
  84.          
  85.     }
  86.   }
  87.   closesocket( s );
  88.   WSACleanup();
  89.   return 0;
  90. }
  91. }





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 сентября 2008 17:06
· Личное сообщение · #18

sss
Спасибо, нашёл, это была WSARecv, тему можно закрыть!

-----
Stuck to the plan, always think that we would stand up, never ran.



 eXeL@B —› Программирование —› Аналог recv
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати