CN105160001A - 一种Linux系统物理内存镜像文件分析方法 - Google Patents

一种Linux系统物理内存镜像文件分析方法 Download PDF

Info

Publication number
CN105160001A
CN105160001A CN201510571067.5A CN201510571067A CN105160001A CN 105160001 A CN105160001 A CN 105160001A CN 201510571067 A CN201510571067 A CN 201510571067A CN 105160001 A CN105160001 A CN 105160001A
Authority
CN
China
Prior art keywords
address
kallsyms
kernel
designated
variable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510571067.5A
Other languages
English (en)
Other versions
CN105160001B (zh
Inventor
张淑慧
王连海
徐丽娟
杨淑棉
刘广起
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Computer Science Center National Super Computing Center in Jinan
Shandong Computer Science Center
Original Assignee
Shandong Computer Science Center
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shandong Computer Science Center filed Critical Shandong Computer Science Center
Priority to CN201510571067.5A priority Critical patent/CN105160001B/zh
Publication of CN105160001A publication Critical patent/CN105160001A/zh
Application granted granted Critical
Publication of CN105160001B publication Critical patent/CN105160001B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明的Linux系统物理内存镜像文件分析方法,包括a).操作系统版本判断以及页目录地址的获取;b).地址转换;c).数据库中已存系统内核符号表的恢复;c-1).获取内核符号的数目;c-2).获取内核符号的类型和名称;c-3).获取内核符号的虚拟地址;d).数据库中未存系统内核符号的恢复;e).获取系统关键信息;e-1).获取进程信息和文件信息;e-2).获取已加载模块信息;e-3).获取网络、CPU、日志和调试信息;f).获取模块导出符号表。本发明的分析方法具有普遍适用性,打破了以往必须知道内系统版本信息和附加内核符号表文件的局限性,为Linux系统内存分析提供了更为通用的分析方法,有益效果显著。

Description

