Coco's 信安小站 - wireshark
type: channel
link: https://www.cocosec.com/tag/wireshark/
items: 把网络抓包的数据流还原为原始文件

把网络抓包的数据流还原为原始文件
type: item
date: 2019-06-29T13:09:00+08:00
description: 使用wireshark或者科来网络分析抓到数据包后，由于原始文件传输过程中会转换成二进制流，抓包工具会把二进制流转换成ASCII码,而ASCII只支持127个字符，其他的字符如果被转换成ASCII将会显示为乱码。因此需要将数据流还原成文件以供阅读，其中关键在于识别二进制/ASCII码文件的头和尾。测试工具：wireshark、科来网络分析软件：notepad++情况一 get方法请求图片1、这种情况一般为url请求 http://XXXX/uploads/ceshi.png，网站直接返回图片2、响应包的Content-Type直接为image/png，表明响应包的正文即为文件数据，不包含其他信息。3、这时候用wireshark的直接导出功能，是最方便的。选择文件-导出对象-HTTP4、选定要导出的图片，保存出来就好了。情况二 POST方法上传图片方法一1、请求包的正文中带有图片的二进制流，如果用情况一的方法把流量保存为xxx.png导出的话，发现导出的图片无法正常显示。2、用notepad++打开发现文件头尾中包含多余的信息，直接把头尾多余的信息删掉，再重新保存就可以还原图片了。i> 这种方法适合在ASCII码下能正确识别文件头尾边界的情况，比如图片文件头部乱码与conten-type明显分割，结尾明显的一串NUL方法二1、由于数据直接是二进制的方式在网络中传输，所以找到该文件头尾的二进制标志即可还原文件。2、利用hex编辑器或者其他工具（这里我用科来网络分析，毕竟免费）查看二进制数据，结合ASCII码的内容，找到头部的0d 0a 0d 0a这串16进制，“0d”表示光标移到同一行的顶头——回车(CR)，“0a”是把光标移到下一行——换行(LF),“0A“、”0D”一起用，使光标到下一行的开始处,而用了两次就表明有空行，这与ASCII码显示的空行相互对应上了。3、数据从0d 0a 0d 0a后第一个字符开始选。4、一直到最后出现的0d 0a，这里需要结合ASCII码来判定文件末尾5、把二进制数据复制到notepad++中，然后全选，把hex转换成ASCII码，保存为XXX.png文件就大功告成了！总结其他文件格式的还原方法与图片也是类似的，只要确定了文件二进制格式头尾的情况，就可以做到文件还原。如果大文件传输，网站可能采用分块传输的方式，需要注意单个数据包携带的数据不全，那样用wireshark导出对象的方式更好。参考文档:https://blog.51cto.com/yttitan/1738099https://www.jianshu.com/p/2e1d3110593ahttps://blog.csdn.net/chrycoder/article/details/86525316