我电脑物理内存写的是2G,但是系统休眠文件却只有1.48G,这是为什么?

作者&投稿:绽肾 (若有异议请与网页底部的电邮联系)
电脑物理内存2G,可是是实际可用物理内存只有1G?~

不是的,360的一些后台产品与系统的一些应用都在后台运行着,是看不见的!但是除去系统应用与360后台应用差不多一个G左右!

计算机属性里显示是3.9G可用是指你笔记本总共可用的3.9G内存
但是系统信息里面的可用物理内存却只有1.9G,说的是你现在的笔记本只剩下1.9G内存可用,已经用掉了2G

更全面的回答 求采纳

发这份笔记时,比较惶恐,因为连我自己都觉得,这个东西没用。但是事实上,在很多偏门或机密的领域里,它仍然是非常有价值的。鉴于国内这方面资料比较少,所以写了一篇笔记,与大家共享。

Analyze Hibernation File

Introduction
What’s Hibernation File?
Hibernation File也就是系统的休眠文件Hiberfil.sys,位于系统卷的根目录下。windows在系统休眠时,将物理内存中的数据(包括系统运行时的状态数据)dump到Hiberfil.sys,并生成一个有效的文件头。下次系统开机的时候,利用hiberfil.sys文件中的数据恢复系统。

How to generate a valid Hiberfil.sys?
从用户的角度来说,系统停机时,按下休眠按钮,则会自动生成一个有效的Hiberfil.sys。
从电源管理器的角度来说,只有当系统电源状态从S0àS4的时候,才会生成一个有效的休眠文件。
注:当系统正常运行时,电源状态为S0;完全关闭时,电源状态S5;休眠状态时,电源状态S4,此时只有电源电路和唤醒电路才有点滴电流;中间的几个状态S1,S2,S3,都是不同程度的睡眠状态。
从S4àS0的过程,也就是利用Hiberfil.sys恢复系统的过程。

Valuation of Hibernation File
It is quick and easy
恢复系统比重启系统要快。不解释(除特殊情况)。
A new method to dump physical memory
利用hibernation技术dump系统物理内存中的数据。这些数据包括处理器状态,当前EIP, IDT table, GDT table, SSDT table,当前状态的可执行代码和数据…
利用这些数据可以分析系统状态。

Leak Information?
Yes。正常情况下,利用Hiberfil.sys恢复系统,虽然恢复后会清除掉Hiberfil的Header数据(one page),使之无效,但是Header之后的数据还会保留。利用外部工具,构造一个Header,就可以读取该Hiberfil.sys的所有信息了。

Defensive uses
kernel –land malwares detection
分析hibernation file, 可以通过检查SSDT, IDT, GDT表的完整性来判断系统是否被修改。虽然在内核层有了更为轻量级的方法去检测系统关键表的完整性,但是存在anti对抗问题,hibernation提供了一种终极检测方式。
根据hibernation恢复原理,不在hibernation file中的代码,将不会被恢复执行。基于此,可以对抗SMM rootkit。(不做介绍)
Offensive uses
可以获取敏感数据,如:password, keys.
修改hibernation file, 提高某个进程的执行权限;绕过系统登录密码…

Hibernation file internals
Headline of hibernation process
当磁盘被挂起时(S0àS4),Windows内核(ntoskrnl.exe)执行体创建一个hibernation file,并将物理内存中的数据用LZ77算法压缩后,写入文件。
系统恢复时(S4àS0),OSLoader.exe读取hibernation file,加载解压后的数据到物理内存中,使系统以一种快捷方式恢复到休眠时的状态。
注:恢复过程的分析,见appendix 1。

Hibernation file structure
先直观的看下文件结构图:(左侧,域列表,是文件结构的组成域)

format.jpg下载此附件需要消耗2Kx,下载中会自动扣除。

File Header
位于休眠文件的第一页(0x1000 bytes)数据空间。该结构PO_MEMORY_IMAGE由内核调试符号导出。结构中主要包含了休眠文件的创建日期,版本号,校验和,有效标志,物理页数量等信息。
注:用休眠文件恢复系统时,只有第一页数据被清0,也就是file header,其他数据保留不变。

FreeMap Page
包含一个ulong数组,保存了空闲内存页的映射信息。