一种Linux系统物理内存镜像文件分析方法
技术领域
本发明涉及一种Linux系统物理内存镜像文件分析方法,更具体的说,尤其涉及一种无需获知操作系统的版本信息即可从物理内存镜像中恢复出内核变量符号表的Linux系统物理内存镜像文件分析方法。
背景技术
美国空军特别调查办公室的Kornblum于2002年在DFRWS(DigitalForensicResearchWorkshop)中发表了名为《PreservationofFragileDigitalEvidencebyFirstResponders》的主题报告,在报告中提出需要调查易失性内存信息以全面而准确地获取网络攻击和网络犯罪证据。为推进物理内存分析技术的发展,DFRWS于2005年发起了针对Windows系统的内存取证分析挑战赛,旨在通过分析给定的一个Windows2000物理内存转储文件提取该文件中所包含的隐匿进程及其隐匿方式;DFRWS于2008年又发起了针对Linux系统的内存取证分析挑战赛。从此,对于物理内存的分析和获取成为计算机取证的研究热点,各种物理内存取证技术和方法相继出现。
在物理内存分析方面,当前研究工作主要集中在Windows平台下,代表性的成果包括:(1)A.Schuster于2006年提出了Windows内存镜像文件中进程和线程的查找方法;(2)Carvey提出了Windows注册表可作为取证源;(3)2007年,SeokheeLee等人研究了虚拟内存文件Pagefile.sys的获取和分析问题;(4)王连海在2008年提出了基于KPCR定位进程控制块的方法,适用于windows2000以后所有版本的。(5)Dolan-Gavitt提出了利用VAD树提取内存进程和线程信息的方法,详尽地分析了内存注册表数据结构,提出了内存注册表键值信息提取方法。(6)Petroni等人提出了一种模块化的、可扩展的VolatilityFramework,通过对底层内存数据获取的封装而向上提供数据接口,从而使物理内存取证研究者专注于高层的内存数据分析与挖掘。
相比之下,对于Linux操作系统物理内存分析技术,当前研究工作较少。MariuszBurdach根据System.map文件提出了查找用户态进程和内核态进程的方法,高宇航等人提出了根据init线性队列、散列表、进程家谱和运行队列查找进程的方法,VolatilityFramework也支持对Linux物理内存镜像文件的分析。
在实际对Linux操作系统的物理内存镜像文件进行分析过程中,我们发现,以上分析方法存在一定的局限性,主要表现在以下几个方面:
(1)给定一个物理内存镜像文件,分析前需要预知其操作系统版本;
(2)除了操作系统版本外,还需要此内核版本对应的System.map内核符号表;
(3)目前分析方法实现的工具使用起来操作步骤较为复杂,以目前使用较为广泛的VolatilityFramework为例,在使用前需要做如下配置:
a)首先确保系统中有dwarfdump、GCC以及make工具;
b)解压缩下载的volatility包,到volatility/tools/linux目录下执行“make”操作生成module.dwarf文件;
c)找到系统System.map文件,执行操作“sudozipvolatility/volatility/plugins/overlays/linux/Ubuntu1204.zipvolatility/tools/linux/module.dwarf/boot/System.map-3.2.0-23-generic”生成Ubuntu1204.zip文件;
d)执行操作“pythonvol.py--info|grepLinux”,如果可以看到刚才生成的配置文件信息“LinuxUbuntu1204x64-AProfileforLinuxUbuntu1204x64”,说明可以对内核为3.2.0.23的物理内存镜像文件进行分析了。
综上所述,当前针对Linux操作系统的物理内存分析技术只能针对已知操作系统的物理内存镜像文件进行分析,且需要附加内核符号表文件。如果给定一个未知操作系统版本的物理内存镜像文件,将无法处理。为了克服上述技术存在的缺点,本发明提出一种新的Linux操作系统物理内存镜像文件分析方法,该方法能够自动判断操作系统版本、并获取指向页目录指针,在地址转换的基础上,从内存镜像文件中获取/proc/kallsyms内核符号表信息,根据内核符号表中相关内核变量获取系统进程、驱动以及网络等信息。
涉及概念及专业术语如下:
物理内存镜像文件:物理内存镜像文件是指把目前正在运行的计算机或者移动终端设备中物理内存信息按照一个比特对应一个比特的方式映射出来所组成的文件,该文件中数据的位置与物理内存中数据的位置是一一对应的。物理内存镜像文件获取方法目前主要有两类方法,一类是软件方法,另一类是硬件方法。软件方法主要有微软提供的CrashDump方法、DD(datadumper)工具、虚拟机(Virtualization)、BradleySchatz构建的BodySnatcher工具。硬件方法主要有BrianCarrier提出的基于PCI扩展卡的方法和Becher、BOILEAUA等人提出的基于FireWire的方法。
内核符号表:所谓内核符号表就是在内核内部函数或变量中可供外部引用的函数和变量的符号表。Windows操作系统编译器一般把符号存储在以PDB为扩展名的外部文件中。在MacOSX操作系统中,编译器把符号文件存放在内核可执行文件的__LINKEDIT节中。Linux内核符号表位于两个部分:/boot/System.map和/proc/kallsyms。两者都是内核函数、变量的符号表,结构一致,对于可导出的内核符号,包括内核变量、函数其运行时在物理内存中的位置是一样的。区别在于System.map文件面向内核,是GCC在编译连接时生成的,同一内核的System.map文件是固定大小的,没有动态添加模块中的变量、函数名;而/proc/kallsyms在内核启动过程中创建,并实时更新,反映的是系统的当前最新情况,同时也包含动态加载的模块导出的函数、变量名称。内存符号表的变量可以用来获取系统进程、驱动以及网络等信息,当前的物理内存分析技术多使用System.map文件进行辅助分析。
模块:模块是一种向Linux内核添加设备驱动程序、文件系统及其他组件的有效方法,而无需连编新内核或重启系统。模块代码导出一些函数,可以由其他核心模块使用。
发明内容
本发明为了克服上述技术问题的缺点,提供了一种Linux系统物理内存镜像文件分析方法。
本发明的Linux系统物理内存镜像文件分析方法,其特别之处在于,通过以下步骤来实现:
a).操作系统版本判断以及页目录地址的获取,在对Linux系统初始化时,通过调用初始化函数crash_save_vmcoreinfo_int函数,将vmcoreinfo_data的内容进行初始化;从获取的vmcoreinfo_data数据中提取操作系统版本信息以及内核符号_stext、swapper_pg_dir的值;
如果操作系统版本信息中含有i686字符或者获取到的swapper_pg_dir的值为八位16进制表示的地址,则判断出该Linux系统为32位操作系统;如果操作系统版本信息中含有x86_64字符或者获取到的swapper_pg_dir的值为十六位16进制表示的地址,则此系统为64位操作系统;
获取到的swapper_pg_dir的值为页目录虚拟地址,如果操作系统为32位,则将其减去0xc0000000即为页目录的物理地址;如果操作系统为64位,则将其减去0xffffffff8000000,即可获取页目录的物理地址;
b).地址转换,32位操作系统地址分为开启PAE模式和未开启PAE模式,这两种模式下又分为大页模式和小页模式,利用页目录的物理地址,便可实现虚拟地址向物理地址的地址转换;64位操作系统地址分为小页模式和大页模式,利用步骤a)中获取的页目录的物理地址,亦可实现虚拟地址向物理地址的转换;
c).数据库中已存系统内核符号表的恢复,判断在物理内存镜像文件的内核变量数据库中是否能查询到操作系统版本信息,如果能查询到操作系统的版本信息,则获取kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_markers、kallsyms_token_table以及kallsyms_token_index内核变量的值,再通过步骤c-1)至c-3)恢复系统的内核符号表;如果不能查询到操作系统的版本信息,则执行步骤d);
c-1).获取内核符号的数目,将获取的kallsyms_num_syms变量虚拟地址利用步骤b)中的地址转换方法,转换为对应的物理地址,并获取此物理地址对应的物理内存信息为/proc/kallsyms中系统内核符号的个数;
c-2).获取内核符号的类型和名称,kallsyms_names对应经过排序的内核符号的类型和名称组成的字符串,首先将kallsyms_names变量虚拟地址按照步骤b)中的方法转化为物理地址,利用此物理地址在内存镜像文件中获取字符串,每个字符串的格式为字符串长度和压缩串;然后再利用内核变量kallsyms_token_table和kallsyms_token_index将字符串解析出来,以获取内核符号的类型、名称;
c-3).获取内核符号的虚拟地址,kallsyms_addresses变量对应经过排序的所有内核符号的虚拟地址,对于经步骤c-2)获取的内核符号,按照其在kallsyms_names变量中的次序,从kallsyms_addresses变量所对应的物理地址中获取内核符号表的虚拟地址;通过步骤c-2)和步骤c-3)即可获取系统数据库中所有内核符号表的类型、名称和虚拟地址信息;
d).数据库中未存系统内核符号的恢复,如果在内核变量数据库中没能查询到目标操作系统版本,则根据步骤a)中获取的内核变量_stext的值在内存中进行搜索,在搜索到的地址处往前追溯寻找内核变量_text的值,内核变量_text的值为_stext去掉后十六位的偏移;获取到的_text的值为kallsyms_address的地址或其地址的近似值;
将获取到的kallsyms_addresses地址或其地址的近似值转换为虚拟地址,在内存镜像文件中进行搜索,在搜索到的地址前后查找函数标志位,查找出函数update_iter在内存中的数据;反编译update_iter函数在内存中数据,即可获取kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_markers、kallsyms_token_table以及kallsyms_token_index五个内核变量的值;获取到该五个内核变量后,按照与步骤c)中相同的方法,即可获取系统数据库中所有内核符号表的类型、名称和虚拟地址信息;
e).获取系统关键信息,获取到系统内核变量值后,按照如下步骤从中抽取对获取系统关键信息较为重要的内核变量;
e-1).获取进程信息和文件信息,根据步骤d)或e)中获取的内核符号表信息中的init_task内核变量,获取swapper进程对应的task_struck结构体,根据task_struck结构体形成的双向链表获取所有正在运行的进程;根据结构体task_struck中的structmm_struct*mm、structfs_struct*fs、structfiles_struct*files、structthread_structthread变量,获取与进程相关的文件信息;
e-2).获取已加载模块信息,根据步骤d)或e)中获取的内核符号表信息中的modules内核变量,内核变量modules指向一个已加载模块结构体module地址,通过所有已加载模块及其module形成的双向链表,获取所有已加载模块信息;
e-3).获取网络、CPU、日志和调试信息,根据步骤d)或e)中获取的内核符号表信息中的rt_hash_mask、rt_hash_table、net_namespace_list内核变量值获取网络配置及链接信息,根据boot_cpu_data内核变量获取目标计算机CPU信息,根据log_buf内核变量获取目标计算机系统日志和调试信息,根据iomem_resource内核变量获取系统物理内存分段信息,根据file_systems内核变量获取系统文件系统信息;
f).获取模块导出符号表,从步骤e)中的module结构体中获取Elf_Sym*symtab、unsignedintnum_symtab、char*strtab内核变量,num_symtab指向模块导出符号个数,symtab指向所有符号地址,strtab指向所有符号名字,根据这三个变量获取模块导出符号,这些符号在进行内存分析时起着重要作用。
本发明的Linux系统物理内存镜像文件分析方法,步骤c-2)中,利用内核变量kallsyms_token_table和kallsyms_token_index将字符串解析的过程中,kallsyms_token_table记录每个ASCII字符的替代串,kallsyms_token_index记录每个ASCII字符的替代串在kallsyms_token_table中的偏移,依次解析压缩串中每个字符,将获取到的字符串连接起来即为内核符号的类型和名称。
本发明的Linux系统物理内存镜像文件分析方法,步骤d)中将获取到的kallsyms_addresses地址或其地址的近似值转换为虚拟地址的方法为:如果操作系统为32位,则将其加上0xc0000000即为页目录的虚拟地址;如果操作系统为64位,则将其加上0xffffffff8000000,即可获取页目录的虚拟地址。
本发明的Linux系统物理内存镜像文件分析方法,步骤d)中所述的五个内核变量的获取方法为:
用获取到的kallsyms_addresses的地址或其地址的近似值转换为虚拟地址,在内存镜像文件中进行搜索,对搜索到的地址向后查看是否含有“0fb78400”或者“0fb79400”,对搜索到的地址从前七位开始截取至后11位,此段内容对应update_iter函数所调用的kallsyms_get_symbol_type函数中的“kallsyms_token_table[kallsyms_token_index[kallsyms_names[off+1]]]”语句在内存中的内容,对内容反编译后获取变量kallsyms_token_table、kallsyms_token_index以及kallsyms_names的值;在操作系统为32位的情况下,变量kallsyms_num_syms的值为kallsyms_names的值减去4,在操作系统为64位的情况下,变量kallsyms_num_syms的值为kallsyms_names的值减去8;
按照与步骤c)中相同的方法,即可获取系统数据库中所有内核符号表的类型、名称和虚拟地址信息;从恢复出来的内核变量中抽取_stext变量与第一步中获取到的_stext变量进行比较,如果变量值相同,说明获取到各内核变量是正确的;如果变量值不同,则改变kallsyms_addresses近似值,重复步骤d)中的分析。
本发明的Linux系统物理内存镜像文件分析方法,步骤d)中所述的虚拟地址向物理地址的地址转换方法通过以下步骤来实现:
swapper_pg_dir所对应的页目录的物理地址记为CR3,待转化的虚拟地址的21至29位记为Directory、30至31位记为DirectoryPointer、30至38位记为DirectoryPtr、39至47位记为PML4、48至63位记为SingExtended,小页模式下0至11位记为Offset、12至20位记为Table,大页模式下0至20位记为Offset;
如果操作系统位数是64位操作系统小页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至51位、低12位均取为0,将其与PML4乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为A1;取A1的12位至51位、低12位均取为0,将其与DirectoryPtr乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A2;取A2的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A3;取A3的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A4;取A4的12位至51位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如果操作系统位数是64位操作系统大页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至51位、低12位均取为0,将其与PML4乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为B1;取B1的12位至51位、低12位均取为0,将其与DirectoryPtr乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为B2;取B2的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为B3;取B3的21位至51位、低21位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如果操作系统位数是32位操作系统开启PAE小页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至44位、低5位均取为0,将其与DirectoryPointer乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为C1;取C1的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为C2;取C2的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为C3;取C3的12位至35位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如果操作系统位数是32位操作系统开启PAE大页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至44位、低5位均取为0,将其与DirectoryPointer乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为D1;取D1的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为D2;取D2的21位至35位、低21位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
在32位操作系统不开启PAE模式下:待转化的虚拟地址小页模式下的0至11位记为Offset、12至21位记为Table、22至31位记为Directory;大页模式下:0至21位记为Offset、22至31位记为Directory;
如果操作系统位数是32位操作系统不开启PAE小页模式,则通过以下方法进行地址转换:取CR3寄存器的0位至31位、低13位均取为0,将其与Directory乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为E1;取E1的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为E2;取E2的12位至31位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如果操作系统位数是32位操作系统不开启PAE大页模式,则通过以下方法进行地址转换:取CR3寄存器的0位至31位、低13位均取为0,将其与Directory乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为F1;取F1的21位至30位、低22位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值。
本发明的有益效果是:本发明的Linux系统物理内存镜像文件分析方法,在内存镜像文件的内核变量数据库中能查询到系统版本信息的情况下,则直接获取kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_markers、kallsyms_token_table以及kallsyms_token_index内核变量的值,进而获取到所有内核符号的类型、名称和虚拟地址信息,实现内核符号表的恢复;在无法查询到系统版本信息的情况下,则根据内核变量_stext和_text查找出update_iter函数,进而获取上述5个内核变量,完成对内核符号表的恢复;最终通过获取的内核符号表取得进程信息、文件信息、已加载模块、网络配置和链接等信息,实现对Linux系统物理内存镜像文件的分析,本发明的内存镜像文件分析方法具有普遍适用性,打破了以往必须知道内系统版本信息和附加内核符号表文件的局限性,为Linux系统内存分析提供了更为通用的分析方法,有益效果显著。
附图说明
图1为本发明的Linux系统物理内存镜像文件分析方法的流程图;
图2为本发明的内存镜像文件中vmcoreinfo_data的部分数据内容;
图3为本发明的实施例中kallsyms_addresses物理地址指向内容的局部示意图;
图4为本发明的实施例中update_iter函数的调用关系图;
图5为本发明的实施例中update_iter在内存中的内容;
图6为本发明的实施例中进程结构关系图;
图7为本发明的实施例中模块结构关系图;
图8为本发明中64位小页模式下地址转换示意图;
图9为本发明中64位大页模式下地址转换示意图;
图10为本发明中32位开启PAE小页模式地址转换示意图;
图11为本发明中32位开启PAE下大页模式地址转换示意图;
图12为本发明中32位未开启PAE下小页模式地址转换示意图;
图13为本发明中32位未开启PAE下大页模式地址转换示意图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
如图1所示,给出了本发明的Linux系统物理内存镜像文件分析方法的流程图,其通过以下步骤来实现:
1.操作系统版本判断以及页目录地址的获取;
在系统初始化时,crash_save_vmcoreinfo_init函数初始化函数被调用,它将初始化vmcoreinfo_data内容,此内容就是ELF文件中的PT_NOTE结构的desc信息,信息格式如图2所示,给出了本发明的内存镜像文件中vmcoreinfo_data的部分数据内容。
从图2可以看到,如果能够获取到vmcoreinfo_data便可获取到操作系统版本以及内核符号_stext、swapper_pg_dir的值。vmcoreinfo_data内容以“OSRELEASE=”开头,同时包含“SYMBOL(swapper_pg_dir)=”、“SYMBOL(_stext)=”以及“SYMBOL(vmlist)=”字符串,所以这些特征值在内存镜像文件中进行搜索,获取到操作系统版本以及内核变量swapper_pg_dir、_stext的值。操作系统版本信息若含有i686字符或者获取到的swapper_pg_dir的值为八位16进制地址,则此系统为32位操作系统;若操作系统版本信息含有x86_64字符或者获取到的swapper_pg_dir的值为十六位16进制地址,则此系统为64位操作系统。获取到的swapper_pg_dir的值为页目录虚拟地址,如果操作系统为32位,则虚拟地址减去0xc0000000即为页目录物理地址;如果操作系统为64位,则虚拟地址减去0xffffffff80000000为页目录物理地址。
2.地址转换;
有了页目录地址,便可实现虚拟地址向物理地址的地址转换。32位操作系统地址分为开启PAE模式和未开启PAE模式,这两种模式分别分为大页模式和大页模式,转换方法如图10-13所示。64位操作系统地址转换分为小页模式和大页模式两种,转换方法如图8和图9所示。在物理内存镜像文件中保存的地址皆是虚拟地址,所以地址转换是物理内存分析的基础。虚拟地址向物理地址转换的方法,在后面详细给出。
3.数据库中已存系统内核符号表的恢复;
获取到了物理内存镜像文件操作系统版本后,向内核变量数据库中进行查询是否已保存此版本内核信息。内核变量数据库中保存了各个Linux内核版本对应的kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_markers、kallsyms_token_table以及kallsyms_token_index内核变量的值。
若在内核变量数据库中查询到目标操作系统版本后,获取目标操作系统版本的上述六个内核变量的值,根据这几个内核变量的值在内存获取内核符号表,获取方法描述如下:
将获取到的kallsyms_num_syms变量虚拟地址利用页目录地址转换为物理地址,获取此物理地址对应的物理内存信息为/proc/kallsyms中系统内核符号个数,而kallsyms_addresses变量对应经过排序的所有内核符号的地址,kallsyms_names是符号名组成的字符串,包含了若干个子字符串,每个子字符串的格式为字符串长度和压缩串,为了解析压缩串而设置了变量kallsyms_token_table和kallsyms_token_index,kallsyms_token_table记录每个ascii字符的替代串,kallsyms_token_index记录每个ascii字符的替代串在kallsyms_token_table中的偏移,依次解析压缩串中每个字符,将获取到的字符串连接起来即为此内核符号的类型和名称。
以内核版本为“3.6.10-4.fc18.i686.PAE”的物理内存镜像为例说明上述恢复方法:
在数据库中搜索到此版本对应的内核变量的地址如下:
c09e8c0cRkallsyms_addresses
c0a247b0Rkallsyms_num_syms
c0a247b4Rkallsyms_names
c0ad8e54Rkallsyms_markers
c0ad9210Rkallsyms_token_table
c0ad95a0Rkallsyms_token_index
将kallsyms_num_syms变量的虚拟地址进行地址转换获取其物理地址为0xa247b0,获取此物理地址在物理内存镜像文件中信息为0xeee9,即在/proc/kallsyms中系统内核变量个数为61161个。读取kallsyms_addresses物理地址指向内容,依次获取61161个变量的虚拟地址,如图3所示,给出了本实施例中kallsyms_addresses物理地址指向内容的局部示意图。
表1给出了kallsyms_names物理地址所指向内容的开始部分;
表1
00A247B0 E9 EE 00 00 O7 1F FE 72 74 A2 33 32 04 54 5F 74
读取kallsyms_names物理地址指向内容,读取第一个子字符串为表1中的画面部分的内容:O71FFE7274A23332。
第一个07表示长度,然后依次处理每一个压缩符,第一个为0x1f,乘以2后为0x3e,在kallsyms_token_index变量指向内容偏移0x3e处获取内容为0x88,然后在kallsyms_token_table变量指向内容偏移0x88处获取内容为Ts,依次处理余下六个字符,最后获取到第一个内核变量名称为startup_32,类型为T,结合根据kallsyms_addresses内核变量获取到的地址,内核变量startup_32对应的虚拟地址为0xc0400000。
4.数据库中未存系统内核符号表的恢复;
若在内核变量数据库中没能查询到目标操作系统版本,则根据内核变量_stext的值在内存中进行搜索,在搜索到的地址处往前追溯寻找内核变量_text的值,内核变量_text的值为_stext的值去掉后十六位的偏移。/proc/kallsyms中第一个内核变量一般情况下是内核变量_text,有的64位系统中在_text变量前还保存了其它变量,所以找到内核变量_text的值为kallsyms_address的近似值,即不确定是否为kallsyms_address的地址。
用获取到的kallsyms_address的近似值转换为虚拟地址在内存镜像文件中进行搜索,对搜索到的地址向后查看是否含有“0fb78400”或者“0fb79400”,对搜索到的地址从前七位开始截取至后11位,此段内容对应update_iter函数所调用的kallsyms_get_symbol_type函数中的“kallsyms_token_table[kallsyms_token_index[kallsyms_names[off+1]]];”语句在内存中内容,如图4所示,给出了本发明的实施例中update_iter函数的调用关系图。反编译后获取变量kallsyms_token_table、kallsyms_token_index以及kallsyms_names的值,变量kallsyms_num_syms的值为kallsyms_names的值减去4(32位操作系统下)或者减去8(64位操作系统)下。
然后根据获取到的内核变量值进行所有内核变量的恢复,恢复方法与第三步中恢复方法相同。从恢复出来的内核变量中抽取_stext变量与第一步中获取到的_stext变量进行比较,如果变量值相同,说明获取到的值是正确的;如果变量值不同,则改变kallsyms_address近似值,重复以上分析。
以内核版本为“3.6.10-4.fc18.i686.PAE”的物理内存镜像为例说明上述获取方法:
根据第一步中获取到_stext的值为c04010e8,在内存镜像文件中搜索“e81040c0”字符串。在搜索到地方往前搜索c0400000,地址为0x9e8c0c,加上0xc0000000转换为虚拟地址为0xc09e8c0c。然后在内存镜像文件中搜素“0c8c9ec0”字符串,搜索到后向后查看内存内容是否包含“0fb78400”或者“0fb79400”标志位,如图5所示,给出了本发明的实施例中update_iter在内存中的内容;
反编译上述数据获取到kallsyms_names值为0xc0a247b4、kallsyms_token_table值为0xc0ad9210,kallsyms_token_index值为0xc0ad95a0,kallsyms_num_syms值为kallsyms_names的值减去4即0xc0a247b0。
5.获取系统关键信息,获取到系统内核变量值后,从中抽取对获取系统关键信息较为重要的内核变量:
5-1).根据init_task变量值获取进程信息,根据进程信息获取文件信息;init_task变量指向swapper进程对应task_struct结构体地址,所有正在运行的进程其task_struct结构体形成一个双向链表,获取到swapper进程地址后,根据双向链表获取到所有的正在运行的进程。
在结构体task_struct中含有structmm_struct*mm、structfs_struct*fs、structfiles_struct*files、structthread_structthread等变量,如图6所示,给出了本发明的实施例中进程结构关系图,根据这些变量获取进程相关文件信息。
5-2).根据modules变量值获取模块信息,如图7所示,给出了本发明的实施例中模块结构关系图,modules变量指向某一个已加载模块结构体module地址,所有已加载模块其module形成一个双向链表,如图7所示,据此可以获取到所有已加载模块。
5-3).获取网络信息及系统信息;根据rt_hash_mask、rt_hash_table、net_namespace_list变量值获取网络配置及链接信息。
根据boot_cpu_data变量可获取目标计算机CPU信息;根据log_buf变量可以获取目标计算机系统日志和调试信息;根据iomem_resource变量可以获取系统物理内存分段信息;根据file_systems变量可以获取系统文件系统信息。
6).获取模块导出符号表;在module结构体中含有Elf_Sym*symtab、unsignedintnum_symtab、char*strtab等变量(如图13所示),num_symtab指向模块导出符号个数,symtab指向所有符号地址,strtab指向所有符号名字。根据这三个变量获取模块导出符号,这些符号在进行内存分析时起着重要作用,如利用kvm模块导出vm_list可以获取当前物理机中运行的虚拟机信息。
虚拟地址转化为物理地址的方法叙述如下:
swapper_pg_dir所对应的页目录的物理地址记为CR3,待转化的虚拟地址的21至29位记为Directory、30至31位记为DirectoryPointer、30至38位记为DirectoryPtr、39至47位记为PML4、48至63位记为SingExtended,小页模式下0至11位记为Offset、12至20位记为Table,大页模式下0至20位记为Offset;
如图8所示,给出了本发明中64位小页模式下地址转换示意图,如果操作系统位数是64位操作系统小页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至51位、低12位均取为0,将其与PML4乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为A1;取A1的12位至51位、低12位均取为0,将其与DirectoryPtr乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A2;取A2的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A3;取A3的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A4;取A4的12位至51位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如图9所示,给出了本发明中64位大页模式下地址转换示意图,如果操作系统位数是64位操作系统大页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至51位、低12位均取为0,将其与PML4乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为B1;取B1的12位至51位、低12位均取为0,将其与DirectoryPtr乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为B2;取B2的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为B3;取B3的21位至51位、低21位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如图10所示,给出了本发明中32位开启PAE小页模式地址转换示意图,如果操作系统位数是32位操作系统开启PAE小页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至44位、低5位均取为0,将其与DirectoryPointer乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为C1;取C1的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为C2;取C2的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为C3;取C3的12位至35位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如图11所示,给出了本发明中32位开启PAE下大页模式地址转换示意图,如果操作系统位数是32位操作系统开启PAE大页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至44位、低5位均取为0,将其与DirectoryPointer乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为D1;取D1的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为D2;取D2的21位至35位、低21位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
在32位操作系统不开启PAE模式下:待转化的虚拟地址小页模式下的0至11位记为Offset、12至21位记为Table、22至31位记为Directory;大页模式下:0至21位记为Offset、22至31位记为Directory;
如图12所示,给出了本发明中32位未开启PAE下小页模式地址转换示意图,如果操作系统位数是32位操作系统不开启PAE小页模式,则通过以下方法进行地址转换:取CR3寄存器的0位至31位、低13位均取为0,将其与Directory乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为E1;取E1的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为E2;取E2的12位至31位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如图13所示,给出了图13为本发明中32位未开启PAE下大页模式地址转换示意图,如果操作系统位数是32位操作系统不开启PAE大页模式,则通过以下方法进行地址转换:取CR3寄存器的0位至31位、低13位均取为0,将其与Directory乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为F1;取F1的21位至30位、低22位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值。
本发明针对目前Linux系统物理内存分析技术存在的只能分析已知操作系统版本的物理内存镜像文件、需要附加内核符号表文件、使用起来操作步骤较为复杂等问题,给出了一种新的针对Linux系统物理内存分析方法,与现有技术相比,本发明所提出的方法有以下优点:
1、本发明所提出的方法能够自动判断物理内存镜像文件对应的操作系统版本,无需预知目标计算机的操作系统版本;同时获取页目录地址,实现虚拟地址到物理地址的转换。
2、本发明提出了一种从物理内存镜像文件中进行符号表提取的新方法,根据kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_token_table以及kallsyms_token_index这几个内核变量从物理内存中提取/proc/kallsyms中的符号表,同一内核版本,这几个变量值是相同的,根据分析出的版本从内核变量数据库中获取上述内核变量的值。对于内核变量数据库中不存在的值,对内核函数update_iter在内存中的二进制码进行反编译获取上述内核变量的值。
3、本发明除了获取内核符号表外,获取各个模块导出的符号表,根据这些符号表中的某些变量或者函数将获取目标计算机的重要信息。
4、据此开发的系统操作简单,无需指定物理内存镜像文件对应的操作系统版本及进行相关系统配置即可进行。

