ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2026/9/4 2:42:50ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
4¡¢ ³ÌÐòÇåµ¥
Çåµ¥4-1 Á˽âºÍ¼ì²â½ø³ÌµÄÐéÄâÄÚ´æ¿Õ¼ä // ¹¤³Ìvmwalker
#include
#pragma comment(lib, \
// ÒԿɶÁ·½Ê½¶ÔÓû§ÏÔʾ±£»¤µÄ¸¨Öú·½·¨¡£
// ±£»¤±ê¼Ç±íʾÔÊÐíÓ¦ÓóÌÐò¶ÔÄÚ´æ½øÐзÃÎʵÄÀàÐÍ // ÒÔ¼°²Ù×÷ÏµÍ³Ç¿ÖÆ·ÃÎʵÄÀàÐÍ
inline bool TestSet(DWORD dwTarget, DWORD dwMask) {
return ((dwTarget &dwMask) == dwMask) ; }
# define SHOWMASK(dwTarget, type) \\ if (TestSet(dwTarget, PAGE_##type) ) \\ {std :: cout << \
void ShowProtection(DWORD dwTarget) {
SHOWMASK(dwTarget, READONLY) ; SHOWMASK(dwTarget, GUARD) ; SHOWMASK(dwTarget, NOCACHE) ; SHOWMASK(dwTarget, READWRITE) ; SHOWMASK(dwTarget, WRITECOPY) ; SHOWMASK(dwTarget, EXECUTE) ;
SHOWMASK(dwTarget, EXECUTE_READ) ;
SHOWMASK(dwTarget, EXECUTE_READWRITE) ; SHOWMASK(dwTarget, EXECUTE_WRITECOPY) ; SHOWMASK(dwTarget, NOACCESS) ; }
// ±éÀúÕû¸öÐéÄâÄÚ´æ²¢¶ÔÓû§ÏÔʾÆäÊôÐԵŤ×÷³ÌÐòµÄ·½·¨ void WalkVM(HANDLE hProcess) {
// Ê×ÏÈ£¬»ñµÃϵͳÐÅÏ¢ SYSTEM_INFO si;
36
:: ZeroMemory(&si, sizeof(si) ) ; :: GetSystemInfo(&si) ;
// ·ÖÅäÒª´æ·ÅÐÅÏ¢µÄ»º³åÇø MEMORY_BASIC_INFORMATION mbi;
:: ZeroMemory(&mbi, sizeof(mbi) ) ;
// Ñ»·Õû¸öÓ¦ÓóÌÐòµØÖ·¿Õ¼ä
LPCVOID pBlock = (LPVOID) si.lpMinimumApplicationAddress; while (pBlock < si.lpMaximumApplicationAddress) {
// »ñµÃÏÂÒ»¸öÐéÄâÄÚ´æ¿éµÄÐÅÏ¢ if (:: VirtualQueryEx(
hProcess, // Ïà¹ØµÄ½ø³Ì pBlock, // ¿ªÊ¼Î»Öà &mbi, // »º³åÇø sizeof(mbi))==sizeof(mbi) ) // ´óСµÄÈ·ÈÏ {
// ¼ÆËã¿éµÄ½áβ¼°Æä´óС
LPCVOID pEnd = (PBYTE) pBlock + mbi.RegionSize; TCHAR szSize[MAX_PATH];
:: StrFormatByteSize(mbi.RegionSize, szSize, MAX_PATH) ;
// ÏÔʾ¿éµØÖ·ºÍ´óС
std :: cout.fill ('0') ; std :: cout
<< std :: hex << std :: setw(8) << (DWORD) pBlock << \
<< std :: hex << std :: setw(8) << (DWORD) pEnd << (:: strlen(szSize)==7? \ << \
// ÏÔʾ¿éµÄ״̬ switch(mbi.State) {
case MEM_COMMIT :
std :: cout << \ break;
case MEM_FREE :
std :: cout << \ break;
case MEM_RESERVE :
std :: cout << \ break; }
// ÏÔʾ±£»¤
if(mbi.Protect==0 && mbi.State!=MEM_FREE)
37
{
mbi.Protect=PAGE_READONLY; }
ShowProtection(mbi.Protect);
// ÏÔʾÀàÐÍ
switch(mbi.Type){ case MEM_IMAGE :
std :: cout << \ break;
case MEM_MAPPED:
std :: cout << \ break;
case MEM_PRIVATE :
std :: cout << \ break; }
// ¼ìÑé¿ÉÖ´ÐеÄÓ°Ïñ
TCHAR szFilename [MAX_PATH] ; if (:: GetModuleFileName (
(HMODULE) pBlock, // ʵ¼ÊÐéÄâÄÚ´æµÄÄ£¿é¾ä±ú szFilename, //Íêȫָ¶¨µÄÎļþÃû³Æ MAX_PATH)>0) //ʵ¼ÊʹÓõĻº³åÇø´óС {
// ³ýȥ·¾¶²¢ÏÔʾ
:: PathStripPath(szFilename) ;
std :: cout << \ }
std :: cout << std :: endl; // ÒÆ¶¯¿éÖ¸ÕëÒÔ»ñµÃÏÂһϸö¿é pBlock = pEnd; } } }
void ShowVirtualMemory() {
// Ê×ÏÈ£¬ÈÃÎÒÃÇ»ñµÃϵͳÐÅÏ¢ SYSTEM_INFO si;
:: ZeroMemory(&si, sizeof(si) ) ; :: GetSystemInfo(&si) ;
// ʹÓÃÍâ¿Ç¸¨Öú³ÌÐò¶ÔһЩ³ß´ç½øÐиñʽ»¯ TCHAR szPageSize[MAX_PATH];
::StrFormatByteSize(si.dwPageSize, szPageSize, MAX_PATH) ;
38
DWORD dwMemSize = (DWORD)si.lpMaximumApplicationAddress - (DWORD) si.lpMinimumApplicationAddress; TCHAR szMemSize [MAX_PATH] ;
:: StrFormatByteSize(dwMemSize, szMemSize, MAX_PATH) ;
// ½«ÄÚ´æÐÅÏ¢ÏÔʾ³öÀ´
std :: cout << \
std :: cout.fill ('0') ;
std :: cout << \ << std :: hex << std :: setw(8)
<< (DWORD) si.lpMinimumApplicationAddress << std :: endl;
std :: cout << \ << std :: hex << std :: setw(8)
<< (DWORD) si.lpMaximumApplicationAddress << std :: endl;
std :: cout << \ << szMemSize << std :: endl ; }
void main() {
//ÏÔʾÐéÄâÄÚ´æµÄ»ù±¾ÐÅÏ¢ ShowVirtualMemory();
// ±éÀúµ±Ç°½ø³ÌµÄÐéÄâÄÚ´æ
::WalkVM(::GetCurrentProcess()); }
39
ʵÑéÎå ÎļþºÍÉ豸¹ÜÀí
±³¾°ÖªÊ¶
1. Ñ¡ÔñÎļþϵͳ
Îļþϵͳ¾ö¶¨Á˲Ù×÷ϵͳÄܹ»¶Ô´ÅÅ̽øÐеĴ¦Àí¡£Windows 2000Ö§³ÖµÄÎļþϵͳÖ÷ÒªÓУº 1) Îļþ·ÖÅä±í (File Allocation Table£¬FAT) Îļþϵͳ (FAT16) 2) ±£»¤Ä£Ê½FATÎļþϵͳ (FAT32) 3) Windows NTÎļþϵͳ (NTFS)
FATÎļþϵͳÊÇÔçÆÚÎļþϵͳ֮һ£¬Ò²ÊÇMS-DOSʹÓõÄÔʼÎļþϵͳ¡£Ëü½«ÎļþÐÅÏ¢´¢´æÔÚλÓÚ¾í±ê¿ªÍ·´¦µÄÎļþ·ÖÅä±íÖУ¬²¢±£´æÁ½·ÝÎļþ·ÖÅä±í£¬ÒÔ·ÀÆäÖеÄÒ»¸öÔâµ½ÆÆ»µ£¬¼ûͼ7-1Ëùʾ¡£
FATÎļþϵͳ×î´óµÄÓŵãÊÇMS-DOS¡¢Windows 9xÉõÖÁOS/2¶¼ÄÜ·ÃÎÊFAT¾í±ê£»¶øÆä×î´óµÄÈõµãÊÇËæ×ÅFAT¾í±ê³ß´çµÄÔö³¤£¬×îСµÄ´Ø³ß´çÒ²ËæÖ®Ôö³¤¡£¶ÔÓÚ´óÓÚ512MBµÄÓ²Å̶øÑÔ£¬×îСµÄ´Ø³ß´çΪ16KB£»¶ÔÓÚ´óÓÚ2GBµÄÓ²ÅÌ£¬×îСµÄ´Ø³ß´çΪ64KB¡£Õâ¾Íµ¼Ö´ÅÅ̿ռäµÄ¼«´óÀË·Ñ£¬ÒòΪһ¸öÎļþ±ØÐëÕ¼ÓÃÕûÊý¸ö´Ø¡£Òò´Ë£¬1KBµÄÎļþÔÚ2GBµÄÓ²ÅÌÉϽ«Õ¼ÓÃ64KBµÄ´ÅÅ̿ռ䡣FATÎļþϵͳ²»Ö§³Ö³ß´ç´óÓÚ4GBµÄ¾í±ê¡£
BIOS ²ÎÊý Îļþ ·ÖÅä±í Îļþ·ÖÅä ±í¸±±¾ ÎļþºÍĿ¼ ¸ùĿ¼
ͼ5-1 FATÎļþϵͳµÄ½á¹¹
FAT32Îļþϵͳͨ¹ýÌṩ³¤ÎļþÃûµÄÖ§³ÖÀ´À©Õ¹FATÎļþϵͳ£¬²¢ÓëFAT16¼æÈÝ¡£FAT (16ºÍ32) ÎļþϵͳÊÇÖ§³Ö¿ÉÒÆ¶¯Ã½Ìå (ÀýÈçÈíÅÌ) ÉϵÄΩһµÄÎļþϵͳ¡£
Windows NTÎļþϵͳ (NTFS) °üÀ¨ÁËFATÎļþϵͳµÄËùÓй¦ÄÜ£¬Í¬Ê±ÓÖÌṩÁ˶Ը߼¶ÎļþÏµÍ³ÌØÕ÷ (ÀýÈ簲ȫģʽ¡¢Ñ¹ËõºÍ¼ÓÃÜ) µÄÖ§³Ö¡£ËüÊÇΪÔÚ´ó´ÅÅÌÉÏÓÐЧµØÍê³ÉÎļþ²Ù×÷¶øÉè¼ÆµÄ¡£ÓëFATºÍ±£»¤Ä£Ê½FATÎļþϵͳ²»Í¬£¬ËüµÄ×îС´Ø³ß´ç²»³¬¹ý4KB¡£µ«ÊÇ£¬NTFS¾í±êÖ»ÄÜΪWindows NT¡¢2000ºÍXP²Ù×÷ϵͳËù·ÃÎÊ¡£
Windows 2000ÌṩµÄÐÂÌØÕ÷ (NTFS 5.0) ʹÎļþϵͳ¸ü°²È«¡¢¸ü¿É¿¿£¬±ÈÒÔÍùµÄWindows°æ±¾¸üºÃµØÖ§³Ö·Ö²¼Ê½¼ÆËã¡£
´ËÍ⣬Windows 2000Ö§³ÖµÄÎļþϵͳ»¹ÓУº
CDFS£º¹âÅÌÎļþϵͳ (Compact Disc File System) ÓÃÓÚ¹âÅ̵ÄÎļþ´æ´¢¡£ UDF£ºÍ¨ÓôÅÅ̸ñʽ (Universal Disk Format) ÓÃÓÚDVDµÄÎļþ´æ´¢¡£
ÔÚÎļþϵͳÖУ¬FAT16¡¢FAT32ºÍNTFSÕâÈý¸öÎļþϵͳ¶Ô´ÅÅÌ×ÓϵͳµÄÐÔÄÜÓ°Ïì×î´ó¡£¶øÊÂʵÉÏ£¬Ñ¡ÔñNTFSÖ®ÍâµÄÈκÎÎļþϵͳ¶¼Ö»ÓÐÁ½¸öÀíÓÉ£¬¼´£º
1) ¿ÉË«Òýµ¼ÏµÍ³ 2) СÓÚ400MBµÄ¾í
Èç¹ûϵͳ²»ÊÇÕâÁ½ÖÖÇé¿ö£¬ÄÇôNTFS¾ÍÓ¦¸ÃÊÇËùÑ¡ÔñµÄÎļþϵͳ£¬NTFS½«Ìṩ¸üºÃµÄÐÔÄÜ¡¢¿É¿¿ÐԺͰ²È«ÐÔ¡£
2. EFS¼ÓÃÜÎļþϵͳ
EFS (Encrypting File System) ʵ¼ÊÉÏÊÇNTFSµÄÒ»¸öÌØÐÔ£¬ËüÌṩÁ˺ËÐÄÎļþ¼ÓÃܼ¼Êõ£¬Ö÷ÒªÓÃÀ´ÔÚNTFSÎļþϵͳ¾íÉÏ´æ´¢¼ÓÃÜÎļþ¡£ÔÚ¼ÓÃÜÁËÎļþ»òÎļþ¼ÐÖ®ºó£¬Ê¹ÓüÓÃÜÎļþºÍÎļþ¼ÐµÄ·½·¨ÓëʹÓÃÆäËûÈκÎÎļþºÍÎļþ¼ÐÏàͬ¡£¼´£¬¼ÓÃܶÔÓÚ¼ÓÃܸÃÎļþµÄÓû§À´ËµÊÇ͸Ã÷µÄ£¬ÕâÒâζ×Ų»±ØÔÚʹÓüÓÃÜÎļþ֮ǰ½«Æä½âÃÜ£¬¿ÉÒÔÏñƽ³£Ò»Ñù´ò¿ªºÍ¸ü¸ÄÎļþ¡£µ«ÊÇ£¬Èç¹ûÇÖÈëÕßÊÔͼ´ò¿ª¡¢¸´ÖÆ¡¢Òƶ¯»òÖØÃüÃû¼ÓÃܵÄÎļþ»òÎļþ¼Ð£¬ÄÇôËû½«½ÓÊÕµ½Ò»Ìõ¾Ü¾ø·ÃÎʵÄÏûÏ¢¡£
ÏñÉèÖÃÆäËûÈκÎÊôÐÔ (ÈçÖ»¶Á¡¢Ñ¹Ëõ»òÒþ²Ø) Ò»Ñù£¬¿ÉÒÔͨ¹ýÉèÖÃÎļþ¼ÐºÍÎļþµÄ¼ÓÃÜÊôÐÔÀ´¶ÔÎļþ¼Ð»òÎļþ¼ÓÃÜ»ò½âÃÜ¡£Èç¹û¼ÓÃÜÎļþ¼Ð£¬ÄÇôÔÚ¼ÓÃÜÎļþ¼ÐÖд´½¨µÄËùÓÐÎļþºÍ×ÓÎļþ¼Ð¶¼½«¼ÓÃÜ¡£Òò´Ë£¬ÍƼöÔÚÎļþ¼ÐÒ»¼¶ÉϼÓÃÜ¡£
ʹÓÃEFS±£»¤ÎĵµµÄ°²È«£¬¿ÉÒÔ·ÀÖ¹ÇÖÈëÕß»ñµÃ¶Ô´æ´¢µÄÃô¸ÐÊý¾ÝµÄδ¾ÊÚȨµÄÎïÀí·ÃÎÊ¡£
EFS´øÀ´µÄ¸½¼Ó°²È«ÐÔÊÇÒÔÐÔÄÜΪ´ú¼ÛµÄ¡£µ±²Ù×÷ϵͳ¶ÔËù·ÃÎʵļÓÃÜÎļþ½øÐмÓÃÜ»ò½âÃÜʱ£¬Îļþ´«Ê佫Ôö¼ÓÒ»µãÑÓ³Ù¡£
Ó°ÏìϵͳÐÔÄܵij̶Ƚ«¾ßÌåÈ¡¾öÓÚÖ´ÐмÓÃÜ»ò½âÃܲÙ×÷µÄϵͳµÄ´¦ÀíÄÜÁ¦¡£¶ÔÓÚÔÚ±¾µØÇý¶¯Æ÷Éϰüº¬¼ÓÃÜÎļþµÄÏÖ´ú¹¤×÷Õ¾À´Ëµ£¬ÒòΪÕâЩϵͳͨ³£²»ÊÜ´¦ÀíÆ÷ÏÞÖÆ£¬ËùÒÔÓ°Ïìͨ³£¿ÉÒÔºöÂÔ²»¼Æ¡£ÕâÖÖÓ°Ïì¶Ô´¦ÀíÆ÷ÉϵĶîÍâ
40