Processor State
处理器状态,由内核函数KiSaveProcessorControlState保存。包括控制寄存器CRX,GDT, IDT, EIP…
结构定义如下:
typedef struct _KPROCESSOR_STATE32
{
CONTEXT ContextFrame; //
KSPECIAL_REGISTERS SpecialRegisters; //
} KPROCESSOR_STATE32, *PKPROCESSOR_STATE32;

注:从vista版本以后,字段2和3的位置就交换过来了。

Memory Range Array
存储物理内存页的压缩数据。
typedef struct _MEMORY_RANGE_ARRAY
{
MEMORY_RANGE_ARRAY_LINK MemArrayLink;
MEMORY_RANGE_ARRAY_RANGE MemArrayRange[MAX_ARRAY_ENTRY];
} MEMORY_RANGE_ARRAY, *PMEMORY_RANGE_ARRAY;

字段MemArrayLink作为链接表指针,将多个这样的结构链接维护起来;
字段MemArrayRange指向数据区,最多包含255个入口。这也就是为什么要存在一个指向下一个MEMORY_RANGE_ARRAY结构的指针MemArrayLink,因为当休眠文件很大的时候,一个MEMORY_RANGE_ARRAY存储不了所有数据。

结构MEMORY_RANGE_ARRAY_RANGE定义如下:

typedef struct _MEMORY_RANGE_ARRAY_RANGE
{
ULONG PageNo; // ???
ULONG StartPage; // Block start (physical address)
ULONG EndPage; // Block stop (physical address)
ULONG CheckSum; // Always zero, but used under Windows 2000.
} MEMORY_RANGE_ARRAY_RANGE, *PMEMORY_RANGE_ARRAY_RANGE;
指定了页开始地址和页结束地址,在这些地址范围内的数据都是经过压缩算法来压缩后存储的,这个结构所对应的整块数据就是一个压缩块PageCompressedData,压缩快的起始部分是一个结构体,如下:
struct IMAGE_XPRESS_HEADER
{
CHAR Signature[8] = 81h, 81h, "xpress";
BYTE UncompressedPages = 15;
UINT32 CompressedSize;
BYTE Reserved[19] = 0;
};
也就是说,压缩块的标识是:\x81\x81xpress;之后就是压缩数据了。

注:每个压缩快所对应的解压后的块大小为64KB(0x10 pages)。
compression algorithm
This algorithm has been publicly documented since recent Microsoft Interoperability initiative (February 2008)
压缩块算法使用LZ77+DIRECT2;
LZ77用于压缩内存数据,DIRECT2对字节的位置进行编码和解码。

Project and Application
Sandman Project
该开源项目的主要特点是定义了休眠文件的文件结构,并给出了解析休眠文件的代码。
不过,这份代码中存在问题。在虚拟地址转换成物理地址时,作者将页面映射的PAE部分解析错了。
如果开启了PAE页面映射机制(实事上,几乎所有多核计算机都开启了PAE),那么MMU将会用三级表来实现地址转译,分别是:页目录指针表,页目录索引,页表索引,页字节偏移,其中前三项都是8字节长,而作者解析时将其作为4字节处理了。
具体改法:在mm.c文件à MmGetPhysicalAddress函数中,将处理PAE的偏移,改为8;

注:4KB分页时,地址转译只需二级表,页目录索引,页表索引,每项4字节长。

Tiamo NTLDR Project
作者Tiamo基本实现了一个完整的NTLDR,可以替换系统NTLDR,主要包括了利用休眠文件hiberfil.sys恢复系统的C++实现。不过我没有测试过可行性。
项目包括两部分:
16位实模式代码;
32位模式代码,即OsLoader.exe,是windows真正的32位入口程序。作者这部分代码参考了NT4代码,但是NT4代码中并没有实现恢复hiberfil的代码,估计作者是通过逆向写的。

Useful application
利用Sandman,开发了若干免费小工具,一般开发人员用不上。
可访问:http://www.moonsols.com

解析hiberfil.sys,获取系统版本号,休眠文件的创建时间,从休眠文件dump物理内存内容(见附件)。

ANTI SMM Rootkit应用;

其他方面,取证分析,以及未知的应用…

APPENDIX
简述用休眠文件恢复系统的过程

