0x00
本文是对ALPC的简单研究,由于时间有限,还有很多细节没有搞清楚,还有很多疏漏。希望能起到抛砖引玉的作用,能找到高手讨论学习。
ALPC(Advanced/Asynchronous Local Procedure Call),是微软发展出来替代LPC,用于本机RPC的一种C/S模型技术。但是对用户来说,能看到只有RPC概念,很少能看到ALPC。
我们看一个典型的ALPC同步调用堆栈:
从名字上就能看出RPCRT4.dll是rpc的runtime库,我个人感觉在C端如果要使用RPC的话主要是和这个库打交道。
从堆栈的函数调用可以看出来,RPC先进入LRPC再进入ALPC。Windows中将RPC分为LRPC(本机远程过程调用)与多机RPC。
实质上分为两种RPC其实也是很好理解,对本机来说,IPC的通讯方法多样,整体环境简单;而不同终端的IPC主要使用的tcp/ip协议,网络环境的异常处理比较复杂。
LRPC是通过ALPC实现的。
在现代的Windows环境中,ALPC的使用的频繁程度可能远远超过大部分人的想象。可能很熟悉的API内部都是通过ALPC委托为其他的应用程序(主要是各类svchost)实现的。按照 Alex Ionescu在 syscan2014上的发言,即使最简单的windows程序都会有ALPC连接。
可以打开 procexp.exe查看每个进程的ALPC Port的名字。