Claims (5)

1.一种Linux系统物理内存镜像文件分析方法,其特征在于,通过以下步骤来实现:
a).操作系统版本判断以及页目录地址的获取,在对Linux系统初始化时,通过调用初始化函数crash_save_vmcoreinfo_int函数,将vmcoreinfo_data的内容进行初始化;从获取的vmcoreinfo_data数据中提取操作系统版本信息以及内核符号_stext、swapper_pg_dir的值;
如果操作系统版本信息中含有i686字符或者获取到的swapper_pg_dir的值为八位16进制表示的地址,则判断出该Linux系统为32位操作系统;如果操作系统版本信息中含有x86_64字符或者获取到的swapper_pg_dir的值为十六位16进制表示的地址,则此系统为64位操作系统;
获取到的swapper_pg_dir的值为页目录虚拟地址,如果操作系统为32位,则将其减去0xc0000000即为页目录的物理地址;如果操作系统为64位,则将其减去0xffffffff8000000,即可获取页目录的物理地址;
b).地址转换,32位操作系统地址分为开启PAE模式和未开启PAE模式,这两种模式下又分为大页模式和小页模式,利用页目录的物理地址,便可实现虚拟地址向物理地址的地址转换;64位操作系统地址分为小页模式和大页模式,利用步骤a)中获取的页目录的物理地址,亦可实现虚拟地址向物理地址的转换;
c).数据库中已存系统内核符号表的恢复,判断在物理内存镜像文件的内核变量数据库中是否能查询到操作系统版本信息,如果能查询到操作系统的版本信息,则获取kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_markers、kallsyms_token_table以及kallsyms_token_index内核变量的值,再通过步骤c-1)至c-3)恢复系统的内核符号表;如果不能查询到操作系统的版本信息,则执行步骤d);
c-1).获取内核符号的数目,将获取的kallsyms_num_syms变量虚拟地址利用步骤b)中的地址转换方法,转换为对应的物理地址,并获取此物理地址对应的物理内存信息为/proc/kallsyms中系统内核符号的个数;
c-2).获取内核符号的类型和名称,kallsyms_names对应经过排序的内核符号的类型和名称组成的字符串,首先将kallsyms_names变量虚拟地址按照步骤b)中的方法转化为物理地址,利用此物理地址在内存镜像文件中获取字符串,每个字符串的格式为字符串长度和压缩串;然后再利用内核变量kallsyms_token_table和kallsyms_token_index将字符串解析出来,以获取内核符号的类型、名称;
c-3).获取内核符号的虚拟地址,kallsyms_addresses变量对应经过排序的所有内核符号的虚拟地址,对于经步骤c-2)获取的内核符号,按照其在kallsyms_names变量中的次序,从kallsyms_addresses变量所对应的物理地址中获取内核符号表的虚拟地址;通过步骤c-2)和步骤c-3)即可获取系统数据库中所有内核符号表的类型、名称和虚拟地址信息;
d).数据库中未存系统内核符号的恢复,如果在内核变量数据库中没能查询到目标操作系统版本,则根据步骤a)中获取的内核变量_stext的值在内存中进行搜索,在搜索到的地址处往前追溯寻找内核变量_text的值,内核变量_text的值为_stext去掉后十六位的偏移;获取到的_text的值为kallsyms_addresses的地址或其地址的近似值;
将获取到的kallsyms_addresses地址或其地址的近似值转换为虚拟地址,在内存镜像文件中进行搜索,查找出函数update_iter在内存中的数据;反编译update_iter函数在内存中数据,即可获取kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_markers、kallsyms_token_table以及kallsyms_token_index五个内核变量的值;获取到该五个内核变量后,按照与步骤c)中相同的方法,即可获取系统数据库中所有内核符号表的类型、名称和虚拟地址信息;
e).获取系统关键信息,获取到系统内核变量值后,按照如下步骤从中抽取对获取系统关键信息较为重要的内核变量;
e-1).获取进程信息和文件信息,根据步骤d)或e)中获取的内核符号表信息中的init_task内核变量,获取swapper进程对应的task_struck结构体,根据task_struck结构体形成的双向链表获取所有正在运行的进程;根据结构体task_struck中的structmm_struct*mm、structfs_struct*fs、structfiles_struct*files、structthread_structthread变量,获取与进程相关的文件信息;
e-2).获取已加载模块信息,根据步骤d)或e)中获取的内核符号表信息中的modules内核变量,内核变量modules指向一个已加载模块结构体module地址,通过所有已加载模块及其module形成的双向链表,获取所有已加载模块信息;
e-3).获取网络、CPU、日志和调试信息,根据步骤d)或e)中获取的内核符号表信息中的rt_hash_mask、rt_hash_table、net_namespace_list内核变量值获取网络配置及链接信息,根据boot_cpu_data内核变量获取目标计算机CPU信息,根据log_buf内核变量获取目标计算机系统日志和调试信息,根据iomem_resource内核变量获取系统物理内存分段信息,根据file_systems内核变量获取系统文件系统信息;
f).获取模块导出符号表,从步骤e)中的module结构体中获取Elf_Sym*symtab、unsignedintnum_symtab、char*strtab内核变量,num_symtab指向模块导出符号个数,symtab指向所有符号地址,strtab指向所有符号名字,根据这三个变量获取模块导出符号,这些符号在进行内存分析时起着重要作用。
2.根据权利要求1所述的Linux系统物理内存镜像文件分析方法,其特征在于:步骤c-2)中,利用内核变量kallsyms_token_table和kallsyms_token_index将字符串解析的过程中,kallsyms_token_table记录每个ASCII字符的替代串,kallsyms_token_index记录每个ASCII字符的替代串在kallsyms_token_table中的偏移,依次解析压缩串中每个字符,将获取到的字符串连接起来即为内核符号的类型和名称。
3.根据权利要求1或2所述的Linux系统物理内存镜像文件分析方法,其特征在于:步骤d)中将获取到的kallsyms_addresses地址或其地址的近似值转换为虚拟地址的方法为:如果操作系统为32位,则将其加上0xc0000000即为页目录的虚拟地址;如果操作系统为64位,则将其加上0xffffffff8000000,即可获取页目录的虚拟地址。
4.根据权利要求1或2所述的Linux系统物理内存镜像文件分析方法,其特征在于:步骤d)中所述的五个内核变量的获取方法为:
用获取到的kallsyms_addresses的地址或其地址的近似值转换为虚拟地址,在内存镜像文件中进行搜索,对搜索到的地址向后查看是否含有“0fb78400”或者“0fb79400”,对搜索到的地址从前七位开始截取至后11位,此段内容对应update_iter函数所调用的kallsyms_get_symbol_type函数中的“kallsyms_token_table[kallsyms_token_index[kallsyms_names[off+1]]]”语句在内存中的内容,对内容反编译后获取变量kallsyms_token_table、kallsyms_token_index以及kallsyms_names的值;在操作系统为32位的情况下,变量kallsyms_num_syms的值为kallsyms_names的值减去4,在操作系统为64位的情况下,变量kallsyms_num_syms的值为kallsyms_names的值减去8;
按照与步骤c)中相同的方法,即可获取系统数据库中所有内核符号表的类型、名称和虚拟地址信息;从恢复出来的内核变量中抽取_stext变量与第一步中获取到的_stext变量进行比较,如果变量值相同,说明获取到各内核变量是正确的;如果变量值不同,则改变kallsyms_addresses近似值,重复步骤d)中的分析。
5.根据权利要求1或2所述的Linux系统物理内存镜像文件分析方法,其特征在于:步骤d)中所述的虚拟地址向物理地址的地址转换方法通过以下步骤来实现:
swapper_pg_dir所对应的页目录的物理地址记为CR3,待转化的虚拟地址的21至29位记为Directory、30至31位记为DirectoryPointer、30至38位记为DirectoryPtr、39至47位记为PML4、48至63位记为SingExtended,小页模式下0至11位记为Offset、12至20位记为Table,大页模式下0至20位记为Offset;
如果操作系统位数是64位操作系统小页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至51位、低12位均取为0,将其与PML4乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为A1;取A1的12位至51位、低12位均取为0,将其与DirectoryPtr乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A2;取A2的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A3;取A3的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为A4;取A4的12位至51位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如果操作系统位数是64位操作系统大页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至51位、低12位均取为0,将其与PML4乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为B1;取B1的12位至51位、低12位均取为0,将其与DirectoryPtr乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为B2;取B2的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为B3;取B3的21位至51位、低21位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如果操作系统位数是32位操作系统开启PAE小页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至44位、低5位均取为0,将其与DirectoryPointer乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为C1;取C1的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为C2;取C2的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为C3;取C3的12位至35位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如果操作系统位数是32位操作系统开启PAE大页模式,则通过以下方法进行地址转换:取CR3寄存器的12位至44位、低5位均取为0,将其与DirectoryPointer乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为D1;取D1的12位至51位、低12位均取为0,将其与Directory乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为D2;取D2的21位至35位、低21位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
在32位操作系统不开启PAE模式下:待转化的虚拟地址小页模式下的0至11位记为Offset、12至21位记为Table、22至31位记为Directory;大页模式下:0至21位记为Offset、22至31位记为Directory;
如果操作系统位数是32位操作系统不开启PAE小页模式,则通过以下方法进行地址转换:取CR3寄存器的0位至31位、低13位均取为0,将其与Directory乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为E1;取E1的12位至51位、低12位均取为0,将其与Table乘以8之后的数值相加,获取此地址在物理内存镜像对应的内容记为E2;取E2的12位至31位、低12位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值;
如果操作系统位数是32位操作系统不开启PAE大页模式,则通过以下方法进行地址转换:取CR3寄存器的0位至31位、低13位均取为0,将其与Directory乘以8后的数值相加,获取此地址在物理内存镜像对应的内容记为F1;取F1的21位至30位、低22位均取为0,将其与Offset相加,得到的数据即为的虚拟地址转化为物理地址之后的数值。
CN201510571067.5A 2015-09-09 2015-09-09 一种Linux系统物理内存镜像文件分析方法 Active CN105160001B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510571067.5A CN105160001B (zh) 2015-09-09 2015-09-09 一种Linux系统物理内存镜像文件分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510571067.5A CN105160001B (zh) 2015-09-09 2015-09-09 一种Linux系统物理内存镜像文件分析方法

