青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

每天早晨叫醒你的不是鬧鐘,而是夢想

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  62 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

我們知道,在NT/2K/XP中,操作系統利用虛擬內存管理技術來維護地址空間映像,每個進程分配一個4GB的虛擬地址空間。運行在用戶態的應用程序,不能直接訪問物理內存地址;而運行在核心態的驅動程序,能將虛擬地址空間映射為物理地址空間,從而訪問物理內存地址。

如果要在應用程序中以物理地址方式訪問內存,自然而然的辦法,是編寫一個專用的驅動程序(如大家熟悉的WinIO),里面設置一定的IOCTL碼,應用程序通過調用DeviceIoCtrol()來實現這樣的功能。

那么,有沒有一種方法,省去編寫專用驅動程序這一步,很方便地就能訪問物理內存呢?答案是肯定的。實際上,微軟早就給我們準備好了一套辦法,只是他們秘而不宣罷了。系統內建一個叫做PhysicalMemory的內核對象,可以通過系統核心文件NTDLL.DLL中的有關API進行操縱,從而實現物理內存的直接訪問。微軟聲稱這些API是用于驅動程序開發的,在VC/.NET中未提供原型說明和庫文件,然而事實證明在應用程序中調用它們是沒有問題的。我們感興趣的API主要包括:

ZwOpenSection 或 NtOpenSection - 打開內核對象
ZwMapViewOfSection 或 NtMapViewOfSection - 映射虛擬地址空間
ZwUnmapViewOfSection 或 NtUnmapViewOfSection - 取消地址空間映射
RtlInitUnicodeString - 用UNICODE串初始化UNICODE描述的結構
以下的代碼描述了如何利用NTDLL.DLL中的上述幾個API,實現對物理內存的讀取。需要指出的是,只有system擁有讀寫權限,administrator只有讀權限,而user連讀權限都沒有。這一點,是不能與專用驅動程序方法向相比的。

在VC/.NET中,由于沒有相應的原型說明和庫文件,我們用GetProcAddress()進行DLL顯式調用。前面大段的代碼,用于說明必需的類型和結構。讀取物理內存的主要步驟為:打開內核對象 → 映射虛擬地址空間 → 讀取(復制)內存 → 取消地址空間映射。

typedef LONG    NTSTATUS;
 
