一种查找ELF文件中符号信息的方法及系统技术领域
本发明涉及网络安全技术领域,尤其涉及一种查找ELF文件中符号信息的方法及系统。
背景技术
ELF即ExecutableandLinkableFormat,最初是由UNIX系统实验室开发并发布的,作为应用程序二进制接口的一部分,目前广泛应用在各种Linux系统上,例如目前热门的Android平台。越来越多的Android应用采取了大量的Native开发来保护其核心逻辑,而Native开发的方式即使用C等语言编写一些ELF格式的模块,相比Java代码,Native代码逆向成本较高。
对于正常ELF文件来说,常见的解析节信息的方法十分有效,但越来越多的软件对其ELF文件进行了特殊处理以防逆向,导致了常见的解析方法失效。
发明内容
针对上述技术问题,本发明提供了一种查找ELF文件中符号信息的方法及系统,该方法通过对文件头部结构的深度解析,最终得到符号名、符号类型、起始偏移及大小信息。对于以往的ELF文件来说,常见的解析节信息十分有效,若面对进行了特殊处理以防逆向的ELF文件,常见的解析方法则会失效。本发明针对一般节信息缺失的ELF动态链接库文件,可有效找到其符号表。
一种查找ELF文件中符号信息的方法,包括:
读取ELF文件,获取文件头部结构;
解析文件头部结构,获取ProgramHeader;
解析ProgramHeader,获取DYNAMICSegment;
解析DYNAMICSegment,获取符号表;
解析符号表,得到符号名、符号类型、起始偏移及大小信息。
进一步的,还包括:解析DYNAMICSegment时,获取Hash表和字符串表,利用Hash表和字符串表辅助查找符号表中的符号信息。
一种查找ELF文件中符号信息的系统,包括:
读取文件模块,用于读取ELF文件,获取文件头部结构;
解析头部结构模块,用于解析文件头部结构,获取ProgramHeader;
解析ProgramHeader模块,用于解析ProgramHeader,获取DYNAMICSegment;
解析DYNAMICSegment模块,用于解析DYNAMICSegment,获取符号表;
解析符号表模块,用于解析符号表,得到符号名、符号类型、起始偏移及大小信息。
进一步的,还包括:解析DYNAMICSegment时,获取Hash表和字符串表,利用Hash表和字符串表辅助查找符号表中的符号信息。
本发明涉及一种查找ELF文件中符号信息的方法,本方法通过其加载时所必须的ProgramHeader信息找到所需的DYNAMICSegment,再通过DYNAMICSegment找到符号表、Hash表和字符串表,解析符号表得到符号信息。本方法克服了一般缺失节信息的ELF动态链接库文件无法有效的找到其符号表及符号信息的问题,进而提高了快速解析ELF文件找到符号信息的效率。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一种查找ELF文件中符号信息的方法实施例流程图;
图2为本发明提供的一种查找ELF文件中符号信息的系统实施例结构图。
具体实施方式
本发明给出了一种查找ELF文件中符号信息的方法及系统,为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明:
本发明首先提供了一种查找ELF文件中符号信息的方法,如图1所示,包括:
S101读取ELF文件,获取文件头部结构;
S102解析文件头部结构,获取ProgramHeader;
从文件头部结构中获得段偏移、段表节点大小和段表节点个数;
S103解析ProgramHeader,获取DYNAMICSegment;
当ProgramHeader中的p_type为PT_DYNAMIC时,该Segment为DYNAMICSegment,此时ProgramHeader中的p_offset和p_filesz为DYNAMICSegment的段偏移和段大小;
S104解析DYNAMICSegment,获取符号表;
当DYNAMICSegment中节点d_tag为DT_SYMTAB时,该节点联合结构中的d_ptr为符号表偏移;
S105解析符号表,得到符号名、符号类型、起始偏移及大小信息。
优选地,还包括:解析DYNAMICSegment时,获取Hash表和字符串表,利用Hash表和字符串表辅助查找符号表中的符号信息;
当DYNAMICSegment中节点d_tag为DT_HASH时,该节点联合结构中的d_ptr为哈希表偏移;
当DYNAMICSegment中节点d_tag为ST_STRTAB时,该节点联合结构中的d_ptr为字符串表;
字符串表中储存符号名,Hash表用于找到符号表大小。
本发明还提供了一种查找ELF文件中符号信息的系统,如图2所示,包括:
读取文件模块201,用于读取ELF文件,获取文件头部结构;
解析头部结构模块202,用于解析文件头部结构,获取ProgramHeader;
解析ProgramHeader模块203,用于解析ProgramHeader,获取DYNAMICSegment;
解析DYNAMICSegment模块204,用于解析DYNAMICSegment,获取符号表;
解析符号表模块205,用于解析符号表,得到符号名、符号类型、起始偏移及大小信息。
优选地,还包括:解析DYNAMICSegment时,获取Hash表和字符串表,利用Hash表和字符串表辅助查找符号表中的符号信息。
综上所述,本发明涉及一种查找ELF文件中符号信息的方法。本方法通过读取ELF文件的头部结构,从文件的头部结构中提取段偏移、段表节点大小和段表节点个数信息从而找到DYNAMICSegment,再通过遍历DYNAMICSegment找到符号表、Hash表和字符串表,解析符号表,此时可以得到符号名、符号类型、起始偏移及大小信息。传统的解析节信息的方法只能对正常的ELF文件有效,直接解析其头部中描述符号表信息的节信息部分获得符号信息。而经过特殊处理的ELF文件其符号表的节信息部分缺失,则上述方法无法解析到该ELF文件的符号表,导致了常见的解析方法失效。本发明针对一般节信息缺失的ELF文件,可有效的找到其符号表,进而找到其符号信息。
以上实施例用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,均应涵盖在本发明的权利要求范围当中。