日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows系统调用学习笔记(一)—— API函数调用过程

發(fā)布時間:2025/3/21 windows 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows系统调用学习笔记(一)—— API函数调用过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Windows系統(tǒng)調(diào)用學(xué)習(xí)筆記(一)—— API函數(shù)調(diào)用過程

    • Windows API
    • 實驗1:分析ReadProcessMemory
      • 第一步:定位函數(shù)
      • 第二步:開始分析
      • 總結(jié)
    • 實驗2:分析NtReadVirtualMemory
      • 第一步:定位函數(shù)
      • 第二步:開始分析
      • 總結(jié)
    • 實驗3:編寫一個ReadProcessMemory函數(shù)
      • 第一步:獲得變量地址
      • 第二步:構(gòu)造自定義ReadProcessMemory
      • 第三步:調(diào)用自定義ReadProcessMemory

Windows API

描述:

  • Application Programming Interface,簡稱 API 函數(shù)。

  • Windows有多少個API?
    主要是存放在 C:\WINDOWS\system32 下面所有的dll

  • 幾個重要的DLL
    Kernel32.dll:最核心的功能模塊,比如管理內(nèi)存進程線程相關(guān)的函數(shù)等
    User32.dll:是Windows用戶界面相關(guān)應(yīng)用程序接口,如創(chuàng)建窗口發(fā)送消息
    GDI32.dll:全稱是Graphical Device Interface(圖形設(shè)備接口),包含用于畫圖和顯示文本的函數(shù)。比如要顯示一個程序窗口,就調(diào)用了其中的函數(shù)來畫這個窗口
    Ntdll.dll:大多數(shù)API都會通過這個DLL進入內(nèi)核(0環(huán))

  • 實驗1:分析ReadProcessMemory

    第一步:定位函數(shù)

  • 使用IDA打開kernel32.dll(ReadProcessMemory函數(shù)在這個dll里)
  • 在左側(cè)函數(shù)窗口中使用快捷鍵ctrl+F搜索ReadProcessMemory
  • 雙擊查看反匯編
  • 第二步:開始分析

    • 首先將我們傳入的參數(shù)進行壓棧

    • 調(diào)用了其它模塊的函數(shù):NtReadVirtualMemory(函數(shù)名紅色說明不在當(dāng)前模塊)

    • 若返回結(jié)果小于0,跳轉(zhuǎn)至loc_7C802204


      loc_7C802204調(diào)用了sub_7C809419

    • sub_7C809419內(nèi)部調(diào)用了另一個函數(shù)RtlNtStatusToDosError

      這個函數(shù)的作用是設(shè)置錯誤號

    • sub_7C809419出來后,將eax清零,跳轉(zhuǎn)到loc_7C802F9

      loc_7C802F9只做了一件事情,那就是返回
      至此,我們可以知道,當(dāng)調(diào)用ReadProcessMemory失敗時,返回結(jié)果為0

    • NtReadVirtualMemory返回結(jié)果大于等于0,返回結(jié)果為1

    總結(jié)

  • ReadProcessMemory函數(shù)在kernel32.dll中實際上并沒有做什么事情。它只是調(diào)用了另一個函數(shù),然后設(shè)置了一些返回值
  • 如果想知道ReadProcessMemory這個函數(shù)到底是怎么執(zhí)行的,就得找到NtReadVirtualMemory
  • 實驗2:分析NtReadVirtualMemory

    第一步:定位函數(shù)

  • 查看kernel32的導(dǎo)入表(Imports),找到NtReadVirtualMemory
  • 觀察Library字段,發(fā)現(xiàn)NtReadVirtualMemory函數(shù)來自ntdll
  • 使用IDA打開ntdll.dll
  • 將光標(biāo)放置在反匯編界面最上方,使用alt+T搜索NtReadVirtualMemory

    這4行代碼就是NtReadVirtualMemory的所有代碼
  • 第二步:開始分析

    • mov eax, 0BAh
      0BAh:編號,對應(yīng)操作系統(tǒng)內(nèi)核中某個函數(shù)的編號
      我們所用到的API函數(shù),只要進0環(huán),都要提供一個編號

    • mov edx, 7FFE0300h
      7FFE0300h:函數(shù)地址,該函數(shù)決定了我們用什么方式進0環(huán)

    • 該函數(shù)的功能:提供一個編號和一個函數(shù),通過這個函數(shù)進入0環(huán)

    總結(jié)

    真正讀取進程內(nèi)存的函數(shù)在0環(huán)實現(xiàn),我們所用的函數(shù)只是系統(tǒng)提供給我們的函數(shù)接口

    實驗3:編寫一個ReadProcessMemory函數(shù)

    要求:不使用任何DLL,直接調(diào)用0環(huán)函數(shù)
    意義:自己實現(xiàn)的API,可以避免3環(huán)程序被惡意掛鉤

    第一步:獲得變量地址

    運行以下代碼(進程1):

    #include <stdio.h>int main() {int num = 0x12345678;printf("&num = %x \n", &num);getchar();return 0; }

    運行結(jié)果:

    注意:不要讓進程結(jié)束

    第二步:構(gòu)造自定義ReadProcessMemory

    代碼如下

    void MyReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead) {__asm{lea eax, [ebp+0x14]push eax ; ReturnLengthpush [ebp+0x14] ; BufferLengthpush [ebp+0x10] ; Bufferpush [ebp+0x0C] ; BaseAddresspush [ebp+0x08] ; ProcessHandlemov eax, 0BAhmov edx, espint 02eh ; Windows操作系統(tǒng)提供IDT[0x2e]給用戶進行內(nèi)核調(diào)用add esp, 20} }

    第三步:調(diào)用自定義ReadProcessMemory

    完整代碼(進程2):

    void MyReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead) {__asm{lea eax, [ebp+0x14]push eax ; ReturnLengthpush [ebp+0x14] ; BufferLengthpush [ebp+0x10] ; Bufferpush [ebp+0x0C] ; BaseAddresspush [ebp+0x08] ; ProcessHandlemov eax, 0BAhmov edx, espint 02eh ; Windows操作系統(tǒng)提供IDT[0x2e]給用戶進行內(nèi)核調(diào)用add esp, 20} }int main() {DWORD pBuffer; // 接收數(shù)據(jù)的緩沖區(qū)HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, PID); // 獲得進程句柄,PID修改為進程1的PIDMyReadProcessMemory(hProcess, (PVOID)0x12ff7c, &pBuffer, 4, 0); // 調(diào)用自定義的ReadProcessMemoryprintf("pBuffer = %x \n", pBuffer); // 打印從其他進程中讀取的數(shù)據(jù)getchar();return 0; }

    運行結(jié)果:

    成功從進程1中讀取了變量num的值!

    總結(jié)

    以上是生活随笔為你收集整理的Windows系统调用学习笔记(一)—— API函数调用过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本泡妞视频 | 日本吃奶摸下激烈网站动漫 | 西西4444www大胆无视频 | 亚洲免费久久 | 色爱av综合 | 国产人成精品 | xxxxx黄色| 少女情窦初开的第4集在线观看 | 天天操天天射天天爽 | 亚洲综合久久av | 性生交大片免费看3p | 最近最经典中文mv字幕 | 精品视频国产 | 激情欧美综合 | 亚洲一区日韩 | www.天天综合 | 欧美日韩在线视频一区二区 | 久久伊人中文字幕 | 婷婷久久亚洲 | 九九黄色大片 | 五月婷婷在线视频 | 亚洲第一成肉网 | 毛片在哪看 | 久久久wwww| 日本国产三级xxxxxx | 亚洲日本护士毛茸茸 | 青青艹av | 很黄很色的视频 | 四虎网站 | 日韩三级网 | 亚洲熟区 | 色伊人av | 免费毛毛片 | 成人国产精品一区二区 | 黑人巨大精品欧美黑白配亚洲 | 日本va欧美va精品发布 | 手机在线看片你懂的 | 亚洲精品五月天 | 中文字幕激情 | 日韩精品中文字幕一区 | 四虎影院在线 | 国产aⅴ爽av久久久久成人 | 欧美狂猛xxxxx乱大交3 | 麻豆一区二区在线观看 | 国产伦精品视频一区二区三区 | 午夜美女福利视频 | 欧美三级久久久 | 夜夜夜夜夜操 | 在线观看免费中文字幕 | 日韩在线视 | 欧美性猛交xxxx黑人猛交 | 中文字幕精品一区二区精品 | 色七七在线 | 国产精品老熟女一区二区 | 久久久精品一区二区三区 | 日韩久久在线 | 免费观看成人毛片 | 超碰97国产| 五月花婷婷 | 草莓视频在线观看入口w | 91成人在线观看国产 | 国产suv精品一区二区69 | 亚洲一本二本 | 久久国产美女视频 | 久久爱网| 一级做a爱视频 | 日韩免费精品 | 久久婷色| 亚洲熟妇一区二区 | 国内一级视频 | 成人黄性视频 | 免费观看黄一级视频 | 69视频网站 | 一级黄色性生活视频 | 日批黄色 | 九九视频免费 | xxxx日本少妇 | 亚洲一区二区三区高清视频 | 久久综合一区二区三区 | 日本特黄 | 亚洲 欧美 激情 小说 另类 | 亚洲 欧美 变态 另类 综合 | 久久av在线播放 | 国产精品视频久久久久久久 | 成人啪啪网站 | 日本不卡网 | 国产一二 | av播播 | www.浪潮av.com| 91老肥熟 | 一区二区三区在线观看视频 | 成人在线激情 | 美女网站全黄 | av无线看| 午夜精品一区二区三区在线视频 | 337p嫩模大胆色肉噜噜噜 | www.爱色av.com | 亚洲日日操 | 国产一区二区三区精品在线 |