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

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

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

常用鏈接

留言簿(1)

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

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

我們知道,在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ū)動程序,能將虛擬地址空間映射為物理地址空間,從而訪問物理內(nèi)存地址。

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

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

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

在VC/.NET中,由于沒有相應(yīng)的原型說明和庫文件,我們用GetProcAddress()進(jìn)行DLL顯式調(diào)用。前面大段的代碼,用于說明必需的類型和結(jié)構(gòu)。讀取物理內(nèi)存的主要步驟為:打開內(nèi)核對象 → 映射虛擬地址空間 → 讀取(復(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)核對象
    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é)
// 對于Award BIOS,可以從這段數(shù)據(jù)找到序列號等信息
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對齊的,返回的

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

posted on 2011-04-29 11:00 沛沛 閱讀(771) 評論(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>
            1024国产精品| 国产亚洲一区二区精品| 亚洲一区二区三区四区中文 | 亚洲国内欧美| 亚洲黄页一区| 免费视频一区| av成人免费在线| 亚洲欧美电影院| 伊人成人在线视频| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲欧美日韩在线观看a三区| 亚洲欧美视频一区二区三区| 国产中文一区| 91久久在线| 国产精品系列在线| 麻豆国产精品一区二区三区 | 亚洲精品影院| 亚洲一区二区三区午夜| 激情五月综合色婷婷一区二区| 亚洲电影免费观看高清完整版在线| 欧美日韩午夜激情| 久久久久一区二区| 欧美精品麻豆| 欧美在线视频二区| 欧美风情在线观看| 欧美中文字幕不卡| 欧美成人亚洲成人| 欧美一区二区视频观看视频| 免费一区视频| 欧美一区二区女人| 欧美成年网站| 欧美在线视频导航| 欧美护士18xxxxhd| 久久久久久9999| 欧美高清在线观看| 久久久国产精品亚洲一区| 欧美精品v日韩精品v国产精品| 欧美日韩成人免费| 伊人精品在线| 亚洲免费观看高清完整版在线观看熊 | 国产一区二区在线免费观看| 亚洲国产欧美另类丝袜| 国产欧美精品xxxx另类| 亚洲国产婷婷综合在线精品 | 亚洲少妇在线| 久久精品99久久香蕉国产色戒| 一本色道久久综合精品竹菊 | 欧美成人免费网站| 久久成人18免费观看| 欧美精品日韩| 狂野欧美激情性xxxx欧美| 国产精品狠色婷| 亚洲国产精品va在线看黑人 | 国产精品亚洲欧美| 亚洲成人资源网| 国产一区二区三区在线观看免费视频 | 欧美电影免费网站| 国产欧美日韩在线播放| 日韩视频免费| 尤物在线精品| 亚洲欧美日韩精品久久亚洲区 | 欧美日韩p片| 欧美高清视频一区二区| 国产九九精品| 99精品视频免费全部在线| 亚洲精品1234| 久久九九热免费视频| 亚洲一区二区免费视频| 欧美福利一区二区三区| 久久―日本道色综合久久| 国产精品亚洲一区二区三区在线| 亚洲精品一二三| 91久久亚洲| 久久影院午夜论| 欧美一区二区日韩| 一本一本久久a久久精品综合妖精| 久久精品成人一区二区三区| 午夜精品久久久久久| 欧美人与性动交α欧美精品济南到| 暖暖成人免费视频| 国产亚洲成av人在线观看导航| 中文精品视频一区二区在线观看| 99精品福利视频| 免费黄网站欧美| 狼人社综合社区| 韩国一区二区三区在线观看| 午夜精品亚洲一区二区三区嫩草| 午夜电影亚洲| 欧美午夜电影在线| av成人国产| 亚洲特级毛片| 欧美日韩在线精品| 亚洲精品久久久久久久久| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美影音先锋| 欧美亚洲三级| 国产麻豆日韩| 亚洲一区国产一区| 午夜老司机精品| 国产精品一国产精品k频道56| 亚洲一区视频| 香蕉久久夜色精品| 国产区精品在线观看| 欧美亚洲网站| 久久婷婷国产综合精品青草| 好吊日精品视频| 久久婷婷一区| 欧美成人有码| 亚洲国产99| 欧美国产日韩xxxxx| 亚洲国产精品久久91精品| 日韩特黄影片| 欧美人成免费网站| 在线一区二区三区四区五区| 午夜久久福利| 国产一区二区三区的电影| 久久精品一二三区| 久久久久国色av免费看影院 | 久久久美女艺术照精彩视频福利播放| 国产一区99| 久久深夜福利| 亚洲黄色尤物视频| 99re66热这里只有精品4| 欧美日韩一区二区国产| 亚洲一区二区三区在线视频 | 国产一区二区看久久| 久久久www免费人成黑人精品| 欧美中文字幕不卡| 国内免费精品永久在线视频| 久久综合久久综合这里只有精品| 亚洲国产另类 国产精品国产免费| 宅男精品视频| 国产伦精品免费视频 | 久久综合久久久| 欧美电影免费观看高清完整版| 欧美中文日韩| 亚洲主播在线观看| 国产综合香蕉五月婷在线| 久久久久久久久岛国免费| 亚洲国产精品久久91精品| 亚洲综合国产| 黄色精品网站| 久久中文久久字幕| 日韩视频精品| 久久久av网站| 亚洲精品视频在线播放| 欧美视频一区二区三区…| 欧美一区二区三区免费在线看| 男女av一区三区二区色多| 亚洲深夜影院| 国内外成人免费激情在线视频| 免费毛片一区二区三区久久久| 一区二区久久| 久久亚洲色图| 夜久久久久久| 国产一区二区三区日韩欧美| 麻豆精品一区二区av白丝在线| 中文亚洲欧美| 久久精品国产亚洲aⅴ| 亚洲乱码国产乱码精品精天堂 | 免费日韩成人| 亚洲一区二区精品在线观看| 国产一区99| 欧美日韩精品| 久久久xxx| 亚洲美女毛片| 免费久久久一本精品久久区| 亚洲午夜av在线| 在线国产精品播放| 国产精品日韩一区| 欧美成人高清| 亚洲欧美日韩精品久久久久| 亚洲黄色三级| 久久久久久成人| 99精品欧美一区二区三区| 国产欧美综合在线| 欧美区视频在线观看| 久久久久久一区二区三区| 免费不卡亚洲欧美| 亚洲免费av观看| 一区二区三区在线视频播放| 欧美午夜片欧美片在线观看| 欧美一区综合| 免费成人美女女| 欧美中文字幕视频| 日韩午夜激情av| 精品成人一区| 国产精品一区二区三区四区五区| 欧美国产日韩一区二区| 亚洲自拍啪啪| 亚洲免费精品| 亚洲国产精品高清久久久| 久久福利电影| 亚洲欧美www| 亚洲娇小video精品| 精品电影一区| 国产亚洲精品bv在线观看| 欧美性天天影院| 欧美成人资源| 欧美影院在线|