通过在网络选项卡中选上仅以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谢谢各位
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)