天天看點

windows 核心文檔化API/導出但未文檔化API/未導出API

導出函數:顧名思義,出現在導出表(EAT)裡面的函數,可以給外部調用的函數,驗證是否為導出函數的方法,熟悉逆向的朋友可以使用LordPE之類的工具檢視,當然也可以使用GetProcAddress或者MmGetSystemRoutineAddress之類的函數來擷取位址,如果成功的話就是導出函數。

非導出函數:這種函數是供自己調用使用的,不想提供給别人使用,當然也有方法可以擷取函數位址,可以根據函數的特征來搜尋,這就是傳說中的寫死,經典的案例案例如,NtReadVirtualMemory。

文檔化函數:微軟(可以是其它廠商~)提供的帶有函數原型和文檔的函數,這種函數使用起來最友善,不用去尋找或者逆向函數原型,還帶有參數說明~~。

非文檔化函數:沒有函數原型和文檔的函數,微軟經常會把一些參數可能會随時變化的函數,或者功能有點強大的不河蟹的函數隐藏起來,這些也是不河蟹軟體最喜歡的函數。通常這類函數可以被GetProcAddress或者MmGetSystemRoutineAddress擷取到位址,但是函數原型需要搜尋或者逆向。

1.公開函數肯定是導出函數,隻要你在msdn上能找到函數可定都是能直接調用的導出函數,除非微軟蛋疼了。

2.導出函數可以是非公開函數,比如LdrLoadDll這個函數,能取到位址但是msdn上面沒有說明。

導出未文檔化是已經導出了,但是不能直接使用。

使用方法:

1.在驅動層使用MmGetSystemRoutineAddress加函數名去擷取函數的位址

2.在應用層使用Loadlibrary和GetProcessAddress(事先當然要先定義好原型)

繼續閱讀