Publications (2)

Publication Number Publication Date
CN105160001A true CN105160001A (zh) 2015-12-16
CN105160001B CN105160001B (zh) 2017-03-08

Family

ID=54800857

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510571067.5A Active CN105160001B (zh) 2015-09-09 2015-09-09 一种Linux系统物理内存镜像文件分析方法

Country Status (1)

Country Link
CN (1) CN105160001B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786596A (zh) * 2016-03-21 2016-07-20 山东省计算中心(国家超级计算济南中心) 一种从64位Windows10操作系统的内存镜像文件中获取对象信息的方法
CN107621971A (zh) * 2017-10-17 2018-01-23 山东省计算中心(国家超级计算济南中心) 一种面向XenServer平台的虚拟机内存取证方法
CN113778747A (zh) * 2021-08-11 2021-12-10 江苏深网科技有限公司 一种设备系统镜像文件格式分析方法
CN114138362A (zh) * 2021-11-18 2022-03-04 武汉深之度科技有限公司 一种内核模块防卸载方法、防卸载装置及计算设备
CN114281338A (zh) * 2021-11-25 2022-04-05 中国科学院信息工程研究所 一种获取Linux内核中数据结构偏移的方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101414304A (zh) * 2008-11-27 2009-04-22 山东省计算中心 基于KPCR结构的Windows系统物理内存分析方法
CN102929747A (zh) * 2012-11-05 2013-02-13 中标软件有限公司 基于龙芯服务器的Linux操作系统崩溃转储的处理方法
CN102945288A (zh) * 2012-11-29 2013-02-27 重庆邮电大学 一种物理内存镜像中文本数据文件提取方法
CN104182269A (zh) * 2014-08-12 2014-12-03 山东省计算中心(国家超级计算济南中心) 一种kvm虚拟机的物理内存取证方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101414304A (zh) * 2008-11-27 2009-04-22 山东省计算中心 基于KPCR结构的Windows系统物理内存分析方法
CN102929747A (zh) * 2012-11-05 2013-02-13 中标软件有限公司 基于龙芯服务器的Linux操作系统崩溃转储的处理方法
CN102945288A (zh) * 2012-11-29 2013-02-27 重庆邮电大学 一种物理内存镜像中文本数据文件提取方法
CN104182269A (zh) * 2014-08-12 2014-12-03 山东省计算中心(国家超级计算济南中心) 一种kvm虚拟机的物理内存取证方法

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786596A (zh) * 2016-03-21 2016-07-20 山东省计算中心(国家超级计算济南中心) 一种从64位Windows10操作系统的内存镜像文件中获取对象信息的方法
CN105786596B (zh) * 2016-03-21 2018-04-13 山东省计算中心(国家超级计算济南中心) 一种从64位Windows10操作系统的内存镜像文件中获取对象信息的方法
CN107621971A (zh) * 2017-10-17 2018-01-23 山东省计算中心(国家超级计算济南中心) 一种面向XenServer平台的虚拟机内存取证方法
CN113778747A (zh) * 2021-08-11 2021-12-10 江苏深网科技有限公司 一种设备系统镜像文件格式分析方法
CN113778747B (zh) * 2021-08-11 2023-08-29 江苏深网科技有限公司 一种设备系统镜像文件格式分析方法
CN114138362A (zh) * 2021-11-18 2022-03-04 武汉深之度科技有限公司 一种内核模块防卸载方法、防卸载装置及计算设备
CN114138362B (zh) * 2021-11-18 2024-03-01 武汉深之度科技有限公司 一种内核模块防卸载方法、防卸载装置及计算设备
CN114281338A (zh) * 2021-11-25 2022-04-05 中国科学院信息工程研究所 一种获取Linux内核中数据结构偏移的方法和装置
CN114281338B (zh) * 2021-11-25 2024-05-28 中国科学院信息工程研究所 一种获取Linux内核中数据结构偏移的方法和装置

