一、拆包
首先声明这种方法比较复杂而且需要点技术水平,不建议菜鸟尝试(可以使用WireEdit等其他工具编辑pcap包)其实在熟练这种方法后也可以很快的,但这种方法主要还是方便吧,不用下载其他什么软件。(除了WireShark)
不过菜鸟也不会点进这篇技术文章吧。
先说主要思想
editcap和text2pcap是WireShark自带的两款功能强大的命令行程序
editcap是wireshark的命令行工具可以实现切割包和具体报文
text2pcap可以根据你导出来的字符数据重新转化为数据报文
因此我们可以先对原始包切割,切出想要的报文帧
导出为数据字串
修改数据字串
再用text2pcap转回报文,这样就完成了修改工作。
接下来是实际操作过程,我将把我遇到的比较复杂的例子来讲解,其他情况以此类推:
例子是一个巨帧TCP报文,人工实现IP分片功能。
打开CMD控制台窗口
转到WireShark安装目录 cd C:\Program Files\Wireshark 找到editcap.exe和text2pcap.exe 如图
接下来是官方文档editcap.html和text2pcap.html,我只截有用到的部分。
首先切割文件,找到巨帧的那个报文序号,利用editcap来把pcap文件拆成三部分:巨帧报文之前的部分,巨帧报文一部分,巨帧之后部分。命令如下:
editcap -r C:\Users\Administrator\Desktop\LargePcap.pcapng C:\Users\Administrator\Desktop\Header.pcapng 1-31
editcap -r C:\Users\Administrator\Desktop\LargePcap.pcapng C:\Users\Administrator\Desktop\JuZhen.pcapng 32
editcap C:\Users\Administrator\Desktop\LargePcap.pcapng C:\Users\Administrator\Desktop\Tail.pcapng 1-32
这里的巨帧是第32条报文,长度为2974明显大于以太网帧的1500,所以你必须要处理pcap包,才能使这个包符合实际的传输过程;命令中 -r 参数是保留指定报文,不加的话是剔除指定报文。
这里默认是pcapng格式,如果要转格式加 -F(详细见上面的说明);
把这个包拆成两部分: 一个1514(MTU 可能不同)另一个1460。这里使用 -C 参数来剪报文内的数据。
editcap -C -1460:1460 C:\Users\Administrator\Desktop\JuZhen.pcapng C:\Users\Administrator\Desktop\result_1.pcapng
editcap -C 54:1460 C:\Users\Administrator\Desktop\JuZhen.pcapng C:\Users\Administrator\Desktop\result_2.pcapng
这个语句要注意的是 offset :length offset是偏移,length是裁剪长度;还有就是要知道命令是把指定的给去除掉 (PS:我在这绕了很久)。
二、改包
打开result_1.pcapng和result_2.pcapng文件选中要改的报文,复制 -> as Hex Dump ,然后新建一个txt文件右键粘贴。
我把result_1.pcapng 和 result_2.pcapng 复制到 result_1.txt、result_2.txt中
接下来就是重中之重了 -------- 修改报文中的数据
同时打开result.pcapng 和 result.txt,在WireShark中找到要修改的字节,对照着txt文件的相应地方改成你要的数值就行了(要注意不要改动他导出的文件格式)
我这里的这个例子是要改动IP层的Total Length、Identification 和 Header CheckSum
以及TCP层的Sequence Number 和 Checksum
在txt中改掉对应的16进制,保存就完成了改包。
三、合包
然后使用text2pcap来合包操作,两条语句分别进行 txt Hex 转 pcapng 网络包
text2pcap C:\Users\Administrator\Desktop\result_1.txt C:\Users\Administrator\Desktop\1.pcapng
text2pcap C:\Users\Administrator\Desktop\result_2.txt C:\Users\Administrator\Desktop\2.pcapng
生成1.pcapng 和 2.pcapng
接下来是调整时间 ,使用 editcap -t 命令,由于不能使用精确时间来设置报文,只能 +偏移 或 -偏移来调正时间:
editcap -t -xxxx 1.pcapng
editcap -t -xxxx 2.pcapng
先查看 Header.pcapng 最后一条报文准确时间 和 Tail.pcapng 第一条报文时间,在根据要调整的报文时间进行加减
这里我就不写例子了(注意要在 Header.pcapng 最后一条报文准确时间 和 Tail.pcapng 第一条报文时间范围内)
最后是合并包部分,顺序是 Header.pcapng <- 1.pcapng <- 2.pcapng <- Tail.pcapng
四、结束
放张结果图,第32和33条报文是裁剪后的结果。
其实这种办法也不是特别麻烦吧!!不是很麻烦。。。。吧,。麻烦。好吧其实搞到这里我也没什么耐心了,这种方法我也没找到什么优点,在最后我也只是想记录一下,我挣扎的过程、学习的过程,仅此而已。