开机过程中,BIOS代码首先获得控制权,执行完硬件检测后跳转到MBR,MBR代码部分主要读取分区表信息,然后将控制权交给系统卷的引导扇区DBR,DBR执行一些初始化后,读取文件NTLDR,NTLDR中的16位模式代码开始执行,同样进行一些必要的初始化工作,然后将处理器切换到32位保护模式。
控制权交给osloader.exe, 此时处理器虽然已经工作在保护模式下,但是它的虚拟地址转译机制尚未开启,所以,处理器仍然直接使用物理地址。
Osloader 在入口函数NtProcessStartup里,调用全局初始化内存函数:
DoGlobalInitialization()-> InitializeMemorySubsystem() ->
实现的功能是: 用一个内存描述符数组把每一段内存的大小和用途记录下来,然后构造页目录和页表,使得16M一下的内存能够通过页面映射(paging)机制进行访问,在loader阶段是不使用高于16M以上的物理内存的,在设置好页目录寄存器,并打开页面映射机制。
之后,osloader 继续执行其他的初始化工作,包括IO设备的初始化。
分配PCR的页面-> 分配TSS的页面-> 初始化内存描述符-> 初始化IO系统BlIoInitialize。

接下来判断控制启动的方式。
函数:BlStartup(BootPartitionName);
过程大概这样:打开启动分区,以便加载驱动;初始化屏幕; 读取hiberfil.sys,如果是一个有效的休眠文件,则系统以hiberfil.sys方式恢复系统。如果不是,打开boot.ini文件,并显示一个引导选择菜单。如果boot.ini只包含一个引导选项,那么,此菜单不显示,而是立即应用该引导选项。

如果检测到hiberfil.sys有效,osloader将控制权交给一段能恢复系统的代码。大致流程如下:
打开hiberfil,不成功则返回-->成功则继续恢复 --> 分配页面缓冲-->解析头文件,判断image signature,有三种标志,分别处理,如果判断标志出错,就直接返回-->进行一些其他的校验工作->接下来分配PTE,读取内存映射页面的数据-> 分配压缩数据的缓冲->解压缩数据到物理内存—> 再经过一系列的恢复工作-> 读取处理器的状态......

通过NT4代码,分析NTLDR的工作流
boot/bootcode/mbr/i386/x86mboot.asm ->
这里执行MBR引导代码,读取分区表,获得引导分区,将引导分区的第一个扇区,即DBR读入到内存,然后将EIP调到DBR引导代码,执行。
boot/bootcode/ntfs/i386/ntfsboot.asm ->
该函数主要用来读取卷上的数据,主要是将ntldr读入到内存,然后执行。(卷上的数据是根据文件系统格式存储和管理的,所以访问卷上的文件内容,需借助文件系统代码去读。)到目前为止,程序还是在实模式下,即16-bit模式。
boot/startup/i386/su.asm ->
直接跳到 JMP RealStart,准备stack和segment,然后去执行suMain函数,该函数位于:
boot/startup/i386/main.c ->
来到了C代码。这里实现一些初始化,包括video ,memory,foppy等。之后在回到su.asm,进行模式切换,至32-bit;
boot/lib/i386/entry.c ->
入口函数NtProcessStartup,这里,进行一些初始化,调用DoGlobalInitialization 初始化16M以下的内存,分页机制开始启动。又进行了一些system memory和I/O system的初始化工作后,理解调用BlStartup函数,也就是说ntldr在BlStartup函数中执行完毕后,就返回了。该函数在:
boot/bldr/i386/initx86.c ->
这个函数打开boot.ini,获取启动选项,继续调用osloader.c;
\boot\bldr\osloader.c

注:NT4不支持hiberfil休眠机制,在XP以后的系统中,恢复hiberfil的过程在 BlStartup过程中被调用。

通过逆向分析NTLDR,分析hibernation file
这里只说下分析方法,省去细节。
恢复Hiberfil的工作是由osloader完成的,所以,通过逆向分析osloader.exe,可以了解恢复hiberfil的一些具体细节。

NTLDR位于系统盘根目录下,是一个具有隐藏只读属性的binary系统文件,不能直接使用IDA进行分析。
NTLDR由两个image组成,一个是16-bit下的binary image,就像是一个.com 文件;另一个是32-bit 下的PE file image,主要包含加载任务,这个PE image对应的文件就是osloader.exe。

提取osloader.exe的方法
用一个16进制编辑器(e.g. WinHex),打开NTLDR, 查找'MZ'或'PE'标志,然后从'MZ'标志开始,将剩下的hex data全部复制并粘贴到另外一个空文件,重命名为:osloader.exe。用winhex的话,会很简单(找到'MZ'标志,ALT+1,然后拖到文件末尾,ALT+2,这样就选中的从'MZ'到文件末尾的区块,然后右键'edit'->'copy block'->'into a new file')。
提取出osloader之后,用IDA加载,加载的时候会提示从MS官方下载'未公开'的符号,选择YES或NO,等待分析,可能要花2分钟左右时间。