typedef struct _UNICODE_STRING
{
    USHORT Length;
    USHORT MaximumLength;
    PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
 
typedef enum _SECTION_INHERIT
{
    ViewShare = 1,
    ViewUnmap = 2
} SECTION_INHERIT, *PSECTION_INHERIT;
 
typedef struct _OBJECT_ATTRIBUTES
{
    ULONG Length;
    HANDLE RootDirectory;
    PUNICODE_STRING ObjectName;
    ULONG Attributes;
    PVOID SecurityDescriptor;
    PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
 
#define InitializeObjectAttributes( p, n, a, r, s ) { \
    (p)->Length = sizeof( OBJECT_ATTRIBUTES ); \
    (p)->RootDirectory = r; \
    (p)->Attributes = a; \
    (p)->ObjectName = n; \
    (p)->SecurityDescriptor = s; \
    (p)->SecurityQualityOfService = NULL; \
}
 
// Interesting functions in NTDLL
typedef NTSTATUS (WINAPI *ZwOpenSectionProc)
(
    PHANDLE SectionHandle,
    DWORD DesiredAccess,
    POBJECT_ATTRIBUTES ObjectAttributes
);
typedef NTSTATUS (WINAPI *ZwMapViewOfSectionProc)
(
    HANDLE SectionHandle,
    HANDLE ProcessHandle,
    PVOID *BaseAddress,
    ULONG ZeroBits,
    ULONG CommitSize,
    PLARGE_INTEGER SectionOffset,
    PULONG ViewSize,
    SECTION_INHERIT InheritDisposition,
    ULONG AllocationType,
    ULONG Protect
);
typedef NTSTATUS (WINAPI *ZwUnmapViewOfSectionProc)
(
    HANDLE ProcessHandle,
    PVOID BaseAddress
);
typedef VOID (WINAPI *RtlInitUnicodeStringProc)
(
    IN OUT PUNICODE_STRING DestinationString,
    IN PCWSTR SourceString
);
 
// Global variables
static HMODULE hModule = NULL;
static HANDLE hPhysicalMemory = NULL;
static ZwOpenSectionProc ZwOpenSection;
static ZwMapViewOfSectionProc ZwMapViewOfSection;
static ZwUnmapViewOfSectionProc ZwUnmapViewOfSection;
static RtlInitUnicodeStringProc RtlInitUnicodeString;
 
// initialize
BOOL InitPhysicalMemory()
{
    if (!(hModule = LoadLibrary("ntdll.dll")))
    {
        return FALSE;
    }
 
    // 以下從NTDLL獲取我們需要的幾個函數指針
    if (!(ZwOpenSection = (ZwOpenSectionProc)GetProcAddress(hModule, "ZwOpenSection")))
    {
        return FALSE;
    }
 
    if (!(ZwMapViewOfSection = (ZwMapViewOfSectionProc)GetProcAddress(hModule, "ZwMapViewOfSection")))
    {
        return FALSE;
    }
 
    if (!(ZwUnmapViewOfSection = (ZwUnmapViewOfSectionProc)GetProcAddress(hModule, "ZwUnmapViewOfSection")))
    {
        return FALSE;
    }
 
    if (!(RtlInitUnicodeString = (RtlInitUnicodeStringProc)GetProcAddress(hModule, "RtlInitUnicodeString")))
    {
        return FALSE;
    }
 
    // 以下打開內核對象
    WCHAR PhysicalMemoryName[] = L"\\Device\\PhysicalMemory";
    UNICODE_STRING PhysicalMemoryString;
    OBJECT_ATTRIBUTES attributes;
    RtlInitUnicodeString(&PhysicalMemoryString, PhysicalMemoryName);
    InitializeObjectAttributes(&attributes, &PhysicalMemoryString, 0, NULL, NULL);
    NTSTATUS status = ZwOpenSection(&hPhysicalMemory, SECTION_MAP_READ, &attributes );
 
    return (status >= 0);
}
 
// terminate -- free handles
void ExitPhysicalMemory()
{
    if (hPhysicalMemory != NULL)
    {
        CloseHandle(hPhysicalMemory);
    }
 
    if (hModule != NULL)
    {
        FreeLibrary(hModule);
    }
}
 
BOOL ReadPhysicalMemory(PVOID buffer, DWORD address, DWORD length)
{
    DWORD outlen;            // 輸出長度,根據內存分頁大小可能大于要求的長度
    PVOID vaddress;          // 映射的虛地址
    NTSTATUS status;         // NTDLL函數返回的狀態
    LARGE_INTEGER base;      // 物理內存地址
 
    vaddress = 0;
    outlen = length;
    base.QuadPart = (ULONGLONG)(address);
 
    // 映射物理內存地址到當前進程的虛地址空間
    status = ZwMapViewOfSection(hPhysicalMemory,
        (HANDLE) -1,
        (PVOID *)&vaddress,
        0,
        length,
        &base,
        &outlen,
        ViewShare,
        0,
        PAGE_READONLY);
 
    if (status < 0)
    {
        return FALSE;
    }
 
    // 當前進程的虛地址空間中,復制數據到輸出緩沖區
    memmove(buffer, vaddress, length);
 
    // 完成訪問,取消地址映射
    status = ZwUnmapViewOfSection((HANDLE)-1, (PVOID)vaddress);
 
    return (status >= 0);
}
 
// 一個測試函數,從物理地址0xfe000開始,讀取4096個字節
// 對于Award BIOS,可以從這段數據找到序列號等信息
BOOL test()
{
    UCHAR buf[4096];
 
    if (!InitPhysicalMemory())
    {
        return FALSE;
    }
 
    if (!ReadPhysicalMemory(buf, 0xfe000, 4096))
    {
        // ... 成功讀取了指定數據
        ExitPhysicalMemory();
        return FALSE;
    }
 
    ExitPhysicalMemory();
 
    return TRUE;
}

補充說明一點,由于Windows虛擬內存頁面大小默認是4KB,NtMapViewOfSection()返回的虛擬空間基址是按照4KB對齊的,返回的

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/coffeemay/archive/2006/10/28/1354465.aspx

posted on 2011-04-29 11:00 沛沛 閱讀(756) 評論(0)  編輯 收藏 引用 所屬分類: Windows
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久国产精品一区| 亚洲国产视频一区| 欧美成人亚洲成人日韩成人| 欧美一区激情| 亚洲综合三区| 午夜精品福利视频| 久久久视频精品| 欧美成人资源网| 亚洲靠逼com| 亚洲一区二区成人在线观看| 羞羞答答国产精品www一本| 欧美亚洲综合久久| 久久久久久婷| 免费看的黄色欧美网站| 亚洲经典自拍| 亚洲国产精品一区二区尤物区| 亚洲精品美女在线| 先锋影音久久| 欧美另类高清视频在线| 国产精品视频一二三| 亚洲国产精品久久久久婷婷老年| 在线视频日韩精品| 久久亚洲图片| 99精品久久| 老鸭窝亚洲一区二区三区| 国产精品久久久久久五月尺| 亚洲国产另类久久久精品极度| 亚洲综合另类| 亚洲激情在线观看视频免费| 欧美在线视频一区| 欧美日韩国产小视频| 好吊一区二区三区| 欧美在线免费视屏| 亚洲少妇一区| 欧美另类videos死尸| 亚洲国产精品久久久久| 久久久99精品免费观看不卡| 99精品免费| 欧美成人免费播放| 在线精品国精品国产尤物884a| 午夜日韩在线| 一区二区三区四区五区视频| 欧美激情a∨在线视频播放| 黄色影院成人| 久久久99免费视频| 欧美一区亚洲一区| 国产欧美日韩综合精品二区| 一区二区欧美日韩| 最新国产成人av网站网址麻豆| 久久成人羞羞网站| 国产偷国产偷精品高清尤物| 亚洲午夜精品福利| 亚洲乱码国产乱码精品精可以看| 久久久成人网| 精品96久久久久久中文字幕无| 久久成人av少妇免费| 亚洲男女自偷自拍图片另类| 国产精品激情偷乱一区二区∴| 在线综合视频| 一本大道久久a久久精二百| 欧美日韩美女在线观看| 亚洲精品久久久久久一区二区| 麻豆精品视频在线观看视频| 久久精品视频免费观看| 尤物yw午夜国产精品视频| 免费不卡在线视频| 欧美成人国产va精品日本一级| 在线观看91精品国产入口| 男人的天堂亚洲在线| 欧美电影在线观看完整版| 99在线观看免费视频精品观看| 亚洲国产精品一区二区第一页| aa成人免费视频| 亚洲欧洲一区| 欧美成人一区在线| 中文av字幕一区| 亚洲午夜电影| 国内精品免费在线观看| 欧美88av| 欧美日韩国产在线| 欧美一区二区三区在线| 欧美亚洲免费高清在线观看| 国产性天天综合网| 亚洲国产第一| 国产精一区二区三区| 另类酷文…触手系列精品集v1小说| 裸体素人女欧美日韩| 亚洲无玛一区| 欧美尤物一区| 一区二区三区在线观看视频 | 亚洲一区二区三区777| 亚洲视频导航| 在线观看一区欧美| 99国产麻豆精品| 国产日韩欧美在线视频观看| 美日韩精品视频免费看| 欧美日韩美女| 欧美成人一区二区三区片免费| 欧美日韩亚洲综合| 美女精品在线观看| 国产精品久久久久久久久久妞妞| 久久九九免费视频| 欧美成人免费网| 久久激情视频免费观看| 欧美日韩精品欧美日韩精品一| 久久久国产一区二区三区| 欧美黄色大片网站| 久久综合色一综合色88| 国产精品麻豆成人av电影艾秋| 欧美国产先锋| 黄色亚洲网站| 小处雏高清一区二区三区| 一区二区三区久久久| 久久频这里精品99香蕉| 亚洲欧美日本伦理| 欧美高清视频在线播放| 久久午夜精品一区二区| 国产精品美女久久久久aⅴ国产馆| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲一品av免费观看| 另类av导航| 免费黄网站欧美| 国产亚洲亚洲| 午夜日韩在线| 久久国产福利| 国产精品一区二区久久国产| 亚洲免费成人av| 欧美日韩精品一区二区三区| 欧美成ee人免费视频| 国产一区二区三区在线观看视频| 亚洲精品一区二区三区蜜桃久| 亚洲高清在线播放| 久久久噜噜噜久久狠狠50岁| 久久久噜噜噜久久| 极品少妇一区二区| 久久久久国内| 久久婷婷激情| 一区免费在线| 久久亚洲私人国产精品va| 美女性感视频久久久| 尤妮丝一区二区裸体视频| 久久精视频免费在线久久完整在线看 | 激情成人亚洲| 久久综合久色欧美综合狠狠| 免费看成人av| 亚洲人成人一区二区三区| 欧美成人中文字幕| 亚洲精品一区二区三区不| 亚洲午夜久久久| 国产欧美三级| 久久综合九色99| 亚洲人成毛片在线播放| 亚洲免费激情| 国产精品www网站| 香蕉成人伊视频在线观看 | 日韩亚洲欧美在线观看| 亚洲欧美中文字幕| 国产在线拍揄自揄视频不卡99| 久久久女女女女999久久| 欧美激情在线播放| 亚洲一区在线免费| 黄色成人91| 欧美日韩午夜在线| 欧美一区二区在线观看| 亚洲国产欧美日韩另类综合| 亚洲欧美一区二区精品久久久| 国产亚洲激情视频在线| 免费在线成人av| 亚洲一区久久| 亚洲电影免费| 欧美在线观看天堂一区二区三区| 国语自产偷拍精品视频偷| 欧美国产精品日韩| 午夜视频在线观看一区二区| 美女视频黄a大片欧美| 亚洲婷婷综合色高清在线| 国产综合色一区二区三区| 欧美激情一区二区久久久| 亚洲欧美日韩精品一区二区| 欧美国产精品日韩| 欧美中文字幕视频在线观看| 日韩图片一区| 在线观看视频日韩| 国产女主播一区| 欧美日韩在线免费观看| 老**午夜毛片一区二区三区| 午夜精品久久久久| 日韩一二在线观看| 欧美激情五月| 欧美有码在线视频| 亚洲在线免费视频| 一本到高清视频免费精品| 亚洲第一在线视频| 黄色亚洲精品| 国产专区综合网| 国产麻豆综合| 国产精品视频99| 国产精品久久久久毛片大屁完整版 | 亚洲电影网站| 国产亚洲欧美日韩在线一区|