保護模式7 呼叫門原理與實驗

2021-08-28 03:13:01 字數 2794 閱讀 2786

呼叫門(無引數)

呼叫門執行流程-長呼叫

構造乙個呼叫門(無引數 提權)

0000ec00 00080000     //基本的呼叫門結構
開啟虛擬機器裡面的vs或者vc,建立乙個win32控制台程式

首先我們構造乙個函式,這個**將會具有0環的**許可權,我們在**裡直接讀取高2g記憶體的資料

#include //如果無法使用dword

dword h2gvalue;

void __declspec(naked) readregister()

};

構建好0環**,然後構建call far

char buff[6]=;   //由於eip廢棄,全部填0   0x48為段選擇子,選擇gdt基址+0x48位置的呼叫門

__asm

printf("讀取高2g0x800f300c的內容:%x\n",h2gvalue);

獲取0環**的起始位置,作為呼叫門跳轉的位置

0x004113b0為0環**的3環位置
0000ec00 00080000 //構建好的基本呼叫門結構

0041ec00`000813b0 //構建完成的呼叫門,放在0x8003f048的位置

>004113b0< //填充好的自定義** 跳轉位址

0041ec00`>0008<13b0 //0x0008,dpl為0的段描述符的選擇子

通過windbg構建呼叫門,成功讀取了高2g的記憶體資料

// dy.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include dword h2gvalue;

void __declspec(naked) readregister()

}int _tmain(int argc, _tchar* argv)

; __asm

printf("讀取高2g記憶體0x800f300c的內容:%x\n",h2gvalue);

getchar();

return 0;

}

呼叫門(有參)

0000ec>03< 00080000 //16進製制的3,代表3個引數
使用有引數呼叫門之前,要自己push引數

__asm

然後根據堆疊結構來獲取引數

0環**的esp為0xb0fd0da0

esp+0x0為標誌暫存器

esp+0x4到esp+0x20為8個通用暫存器

esp+0x24為返回位址

esp+0x24+0x4為呼叫者cs

esp+0x24+0x8為第三個引數

esp+0x24+0x8+0x4為第二個引數

esp+0x24+0x8+0x8為第乙個引數

構建好呼叫門

0040ec03`00081000

0: kd> eq 8003f048 0040ec03`00081000

0: kd> g

debuggee is running...

成功使用帶有引數的呼叫門,引數通過三環堆疊傳入0環**並且使用

// dym.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include dword x;

dword y;

dword z;

void __declspec(naked) getregister2()

}void printregister()

int _tmain(int argc, _tchar* argv)

printregister();

getchar();

return 0;

}

通過門呼叫時,要執行哪行**有呼叫門決定,但使用retf返回時,由堆疊中壓人的值決定,這就是說,進門時只能按指定路線走,出門時可以翻牆(只要改變堆疊裡面的值就可以想去哪去哪)

可不可以再建個門出去呢?也就是用call 當然可以了 前門進 後門出

擴充套件:進門的時候只能走大門進去,但是出去的時候,retf返回的依據就是堆疊中的值,esp+0x24,如果在堆疊裡直接更改這個值為新的函式,就會直接返回到別的地方

這麼做的結果理所當然,具體原因我也不得而知,功力尚淺,後再深究

保護模式實驗環境搭建

我的工作環境在ubuntu下,所以搭建環境比較方便 這個借鑑了 乙個作業系統的實現 我把詳細的過程記下了.修改 bochsrc floppya 1 44 freedos.img,status inserted floppyb 1 44 a.img,status inserted boot a格式化剛...

實模式與保護模式

實模式與保護模式 1.實模式,又叫實位址模式,cpu完全按照8086的實際定址方法訪問從00000h fffffh 1mb大小 的位址範圍的記憶體,在這種模式下,cpu只能做單任務執行 定址公式為 實體地址 左移4位的段位址 偏移位址,即 實體地址是由16位的段位址和16位的段內偏移位址組成的。2....

實模式與保護模式

實模式 即實位址訪問模式 它是intel公司80286及以後的x86 80386,80486和80586等 相容處理器 cpu 的一種操作模式。實模式被特殊定義為20位位址記憶體可訪問空間上,這就意味著它的容量是2的20次冪 1m 的可訪問記憶體空間 物理記憶體和bios rom 軟體可通過這些位址...