轉:native api的學習筆記

來源:互聯網
上載者:User
最近在學習native api,做個筆記,以後可能用得上
首先要明白NATIVE api是什嗎?
我比較喜歡這樣理解:
native API 可以譯做“原生API”
比如您的應用程式調用Win32 API如ReadFile, 此時ReadFile會在底層調用ntdll.dll中匯出的NtReadFile,讀取檔案的實際工作就轉交給了NtReadFile常式了,這個NtReadFile即為Native API.
注意:這個NtReadFile是作業系統中未文檔化的常式,所以不適合在應用程式中直接調用。
其實native api功能非常強大,網上的牛人也給出了RING3下使用native api的方法。
調用方式一(一般方式):
第一步:聲明函數指標
比如我們需要調用NtCreateFile函數,那麼我們就需要根據NtCreateFile的定義來聲明一個相同類型的函數指標(這樣做會讓編譯器比較高興)
typedef NTSTATUS (* MyNtCreateFile) (
OUT PHANDLE FileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
//OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID IoStatusBlock,
IN PLARGE_INTEGER AllocationSize OPTIONAL,
IN ULONG FileAttributes,
IN ULONG ShareAccess,
IN ULONG CreateDisposition,
IN ULONG CreateOptions,
IN PVOID EaBuffer OPTIONAL,
IN ULONG EaLength
);
MyNtCreateFile MyNtCreateFileFun; 第二步: 擷取native api在natdll中的地址
MyNtCreateFileFun= (MyNtCreateFile)GetProcAddress (GetModuleHandle("ntdll.dll"), "NtCreateFile"); 第三步: 調用native api完成功能

HOOK native api和HOOK其他API函數是一樣的!就是那麼幾種HOOK方法,IAT HOOK,INLINE HOOK等
實現思路就是這樣:
這裡以ZwWriteFile函數為例,代碼如下,這裡用的是寫入程式碼,可以用detours hook的
7C92DF7E >  B8 12010000     mov eax,112                              ; ZwWriteFile
7C92DF83    BA 0003FE7F     mov edx,7FFE0300
7C92DF88    FF12            call dword ptr ds:[edx]                  ; ntdll.KiFastSystemCall
7C92DF8A    C2 2400         retn 24

hook的基本思路是:修改函數入口處的第5——12位元組,既是把
7C92DF83    BA 0003FE7F     mov edx,7FFE0300
7C92DF88    FF12            call dword ptr ds:[edx]                  ; ntdll.KiFastSystemCall
修改成:
mov edx,[自訂的hook函數地址]
call edx
修改後的代碼如下:
7C92DF7E >  B8 12010000     mov eax,112                              ; ZwWriteFile
7C92DF83    BA 0003FE7F     mov edx,xxxxxxxx                 ;xxxxx是hook函數的地址,定義在你的dll中
7C92DF88    FF12            call edx                         ;call到你的hook函數中
7C92DF8A    C2 2400         retn 24
在自己的函數內要注意堆棧平衡!

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.