如何进行协议逆向
来源:互联网 发布:视频后期 软件 编辑:程序博客网 时间:2024/05/16 14:23
抓包看到一系列的数据包,如何从中恢复出设计时为每个域的定义?
如果我们设计足够多,我们可以通过经验来预测。比如无论何种协议都需要有长度的域,这个域可能是代表有多少个字节,也可能是代表有多少字,总之一般会有这样一个域。
一般情况下,大部分协议设计都是按域设计的,极少出现HTTP/2那种二进制压缩格式的,这是人脑的逻辑属性决定的。而域的显著特点是大部分域都有取值范围,并且每个域的结束标记一般是一样的。
所以我们的思路也就比较明朗,首先找到标记长度的域,根据这个域确定每个域的结束标记。很多是固定长度的没有标记,在长度域上也能发现这个属性。确切的说,如果是以固定结束符结束的协议定义,那么长度域的结束符也一般一样。如果是没有结束符,通过结构体定义的协议结构,那么长度域后面也不会有固定的结束符。大部分情况属于后者,这也是人类大脑的编程属性喜欢用顺序的结构体决定的。但是像HTTP就是使用的固定结束符,所以也不是固定的。使用固定结束符的,一般可以称作session范式,使用固定位置域的,一般可以称作域范式。还有一些介于两者之间的,例如offset,pointer,array,set等组织方式,在私有的协议中一般比较少见到。Discoverer: AutomaticProtocolReverseEngineering fromNetworkTraces也是类似这种思路。
在找到结束符的形态后,就能确定每个域的划分。再根据每个域的取值范围来结合语意来推测每个域的语意意义。没有语意,各个域就是冰冷的值域而已。
Network Protocol Analysis using Bioinformatics Algorithms 里面使用sequence alignment方法在两个相似的序列中填充gap以达到对齐的效果,从而区分出不同的域。
还有一种比较容易的方法是通过客户端。制定的协议都是用来通信的,通信则必须使用客户端。如果我们能够获得客户端,我们就能通过逆向客户端的协议解析流程来获得协议的定义。这种方法直接绕开了数据包解析的相关技巧,只需要逆向技巧。但是如果客户端被加固过就不太容易采用。
例如要破解一个IM通信的协议。首先打开一个对话窗口,开始wireshark抓包(最好是设置一下只过滤抓取要抓取的进程),在对话窗口中输入一个超长的通话内容,不断的变动,就很容易从wireshark中根据数据包的长度将这条通信链接抓出来。
大部分的协议包都会有头部和数据两部分,变动通信的长度,就可以找到数据部分和头部部分的区别,运气好的话还能顺便发现长度域(一般在开头)。之后的做法就像上文所说一样的找分割,分析语意了。不要试图去破解qq,yy,微信,支付宝等运行很久的大公司的协议,这点知识破解他们的还是不够的。但是大部分的中小企业都几乎可以手到擒来。
- 如何进行协议逆向
- iOS 如何进行逆向工程?
- iOS 如何进行逆向工程?
- iOS 如何进行逆向工程
- iOS 如何进行逆向工程?
- MyEclipse如何对Hibernate进行逆向工程
- iOS 如何进行逆向工程?【链接】
- MyEclipse如何对Hibernate进行逆向工程
- ESMTP协议如何进行身份验证
- ESMTP协议如何进行身份验证
- 路由器协议如何进行选择
- iOS 如何进行逆向工程?--转自知乎
- 如何对字符串本身进行操作来实现逆向输出
- 如何使用Web Service进行WSDL逆向生成服务端
- 网络协议逆向分析
- 如何利用Ethereal进行协议分析
- 如何使用XMPP协议进行文件传输
- TCP协议如何进行流量控制
- iOS 8 SDK Touch ID指纹识别功能
- SQL Server 数据库内部版本号
- JVM-OutOfMemory异常重现
- pandas
- 手机归属地免费接口查询
- 如何进行协议逆向
- 蓝桥杯 历届试题 最大子阵
- Android源码目录分析
- 智能制造吹响进军号角 - 多地步入产业转型期
- 二叉搜索树 简单函数归纳
- JVM-JAVA对象的访问
- @Param注解的用法解析
- java组合模式
- 运行react-native 可能遇到的问题