分析osloader.exe文件
常理来说,osloader应该是一个native app,其入口函数是:NtProcessStartup。但是IDA分析后,入口函数为DriverEntry,当成驱动程序来分析了。但是,事实上,native app本质上就是一个驱动。
接下来就是利用各种资源,找自己关注的代码区分析了。

因为休眠功能向硬盘上写入文件的时候采取了压缩技术,所以不一定会真正写入和物理内存大小一样的文件,但休眠文件确实会占据和物理内存大小一样的硬盘空间

物理内存是指内存条是2G的吗,那要看你系统休眠时打开了多少文件,文件多就占用内存大,如过超过2G,就得压缩存在硬盘里的虚拟内存空间里,

你显示的是占据的磁盘空间,不一定是只文件大小!!因为休眠功能向硬盘上写入文件的时候采取了压缩技术,所以不一定会真正写入和物理内存大小一样的文件,但休眠文件确实会占据和物理内存大小一样的硬盘空间


电脑物理内存指的是什么?
物理内存指通过物理内存条而获得的内存空间,而虚拟内存则是指将硬盘的一块区域划分来作为内存。内存主要作用是在计算机运行时为操作系统和各种程序提供临时储存。常见的物理内存规格有256M、512M、1G、2G等,现如今随着计算机硬件的发展,已经出现4G、8G甚至更高容量的内存规格。当物理内存不足时,可以用...

物理内存指的是什么
物理内存指的就是你电脑里插的内存条,而虚拟内存则是用硬盘的一部分来实现内存的功能,具体设置数值,下面是有写的最小值,一般建议用推荐值就可以了。

电脑物理内存是指什么
电脑物理内存是指由于安装内存条而获得的临时储存空间。物理内存主要作用是在计算机运行时为操作系统和各种程序提供临时储存。常见的物理内存规格有256M、512M、1G、2G等,现如今随着计算机硬件的发展,已经出现4G、8G甚至更高容量的内存规格。物理内存是计算机上的最重要的资源之一。Windows的内存管理器负责给...

电脑内存的英文缩写是什么?
电脑内存的英文缩写是RAM、ROM 等。内存一般采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。只不过因为RAM是其中最重要的存储器。(synchronous)SDRAM同步动态随机存取存储器:SDRAM为168脚,这是目前PENTIUM及以上机型使用的内存。SDRAM将CPU与RAM通过一个相同的时钟...

物理内存指的是什么?
内存有两种,安装内存(就是物理内存)和虚拟内存。安装内存是你买电脑的时候配的内存大小,可以通过控制面板--系统 里面看安装内存大小;虚拟内存是指系统从硬盘中划分一部分空间作为虚拟成内存使用,虚拟内存是和安装内存协调使用,系统自动将运行中的程序不需要经常读写的部分放入虚拟内存,一旦安装内存用尽...

电脑的物理内存是什么,
物理内存(Physicalmemory)是相对于逻辑内存而言的。物理内存指通过物理内存条而获得的内存空间,而逻辑内存则是指将硬盘的一块区域划分来作为内存。内存主要作用是在 计算机运行时为操作系统和各种程序提供临时储存。常见的物理内存规格有256M、512M、1G、2G等,现如今随着计算机硬件的发展,已经出现4G、8G...

电脑里的内存使用什么表示的??
1024 KB = 1 MB ; 1024 MB = 1 GB 内存主要是用来临时存贮数据 比如电脑中调用的数据,就需要从硬盘读出,发给内存,然后内存再发给CPU 也可以理解成是内存和CPU之间的缓存, 因为CPU中的ALU(虚拟寄存器)速度要比硬盘速度快的多. 所以需要内存用来给CPU和硬盘之间进行沟通 当然光盘\/软盘等所有外存贮...

物理内存是什么?
一、物理内存(Physical memory)是相对于虚拟内存而言的。物理内存指通过物理内存条而获得的内存空间,常见的物理内存规格有256M、512M、1G、2G等,现如今随着计算机硬件的发展,已经出现4G、8G甚至更高容量的内存规格。二、查看电脑物理内存 1、右击“计算机”,选择“属性”2、查看内存即可 ...

