一、拆包

  首先声明这种方法比较复杂而且需要点技术水平,不建议菜鸟尝试(可以使用WireEdit等其他工具编辑pcap包)其实在熟练这种方法后也可以很快的,但这种方法主要还是方便吧,不用下载其他什么软件。(除了WireShark)

不过菜鸟也不会点进这篇技术文章吧。

 

先说主要思想

editcap和text2pcap是WireShark自带的两款功能强大的命令行程序

editcap是wireshark的命令行工具可以实现切割包和具体报文

text2pcap可以根据你导出来的字符数据重新转化为数据报文

因此我们可以先对原始包切割,切出想要的报文帧

导出为数据字串

修改数据字串

再用text2pcap转回报文,这样就完成了修改工作。

 

接下来是实际操作过程,我将把我遇到的比较复杂的例子来讲解,其他情况以此类推:

例子是一个巨帧TCP报文,人工实现IP分片功能。

打开CMD控制台窗口

转到WireShark安装目录 cd C:Program FilesWireshark 找到editcap.exe和text2pcap.exe 如图

 WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

接下来是官方文档editcap.html和text2pcap.html,我只截有用到的部分。

 WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

 

WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

 WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

首先切割文件,找到巨帧的那个报文序号,利用editcap来把pcap文件拆成三部分:巨帧报文之前的部分,巨帧报文一部分,巨帧之后部分。命令如下:

editcap -r C:UsersAdministratorDesktopLargePcap.pcapng C:UsersAdministratorDesktopHeader.pcapng 1-31

editcap -r C:UsersAdministratorDesktopLargePcap.pcapng C:UsersAdministratorDesktopJuZhen.pcapng  32

editcap C:UsersAdministratorDesktopLargePcap.pcapng C:UsersAdministratorDesktopTail.pcapng 1-32

WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

这里的巨帧是第32条报文,长度为2974明显大于以太网帧的1500,所以你必须要处理pcap包,才能使这个包符合实际的传输过程;命令中 -r 参数是保留指定报文,不加的话是剔除指定报文。

这里默认是pcapng格式,如果要转格式加 -F(详细见上面的说明);

把这个包拆成两部分: 一个1514(MTU 可能不同)另一个1460。这里使用 -C 参数来剪报文内的数据。

 

 

editcap -C -1460:1460 C:UsersAdministratorDesktopJuZhen.pcapng C:UsersAdministratorDesktopesult_1.pcapng

editcap -C 54:1460 C:UsersAdministratorDesktopJuZhen.pcapng C:UsersAdministratorDesktopesult_2.pcapng

 

这个语句要注意的是 offset :length offset是偏移,length是裁剪长度;还有就是要知道命令是把指定的给去除掉 (PS:我在这绕了很久)。

二、改包

  打开result_1.pcapng和result_2.pcapng文件选中要改的报文,复制 -> as Hex Dump ,然后新建一个txt文件右键粘贴。

WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

我把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:UsersAdministratorDesktopesult_1.txt C:UsersAdministratorDesktop1.pcapng

 

 text2pcap C:UsersAdministratorDesktopesult_2.txt C:UsersAdministratorDesktop2.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

WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

四、结束

放张结果图,第32和33条报文是裁剪后的结果。

WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作-风君雪科技博客

其实这种办法也不是特别麻烦吧!!不是很麻烦。。。。吧,。麻烦。好吧其实搞到这里我也没什么耐心了,这种方法我也没找到什么优点,在最后我也只是想记录一下,我挣扎的过程、学习的过程,仅此而已。