在windows的域环境中有非常多的协议和服务是基于DCE/RPC协议进行实现的,例如NETLOGON,LSA,SAMR,DSSETUP等。因此在 windows的环境下会大量的遇到DCE/RPC协议,因此有必要对该协议有一个初步的了解,这样的话在遇到对应的数据包,则能够比较清楚的还原数据包中发生了什么。本文将通过数据包对DCE/RPC协议进行详细的分析, 作为专栏《计算机网络协议快速入门教程》中的一篇。
什么是RPC和DCE/RPC
RPC的全称是Remote Procedure Call,即远程过程调用,最早提出来用来保证两台电脑之间的功能调用。写过程序的都了解,本地的程序可以调用本地的类库(.so,.lib,.dll等文件),通过调用对应的API并传递对应的参数即可完成某一项功能。如果需要调用的功能不在本地,而是在另外一台机器上,则需要一套机制来保证远程的功能调用以及完成参数的传递,完成和本地调用同样的效果,RPC的作用就在于此。RPC本身不应该理解为一个具体的协议,和SMB一样,是一类协议统称,用来实现进程间远程调用。在RPC的发展过程中,形成了如图1一些不同的协议分支和框架:
图1
应用最广泛的是DCE/RPC,对应的设计文档见这里,微软的MSRPC也是在扩展了DCE/RPC的功能,对应的设计文档见