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

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

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

常用鏈接

留言簿(1)

我參與的團(tuán)隊(duì)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

我們知道,在NT/2K/XP中,操作系統(tǒng)利用虛擬內(nèi)存管理技術(shù)來維護(hù)地址空間映像,每個(gè)進(jìn)程分配一個(gè)4GB的虛擬地址空間。運(yùn)行在用戶態(tài)的應(yīng)用程序,不能直接訪問物理內(nèi)存地址;而運(yùn)行在核心態(tài)的驅(qū)動(dòng)程序,能將虛擬地址空間映射為物理地址空間,從而訪問物理內(nèi)存地址。

如果要在應(yīng)用程序中以物理地址方式訪問內(nèi)存,自然而然的辦法,是編寫一個(gè)專用的驅(qū)動(dòng)程序(如大家熟悉的WinIO),里面設(shè)置一定的IOCTL碼,應(yīng)用程序通過調(diào)用DeviceIoCtrol()來實(shí)現(xiàn)這樣的功能。

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

ZwOpenSection 或 NtOpenSection - 打開內(nèi)核對(duì)象
ZwMapViewOfSection 或 NtMapViewOfSection - 映射虛擬地址空間
ZwUnmapViewOfSection 或 NtUnmapViewOfSection - 取消地址空間映射
RtlInitUnicodeString - 用UNICODE串初始化UNICODE描述的結(jié)構(gòu)
以下的代碼描述了如何利用NTDLL.DLL中的上述幾個(gè)API,實(shí)現(xiàn)對(duì)物理內(nèi)存的讀取。需要指出的是,只有system擁有讀寫權(quán)限,administrator只有讀權(quán)限,而user連讀權(quán)限都沒有。這一點(diǎn),是不能與專用驅(qū)動(dòng)程序方法向相比的。

在VC/.NET中,由于沒有相應(yīng)的原型說明和庫文件,我們用GetProcAddress()進(jìn)行DLL顯式調(diào)用。前面大段的代碼,用于說明必需的類型和結(jié)構(gòu)。讀取物理內(nèi)存的主要步驟為:打開內(nèi)核對(duì)象 → 映射虛擬地址空間 → 讀取(復(fù)制)內(nèi)存 → 取消地址空間映射。

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獲取我們需要的幾個(gè)函數(shù)指針
    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;
    }
 
    // 以下打開內(nèi)核對(duì)象
    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;            // 輸出長度,根據(jù)內(nèi)存分頁大小可能大于要求的長度
    PVOID vaddress;          // 映射的虛地址
    NTSTATUS status;         // NTDLL函數(shù)返回的狀態(tài)
    LARGE_INTEGER base;      // 物理內(nèi)存地址
 
    vaddress = 0;
    outlen = length;
    base.QuadPart = (ULONGLONG)(address);
 
    // 映射物理內(nèi)存地址到當(dāng)前進(jìn)程的虛地址空間
    status = ZwMapViewOfSection(hPhysicalMemory,
        (HANDLE) -1,
        (PVOID *)&vaddress,
        0,
        length,
        &base,
        &outlen,
        ViewShare,
        0,
        PAGE_READONLY);
 
    if (status < 0)
    {
        return FALSE;
    }
 
    // 當(dāng)前進(jìn)程的虛地址空間中,復(fù)制數(shù)據(jù)到輸出緩沖區(qū)
    memmove(buffer, vaddress, length);
 
    // 完成訪問,取消地址映射
    status = ZwUnmapViewOfSection((HANDLE)-1, (PVOID)vaddress);
 
    return (status >= 0);
}
 
// 一個(gè)測試函數(shù),從物理地址0xfe000開始,讀取4096個(gè)字節(jié)
// 對(duì)于Award BIOS,可以從這段數(shù)據(jù)找到序列號(hào)等信息
BOOL test()
{
    UCHAR buf[4096];
 
    if (!InitPhysicalMemory())
    {
        return FALSE;
    }
 
    if (!ReadPhysicalMemory(buf, 0xfe000, 4096))
    {
        // ... 成功讀取了指定數(shù)據(jù)
        ExitPhysicalMemory();
        return FALSE;
    }
 
    ExitPhysicalMemory();
 
    return TRUE;
}

補(bǔ)充說明一點(diǎn),由于Windows虛擬內(nèi)存頁面大小默認(rèn)是4KB,NtMapViewOfSection()返回的虛擬空間基址是按照4KB對(duì)齊的,返回的

本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/coffeemay/archive/2006/10/28/1354465.aspx