Also Published As

Publication number Publication date
CN105160001B (zh) 2017-03-08

Similar Documents

Publication Publication Date Title
CN105160001A (zh) 一种Linux系统物理内存镜像文件分析方法
CN105224370B (zh) 一种加载elf文件的方法和装置
Case et al. Dynamic recreation of kernel data structures for live forensics
CN106843840B (zh) 一种基于相似度分析的源代码版本演化注释复用方法
CN112379917B (zh) 浏览器兼容性提升方法、装置、设备及存储介质
US6055365A (en) Code point translation for computer text, using state tables
CN104102881B (zh) 一种基于内核对象链接关系的内存取证方法
CN106547765B (zh) 基于sql的数据库管理方法及装置
CN106020920A (zh) 一种jcvm解释器的预处理方法及系统
CN114968282A (zh) 一种异常处理执行的优化方法和系统
CN113419721B (zh) 基于web的表达式编辑方法、装置、设备和存储介质
CN113721928A (zh) 一种基于二进制分析的动态库裁剪方法
CN111443979B (zh) 文档处理方法、装置、计算机设备及存储介质
US20150193459A1 (en) Data file searching method
CN112540755A (zh) 一种基于前端的组件处理方法、装置、设备及存储介质
CN101339507B (zh) 一种生成嵌入式程序运行符号表的方法
CN111046636A (zh) 筛选pdf文件信息的方法、装置、计算机设备及存储介质
Garfinkel et al. Sharpening your tools: Updating bulk_extractor for the 2020s
US20080147696A1 (en) Method for reducing memory size allocated by a string class using unicode
JP4734400B2 (ja) 文書検索装置およびプログラム
CN114492365A (zh) 二进制文件之间相似度的确定方法、计算设备及存储介质
CN114816435A (zh) 一种基于逆向技术的软件开发方法
CN115904486A (zh) 一种代码相似度检测方法及装置
CN113835714A (zh) 应用程序的语言转换方法、装置、计算机设备和存储介质
CN103677851A (zh) 一种生成嵌入式程序运行符号表的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant