通过在网络选项卡中选上仅以HTTP协议传输数据来达到目的。这样子可以方便地观察整个过程。

客户端发送连接请求:
  POST /service HTTP/1.1
  Accept: */*
  Cache-Control: no-cache
  Connection: Keep-Alive
  Content-Length: 68
  Host: 114.246.26.34:8080
  User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)
  .QVOD protocol..............Md..a.>...4..`}...'U.5..0057BB5855719946  -------数据包data部分

服务端响应:
  Accept: */*
  Cache-Control: no-cache
  Connection: Keep-Alive
  Content-Length: 68
  Host: 211.101.48.70:2596
  User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)
  .QVOD protocol..............Md..a.>...4..`}...'UQVOD0066E67A1F1C15F6 --------数据包data部分

HTTP数据包详细内容
                                                        13 51 56 4f .QVO
  44 20 70 72 6f 74 6f 63  6f 6c 00 00 00 00 00 00 D protoc ol......
  00 00 00 00 00 00 00 00  4d 64 ac 80 61 e2 3e 98 ........ Md..a.>.
  a7 90 34 01 82 60 7d a0  1e 80 27 55 f5 35 ee a7 ..4..`}. ..'U.5..
  30 30 35 37 42 42 35 38  35 35 37 31 39 39 34 36 0057BB58 55719946

    从客户端发送的HTTP数据包详细内容来看。有一些固定字段,但有些部分存在不确定性。可以先对这个协议数据结构进行猜测。通过大量的对比后可以从中发现一些比较有特点的地方,通过总结特点可以发现一些规律。经过对比后先假设这个发送数据包的协议结构如下所示:
struct  httpqvod
{
   short int fixed;//always 0x13
   char p2ptype[];
   char unknow[32];
   char unknow[20];
}
选择OD和IDA来逆向分析找出协议结构。
因为我们要尝试去探索发送数据包的结构,由于使用HTTP传输,所以是TCP连接,使用的是send函数。
使用OD attach QvodTerminal.exe进程,OD成功断在了send函数的地方

单步运行几步,跳出系统函数部分。找到调用send的地方。

通过使用IDA加载QvodTerminal.exe分析数据来源。分析函数调用过程

不断地回朔上去,使用OD动态分析找到数据包的内存中变化过程。

这个过程很容易发现004119B7处通过调用call dword ptr[edx+8]来达到跳转的目的

下面通过IDA加载这一部分进行分析,可以发现如下所示

通过mov [esp+54h+var_44],13h来赋值0x13,由此可以得知0x13为固定字节。然后通过的赋值可以判断来下面是协议标识部分的赋值,即是QVOD Protocol或者BitTorrent protocolex是协议标识。
接下来如下所示进行赋值一堆数据,暂时还是标志为unknow[32].然后通过赋值mov esi,offset dword_485038来对赋值一串序列号。

这是有20位的类似UID的一串字符,标识为char client-uid[20]。
所以整个数据结构可以得出为
struct  httpqvod
{
   short int fixed;//always 0x13
   char p2ptype[];//固定值,QVOD Protocol 或者 BitTorrent protocolex
   char unknow[32];
   char client-uid[20];//包含一些版本、哈希值等信息
}

参考书籍:《IDA.Pro代码破解揭秘》第七章 
QVOD HTTP数据包结构分析.doc


谢谢各位