为此,我正在寻找比 Wireshark 更好的工具。Wireshark 的问题在于它没有干净地格式化数据层(这是我正在查看的唯一部分),以便我比较不同的数据包并尝试理解第三方编码(它是封闭源代码)。
具体来说,查看数据而不是 TCP/UDP 标头信息的好工具有哪些?特别是,一种格式化数据以进行比较的工具。
非常具体:我想要一个比较多个(不仅仅是 2 个)十六进制文件的程序。
为此,我正在寻找比 Wireshark 更好的工具。Wireshark 的问题在于它没有干净地格式化数据层(这是我正在查看的唯一部分),以便我比较不同的数据包并尝试理解第三方编码(它是封闭源代码)。
具体来说,查看数据而不是 TCP/UDP 标头信息的好工具有哪些?特别是,一种格式化数据以进行比较的工具。
非常具体:我想要一个比较多个(不仅仅是 2 个)十六进制文件的程序。
查看BreakingPoint Labs 的这篇博文。他们正在讨论手动协议逆向工程和一套基于PacketFu构建的工具,以使这项任务更容易。
与您的问题相关的是一组工具,可以轻松识别和突出数据包的更改。这是一个示例屏幕截图,显示了使用颜色来勾勒数据包差异:(
来源:breakpointsystems.com)
坦率地说,你最好的选择就是自己动手。
获得一种您熟悉的脚本语言并开始解决问题。首先编写一个简单的多路比较,但是一旦您开始找到您认为重要(或您认为可能)的模式,就返回并将它们添加到代码中——从输出中删除它们,突出显示它们,翻译它们换成另一种表示法,用它们的“意义”或对其角色的某种高级描述来替换它们——只要看起来合适。如果你不能决定,那就让它成为一个选项。
你要求可视化软件是因为你想要一些东西来帮助你形成和内化对它们编码的理解。但是您将要进行的比较只是您将使用的过程的一部分(这本质上是科学方法)——您还将形成和修改关于数据包各个部分的含义、它们如何相互作用的猜测, ETC。
没有预先构建的工具可以帮助你,但是一个好的脚本语言(比如 python、ruby 甚至 perl)会有很大帮助。当你形成一个理论时,把它编码并尝试一下。将你的代码混杂在一起,尝试不同的想法,并在你进行过程中构建一袋针对这个问题定制的技巧。
——马库斯
PS 不要陷入尝试使用 C 或 Java 或其他东西来做到这一点的陷阱。你会玩得又快又松,并且应该有一个不需要变量声明、编译等的工具。一旦你了解它是如何工作的,就会有很多机会来收紧和重写它。
仅对于 HTTP,我曾经使用过一个很棒的工具,叫做Effetech。
(虽然现在看起来它们似乎支持的不仅仅是 HTTP ......)
问题是应用层的数据不是标准的(很少有例外,比如 HTTP、POP3 等)。如果 Wireshark 等工具不知道格式,则无法解码此信息。
我知道一些旧版本的 Ethereal(现在是 Wireshark)可以选择(您可能必须启用它)来显示有效负载。期望它没有意义,大多数协议都是二进制的!
如果您有使用 ethereal 完成的捕获,您可以读取捕获,或者您可以使用 tcpdump 进行捕获。要捕获使用 tcpdump 命令,如tcpdump -s 0 -qn -X或tcpdump -X -r filename将读取捕获。
22:08:33.513650 IP 192.168.32.10.40583 > 69.59.196.211.80: tcp 1261
0x0000: 4500 0521 18ec 4000 4006 322a c0a8 200a E..!..@.@.2*....
0x0010: 453b c4d3 9e87 0050 b0b6 4b4f 1598 0090 E;.....P..KO....
0x0020: 8018 1920 9b4f 0000 0101 080a 002e 701b .....O........p.
0x0030: 093c bc38 4745 5420 2f75 7365 7273 2f32 .<.8GET./users/2
0x0040: 3032 3637 2f7a 6f72 6564 6163 6865 2048 0267/zoredache.H
0x0050: 5454 502f 312e 300d 0a48 6f73 743a 2073 TTP/1.0..Host:.s
0x0060: 7461 636b 6f76 6572 666c 6f77 2e63 6f6d tackoverflow.com
或者还有另一个tcpick可能是您想要的。您可以捕获 tcp 连接的有效负载,并将其显示为十六进制或保存。