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

来源:互联网 发布:行业数据库 编辑:程序博客网 时间:2024/05/17 08:33

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

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

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

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

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

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

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

使用方法:
1.在驱动层使用MmGetSystemRoutineAddress加函数名去获取函数的地址
2.在应用层使用Loadlibrary和GetProcessAddress(事先当然要先定义好原型)

未导出函数的使用比较麻烦

一般要先获取那个函数所在模块的基地址,然后再通过特征码去得到函数地址。或者在某个函数内部进行特征码的搜索。这个方法针对不同的函数或是结构不止一种方法,像SSDT SHADOW。

0 0
原创粉丝点击