posted on 2011-04-29 11:00 沛沛 閱讀(771) 評(píng)論(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>
            久久精品一区二区国产| 国产视频亚洲| 久久综合亚洲社区| 欧美色区777第一页| 免费成人在线视频网站| 国产精品久久久一区二区| 亚洲电影网站| 韩国亚洲精品| 亚洲在线1234| 亚洲自拍啪啪| 欧美日韩激情网| 亚洲国产精品一区| 伊人久久综合97精品| 亚洲综合色丁香婷婷六月图片| 亚洲免费大片| 欧美粗暴jizz性欧美20| 久久婷婷丁香| 国产偷国产偷亚洲高清97cao | 99视频一区| 免费精品视频| 欧美福利一区二区三区| 黄色一区二区三区| 久久久精品国产99久久精品芒果| 欧美影院在线| 国产精品一区二区三区四区五区| 中文欧美字幕免费| 亚洲视频成人| 国产精品国产亚洲精品看不卡15| 亚洲全部视频| 国产精品99久久99久久久二8| 欧美久久视频| 亚洲最新色图| 欧美一级二级三级蜜桃| 国产乱码精品一区二区三| 午夜精品在线看| 久久一区中文字幕| 亚洲二区在线视频| 欧美女激情福利| 99精品久久久| 性欧美超级视频| 国产一区二区三区丝袜 | 亚洲在线日韩| 久久精品在线播放| …久久精品99久久香蕉国产| 美国成人毛片| 日韩视频三区| 欧美一区二区三区免费在线看| 国产毛片精品视频| 久久免费高清| 亚洲精品之草原avav久久| 亚洲一区二区网站| 国内欧美视频一区二区| 美女久久网站| 亚洲香蕉伊综合在人在线视看| 欧美中文字幕视频在线观看| 在线 亚洲欧美在线综合一区| 欧美风情在线观看| 亚洲欧美美女| 亚洲成在人线av| 欧美一区国产在线| 亚洲黄网站黄| 国产精品网红福利| 美女国产一区| 亚洲性线免费观看视频成熟| 美女尤物久久精品| 亚洲少妇诱惑| 亚洲国产精品一区二区第一页| 欧美三级电影一区| 久久精品亚洲一区二区三区浴池 | 亚洲国产精品一区| 久久成人精品无人区| 亚洲激情女人| 国产欧美一区在线| 欧美精品在欧美一区二区少妇| 欧美一区二区三区久久精品| 亚洲啪啪91| 麻豆91精品91久久久的内涵| 亚洲一区二区成人在线观看| 亚洲国产精品专区久久| 国产精品老女人精品视频| 欧美阿v一级看视频| 欧美一区二区久久久| 亚洲日本中文| 欧美大秀在线观看 | 亚洲专区在线| 91久久国产精品91久久性色| 国产精品亚洲第一区在线暖暖韩国| 美国三级日本三级久久99| 午夜精品一区二区三区在线视| 日韩午夜免费| 亚洲国产精品v| 猫咪成人在线观看| 欧美在线视频二区| 午夜免费电影一区在线观看| 一区二区三区四区国产| 亚洲韩日在线| 亚洲高清毛片| 在线播放不卡| 精品999网站| 狠狠久久婷婷| 国语自产精品视频在线看| 国产免费亚洲高清| 国产美女精品一区二区三区| 欧美丝袜一区二区| 欧美视频不卡中文| 欧美人与禽性xxxxx杂性| 欧美激情视频一区二区三区免费| 久久久久久穴| 久久久久久久久久久久久久一区| 欧美一级大片在线观看| 亚洲欧美第一页| 亚洲中字黄色| 性久久久久久久久| 久久精品av麻豆的观看方式| 久久精品国产精品亚洲| 久久久久中文| 可以免费看不卡的av网站| 久久在线免费观看| 欧美成人免费在线视频| 欧美精品午夜| 国产精品分类| 国产丝袜美腿一区二区三区| 国内精品久久久久伊人av| 狠狠色狠狠色综合人人| 亚洲国产精品999| 99精品国产一区二区青青牛奶| 亚洲精品一区二区在线| 中日韩高清电影网| 午夜精品在线| 美国十次成人| 91久久在线播放| 亚洲图色在线| 欧美专区福利在线| 欧美黄色小视频| 国产精品久久久久国产a级| 国产精品人人爽人人做我的可爱| 国产亚洲精品高潮| 亚洲国产精品一区二区www在线 | 亚洲视频中文字幕| 亚洲女女女同性video| 久久久久在线| 欧美性猛交xxxx乱大交退制版| 国产精品萝li| 亚洲国产视频一区二区| 一区二区三区久久精品| 欧美一区二区三区四区在线观看地址 | 麻豆九一精品爱看视频在线观看免费| 免费成人av在线| 日韩午夜av在线| 欧美在线91| 欧美人与禽性xxxxx杂性| 国产日本欧美一区二区三区| 亚洲国产欧美在线| 性欧美暴力猛交69hd| 欧美国产欧美综合| 中国女人久久久| 久久综合一区二区| 国产精品视频最多的网站| 亚洲国产日韩欧美在线99| 亚洲欧美一区二区激情| 欧美激情亚洲| 亚洲欧美日韩在线观看a三区| 美日韩丰满少妇在线观看| 国产精品看片资源| 亚洲精品美女在线观看| 久久久久免费观看| 中文av字幕一区| 欧美成人自拍| 激情欧美一区二区三区| 午夜亚洲伦理| 亚洲人成小说网站色在线 | 一本色道88久久加勒比精品| 久久综合网色—综合色88| 国产精品热久久久久夜色精品三区| 亚洲成人在线观看视频| 欧美伊人久久久久久久久影院| 亚洲高清123| 久久黄色小说| 国产欧美日韩一区二区三区| 一区二区三区视频免费在线观看| 玖玖玖国产精品| 欧美伊人久久久久久午夜久久久久 | 欧美中文在线观看| 99日韩精品| 欧美激情视频一区二区三区免费| 国产一区高清视频| 欧美一区二区三区的| 一区二区欧美精品| 欧美视频在线观看免费| 亚洲精品一区二区在线观看| 男人插女人欧美| 久久精品亚洲国产奇米99| 国产日韩欧美一区在线 | 亚洲麻豆视频| 欧美另类视频在线| 亚洲巨乳在线| 亚洲精品久久久久久一区二区| 女主播福利一区| 最新中文字幕亚洲| 亚洲电影视频在线|