物理内存是指什么意思
电脑的物理内存就是指内存条的内存容量。物理内存(Physical memory)是相对于逻辑内存而言的。物理内存指通过物理内存条而获得的内存空间,而逻辑内存则是指将硬盘的一块区域划分来作为内存。内存主要作用是在计算机运行时为 操作系统 和各种程序提供临时储存。常见的物理内存规格有256M、512M、1G、2G等...

电脑的物理内存是什么 ?
物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了。看机器配置的时候,看的就是这个物理内存。2、CPU中的概念 物理内存,CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那它的寻址空间就是1MB。我们就说8086能支持1MB的物理内存。即使我们...

南岸区19254666856: 实际物理内存是2G,但是系统属性显示只有824MB内存 -
桓乐盐酸: 那个是虚拟内存,要是你运行卡的话,就开始---运行--输入msconfig 回车点击 引导----高级选项---去除所有选择.我的回答希望对你有所帮助

南岸区19254666856: 开机时候检测是2GB内存,但是进入系统查看却是1GB物理内存....怎么解决 -
桓乐盐酸: 1 独立显卡不占用系统内存. 2 开机时在主板看是2G内存,但是在系统里看时1G内存 .(请试着把两条内存全部拿下来,一个一个插. 插上一个后,开机,注意看主板显示、 然后再插另外一个. 这种情况90%是 你的两条内存不兼容. 再有就是有一条内存是有问题的)

南岸区19254666856: 笔记本电脑windows xp系统,物理内存为2G,但是系统只能识别到478mb,是怎么回事? -
桓乐盐酸: 是不是被骗了?可能电脑的实际物理内存只有512M,显卡占用了32M,只剩下478M了.通过修改注册表可以修改电脑的配置信息的,建议用软件检测下电脑的实际配置.

南岸区19254666856: 为什么我在系统信息里面的物理内存2G,但是在任务管理系统里看到我的物理内存就只有1G
桓乐盐酸: 希望对你有帮助!你的显卡是集成的,被占去了1G的内存!

南岸区19254666856: 我的笔记本是2g内存 查看系统的时候却写着 总物理内存2g 可用物理内存1g 正常么 -
桓乐盐酸: 你开机后不用内存的!>????肯定要用的撒!可用1G是正常的!你要只看总物理内存是对的就行了!

南岸区19254666856: 电脑系统是XP,物理内存是2G,实际内存显示的一般不是整数2G,什么原因? -
桓乐盐酸: 存储器的实际容量一般都小于其标称容量.造成这种情况的主要原因是,我们大部分情况下是以1G=1024M来定义存储器容量的,大部分主板的BIOS设计及测试软件也是以1024K字节来计算存储器容量的,而厂家为了方便计算与生产,往往是以每兆1000K字节计算容量,这样一来二者间便出现了大约5%的差异.

南岸区19254666856: 有没有高手在,我这有台电脑物理内存2G,但是系统缓存就占了1G多,有没有办法清除一下? -
桓乐盐酸: 电脑运行的程序太多了,用开机加速把不要用的程序在下次开机的时候不要运行了,打开任务管理器把不要运行的程序给关掉.

南岸区19254666856: 我电脑是2G内存条但是任务管理器显示的是这个 是怎么回事
桓乐盐酸: LZ你好不是从这里看的.这里显示的只是物理内存.你应该用硬件大师检测,就能看到你电脑所有的配置了.希望采纳

南岸区19254666856: 电脑总是提示内存不足..我的电脑是2G的内存,,系统是win7,怎么会这样呢,是电脑本身的问题??? -
桓乐盐酸: 调一下虚拟内存看看,计算机-右键-属性--(左边)高级系统设置-性能-高级-虚拟内存-设置-高级-更改-最好选择上面的自动管理所有驱动器的分页大小,也可以取消“自动管理所有驱动器的分页大小”前面的勾子自己设置,如果你的C盘足够大,可以把虚拟内存设置成物理内存的2倍以上,这就是为什么c盘有一部分使用空间总是找不到的原因,祝你好运……

南岸区19254666856: 32位Win7系统 怎么只识别了2G内存,怎么回事? -
桓乐盐酸: 我可以负责任的告诉你,后加的那条内存有问题,我朋友也是买了个新内存插上以后也是4G,2G可用,但是把新买的内存单独插在电脑上开机,机器是无法点亮的..

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网