我已经用HOOK截获wsock32.dll的recv(),但截来的有用的数据都是一堆堆的数据包,如何分析这些数据包呢?

解决方案 »

  1.   

    看协议分析数据报。
    主要有tcp,udp等
      

  2.   

    大哥,能不能吧你的hook源程序发给我看看?顺便问一句,如何截获一个窗口的信息?
    [email protected],交流!:)
      

  3.   

    有一本书《Windows 防火墙域网络封包截获技术》的书,里面有一些相关的内容。
    我也没看明白,关注中 ...
      

  4.   

    如果截到的是以太网帧的数据报,可用ipconfig 察看你自己的mac地址,在以太网帧中查找,他将作为数据报头的原地址,或目标地址。察看接下来的数据800代表udp,801代表?记不清了,你自己查吧,再往后是协议头(udp,tcp,等)然后是你真时的数据。da
    sa
    protcal ---udp,tcp
    header of cdp/tcp
    data - you send/recv
      

  5.   

    typedef struct _IP_HEADER
    {
    __u8            h_lenver;//4位首部长度+4位IP版本号
        __u8            tos;//8位服务类型TOS
        __u16           tot_len;//16位总长度(字节)
        __u16           id;//16位标识
        __u16           frag_off;//3位标志位
        __u8            ttl;//8位生存时间 TTL
        __u8            protocol;//8位协议 (TCP, UDP 或其他)
        __u16           check;//16位IP首部校验和
        __u32           saddr;//32位源IP地址
        __u32           daddr;//32位目的IP地址
    }IP_HEADER;
    typedef struct _TCP_HEADER
    {
        __u16           source;//16位源端口
        __u16           dest;//16位目的端口
        __u32           seq;//32位序列号
        __u32           ack_seq;//32位确认号
    __u8 th_lenres;//4位首部长度/6位保留字
    __u8 th_flag;//6位标志位
        __u16           window;//16位窗口大小
        __u16           check;//16位校验和
        __u16           urg_ptr;//16位紧急数据偏移量
    }TCP_HEADER;
    //then you can consult codeguru "ipmon" example...
      

  6.   

    有没有具体的代码啊?
    我从recv(int,char * buf,...)得到了buf中的数据,如何用代码分析出来呢?
      

  7.   

    能否给我源程序,我想学习学习[email protected]
      

  8.   

    TCP/IP详解上面有一部分,不过也不是太多,基本的802.3,802.1,IP,TCP,UDP,ICMP 好象是有。
    最重要的是积累,先看看Sniffer或NetXRay里面的东西,可以慢慢做下来的。不要一下子就想处理所有Packet
      

  9.   

    NetXRay哪儿有下载的?如何用呢?
      

  10.   

    panch(江湖小子)
    我也做过API HOOK,但是怎么也钩不上网络函数,如WS2_32.DLL中的send()。
    其它函数还没试过。望指教。
      

  11.   

    对于API HOOK我是一知半解,更不明白什么是替换法,能不能详细地说一下,
    user32.dll,gdi32.dll中的函数我都钩过,但是不知道为什么,钩不上sw2_32.dll中的函数。我用的系统是Win2000。对于你的问题我是这样看的,如果你截获的对的话,那么你得到的被填充的
    缓冲区里应该就是recv接收到的数据。如果你接收到的是乱码,那么recv的
    调用者得到的也应该是乱码。原调用者(被截获者)得到的是乱码吗?有一种可能的情况就是你自己的buf没有被正确填充,甚至是没有被填充,
    可以调试比较一下。buf 是 char FAR * 类型的。至于TCP/IP协议内容中的协议类型、端口号、IP地址等等,我想大概不会在
    buf中,它应该在SOCKET结构中,所以不用去管TCP/IP协议。recv这些网络
    函数已经是协议层之上的API函数了,它已经把TCP/IP协议解析了。我想是
    这样的。也可能不是这样,我不是很自信,只供参考。
      

  12.   

    替换法就是把wsock32.dll换成你的wsock32.dll。
    recv到的是乱码很正常,因为都是二进制数据。
      

  13.   

    请问“江湖小子”,替换的话是不是要得到wsock32.dll的源码,进行修改,
    然后再重新编译呢?因为要保证系统还要正常运行吗。