1.API的调用过程(3环部分)
生活随笔
收集整理的這篇文章主要介紹了
1.API的调用过程(3环部分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Application Programming Interface,簡稱API函數。
主要是存放在C:\WINDOWS\system32下面所有的dll
幾個重要的DLL
- Kernel32.dll:最核心的功能模塊,比如管理內存、進程和線程相關的函數等…
- User32.dll:是Windows用戶界面相關應用程序接口,如創建窗口和發送消息等.
- GDI32.dll:全稱是Graphical Device Interface(圖形設備接口),包含用于畫圖和顯示文本的函數比如要顯示一個程序窗口,就調用了其中的函數來畫這個窗口.
- Ntdil.dll:大多數API都會通過這個DLL進入內核(0環).
絕大多數的api都是在0環實現的(極少數是在3環),3環只是提供的一個接口
下面我們來看看ReadProcessMemory這個api函數
打開IDA:C:\WINDOWS\system32\Kernel32.dll拖進去,Alt+T搜索ReadProcessMemory
參數壓棧后它調用了另外一個函數,返回結果就是eax,小于0的話跳到下面這
那個Call是BaseSetLastNTError函數設置完錯誤號清0eax又跳回去
跳到這直接返回了所以失敗返回的是0
如果eax不小于0,eax清0,eax+1,返回1
會發現這個api好像沒干什么事情,其實功能都在NtReadVirtualMemory里了
但這個函數數并不是Kernel32.dll提供的(一般看見紫色函數名就不是一個模塊的)
打開導入表可看到它來自ntdll,接下來我打開ntdll找到這個函數。
只是提供一個操作碼,一個方式進入0環,3環想進入0環都要提供一個操作碼,真正讀內存這個函數是在0環實現的。
我們來重寫3環的接口,這樣可以防止別人對我們的程序下api斷點,hook檢測之類的。
總結
以上是生活随笔為你收集整理的1.API的调用过程(3环部分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 21.分享篇
- 下一篇: 2.API的调用过程(3环进0环)