天天看点

windows 内核文档化API/导出但未文档化API/未导出API

导出函数:顾名思义,出现在导出表(EAT)里面的函数,可以给外部调用的函数,验证是否为导出函数的方法,熟悉逆向的朋友可以使用LordPE之类的工具查看,当然也可以使用GetProcAddress或者MmGetSystemRoutineAddress之类的函数来获取地址,如果成功的话就是导出函数。

非导出函数:这种函数是供自己调用使用的,不想提供给别人使用,当然也有方法可以获取函数地址,可以根据函数的特征来搜索,这就是传说中的硬编码,经典的案例案例如,NtReadVirtualMemory。

文档化函数:微软(可以是其它厂商~)提供的带有函数原型和文档的函数,这种函数使用起来最方便,不用去寻找或者逆向函数原型,还带有参数说明~~。

非文档化函数:没有函数原型和文档的函数,微软经常会把一些参数可能会随时变化的函数,或者功能有点强大的不河蟹的函数隐藏起来,这些也是不河蟹软件最喜欢的函数。通常这类函数可以被GetProcAddress或者MmGetSystemRoutineAddress获取到地址,但是函数原型需要搜索或者逆向。

1.公开函数肯定是导出函数,只要你在msdn上能找到函数可定都是能直接调用的导出函数,除非微软蛋疼了。

2.导出函数可以是非公开函数,比如LdrLoadDll这个函数,能取到地址但是msdn上面没有说明。

导出未文档化是已经导出了,但是不能直接使用。

使用方法:

1.在驱动层使用MmGetSystemRoutineAddress加函数名去获取函数的地址

2.在应用层使用Loadlibrary和GetProcessAddress(事先当然要先定义好原型)

继续阅读