跳转指令数据采集方法、装置、电子设备及存储介质制造方法及图纸

技术编号:33946645 阅读:12 留言:0更新日期:2022-06-29 21:29
本发明专利技术提供一种跳转指令数据采集方法、装置、电子设备及存储介质,方法包括:获取操作系统的内核模块文件;基于交互式反汇编器IDA对内核模块文件进行反汇编处理,得到反汇编处理结果;基于IDA自带的IDApython工具提供的函数接口对反汇编处理结果进行处理,确定与内核模块文件对应的跳转指令数据集合。本发明专利技术将IDA工具创新地应用在跳转指令数据采集中,实现了跳转指令数据的有效和全面采集,本实施例得到的跳转指令数据集合可以为基于指令的系统安全检测的方法提供全面有力数据支撑和参考,并在基于指令的系统安全检测的方法得到了很好的验证。的验证。的验证。

【技术实现步骤摘要】
跳转指令数据采集方法、装置、电子设备及存储介质


[0001]本专利技术涉及软件逆向工程
,尤其涉及一种跳转指令数据采集方法、装置、电子设备及存储介质。

技术介绍

[0002]软件逆向工程(Software Reverse Engineering)又称软件反向工程,是指从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。通常,人们把对软件进行反向分析的整个过程统称为软件逆向工程,把在这个过程中所采用的技术都统称为软件逆向工程技术。
[0003]现有的软件逆向工程技术,在获取反汇编跳转指令数据时存在诸多困难,无法较为方便地获取反汇编跳转指令。

技术实现思路

[0004]针对现有技术中的问题,本专利技术实施例提供一种跳转指令数据采集方法、装置、电子设备及存储介质。
[0005]具体地,本专利技术实施例提供了以下技术方案:
[0006]第一方面,本专利技术实施例提供了一种跳转指令数据采集方法,包括:
[0007]获取操作系统的内核模块文件;
[0008]基于交互式反汇编器IDA对所述内核模块文件进行反汇编处理,得到反汇编处理结果;
[0009]基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定与所述内核模块文件对应的跳转指令数据集合;其中,所述跳转指令数据集合包括指令执行顺序流记录、模块内跳转指令多层次记录以及模块间指令跳转记录中的一种或多种。
[0010]进一步地,基于交互式反汇编器IDA对所述内核模块文件进行反汇编处理,得到反汇编处理结果,包括:
[0011]获取与所述内核模块文件对应的反汇编修复文件;
[0012]基于IDA以及所述反汇编修复文件,对所述内核模块文件进行反汇编处理,得到反汇编处理结果。
[0013]进一步地,获取与所述内核模块文件对应的反汇编修复文件,包括:
[0014]若所述操作系统为Linux操作系统,则获取与所述内核模块文件对应的反汇编修复文件为system.map文件;
[0015]若所述操作系统为Windows操作系统,则获取与所述内核模块文件对应的反汇编修复文件为PDB符号文件。
[0016]进一步地,若所述操作系统为Linux操作系统且所述反汇编修复文件为
system.map文件,则所述基于IDA以及所述反汇编修复文件,对所述内核模块文件进行反汇编处理,得到反汇编处理结果,包括:
[0017]地址确定步骤,基于system.map文件,确定内核函数的起始地址;
[0018]第一转换步骤,根据内核函数的起始地址在idat.exe中使用idc.MakeFunction函数将所述内核模块文件中的代码转换为函数;
[0019]第二转换步骤,确定通过转换生成的函数之间的间隔,若函数之间的间隔大于预设值,则使用idc.MakeCode将对应的函数强制转换为代码,并再次使用idc.MakeFunction函数将转换后的代码转换为函数;
[0020]重复所述第一转换步骤和所述第二转换步骤,直至生成的函数的总数量不再增加。
[0021]进一步地,当所述跳转指令数据集合中包含有指令执行顺序流记录时,基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定与所述内核模块文件对应的跳转指令数据集合,包括:
[0022]基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定所述反汇编处理结果中各函数中包含的跳转指令的起始偏移地址以及所述跳转指令下一条的可能指令的起始偏移地址;
[0023]根据所述反汇编处理结果中各函数中包含的跳转指令的起始偏移地址以及所述跳转指令下一条的可能指令的起始偏移地址,确定所述内核模块文件的指令执行顺序流记录。
[0024]进一步地,所述指令执行顺序流记录采用有向无环图DAG进行记录。
[0025]进一步地,
[0026]当所述跳转指令数据集合中包含有模块内跳转指令多层次记录时,基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定与所述内核模块文件对应的跳转指令数据集合,包括:
[0027]根据所述内核模块文件生成导出表;其中,所述导出表中记录有所述内核模块文件的所有函数;
[0028]基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定所述反汇编处理结果中各函数中包含的call跳转指令数据采集指令的目的地址;其中,所述call指令的目的地址=当前call指令地址+操作数数值+call指令长度;
[0029]判断所述call指令的目的地址是否在所述导出表中,若否,则进行模块间指令跳转记录;
[0030]若所述call指令的目的地址在所述导出表中,则从函数末尾以倒序方式遍历逐条汇编,若不是跳转指令,则继续向前遍历;若是跳转指令且为返回指令,则记录跳转指令数据;若是跳转指令且为call指令,则重复执行判断所述call指令的目的地址是否在所述导出表中的步骤;若是跳转指令且为jcc指令,则判断所述jcc指令的目的地址是否在函数外部,若是,则重复执行从函数末尾以倒序方式遍历逐条汇编的步骤,以确定所述跳转指令数据集合中包含的模块内跳转指令多层次记录。
[0031]进一步地,若所述操作系统为Linux操作系统,则采用三层跟踪终止的方式记录跳转指令数据;
[0032]其中,所述三层跟踪终止的方式是指函数内的call指令和jcc指令跟踪进入目的地址所在函数继续记录遍历到的返回指令,直到连续跟踪三层终止。
[0033]进一步地,当所述跳转指令数据集合中包含有模块间指令跳转记录时,基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定与所述内核模块文件对应的跳转指令数据集合,包括:
[0034]根据所述内核模块文件生成导出表和返回信息表;其中,所述导出表中记录有所述内核模块文件的所有函数;所述返回信息表中记录有所述内核模块文件中每个函数的可能返回地址;
[0035]基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,并借助所述导出表和所述返回信息表,确定所述反汇编处理结果中各函数中包含的跳转指令是否存在模块间跳转,若是,则确定模块间指令跳转记录;
[0036]其中,所述函数中的跳转指令存在模块间跳转是指:跳转对[[FROM,ID],[TO,ID]中,[FROM,ID]中的ID与[TO,ID]中的ID不同;
[0037]其中,[FROM,ID]中的ID是指跳转对的起始偏移地址FROM所在的内核模块文件的标识,[TO,ID]中的ID是指跳转对的结束偏移地址TO本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种跳转指令数据采集方法,其特征在于,包括:获取操作系统的内核模块文件;基于交互式反汇编器IDA对所述内核模块文件进行反汇编处理,得到反汇编处理结果;基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定与所述内核模块文件对应的跳转指令数据集合;其中,所述跳转指令数据集合包括指令执行顺序流记录、模块内跳转指令多层次记录以及模块间指令跳转记录中的一种或多种。2.根据权利要求1所述的跳转指令数据采集方法,其特征在于,基于交互式反汇编器IDA对所述内核模块文件进行反汇编处理,得到反汇编处理结果,包括:获取与所述内核模块文件对应的反汇编修复文件;基于IDA以及所述反汇编修复文件,对所述内核模块文件进行反汇编处理,得到反汇编处理结果。3.根据权利要求2所述的跳转指令数据采集方法,其特征在于,获取与所述内核模块文件对应的反汇编修复文件,包括:若所述操作系统为Linux操作系统,则获取与所述内核模块文件对应的反汇编修复文件为system.map文件;若所述操作系统为Windows操作系统,则获取与所述内核模块文件对应的反汇编修复文件为PDB符号文件。4.根据权利要求3所述的跳转指令数据采集方法,其特征在于,若所述操作系统为Linux操作系统且所述反汇编修复文件为system.map文件,则所述基于IDA以及所述反汇编修复文件,对所述内核模块文件进行反汇编处理,得到反汇编处理结果,包括:地址确定步骤,基于system.map文件,确定内核函数的起始地址;第一转换步骤,根据内核函数的起始地址在idat.exe中使用idc.MakeFunction函数将所述内核模块文件中的代码转换为函数;第二转换步骤,确定通过转换生成的函数之间的间隔,若函数之间的间隔大于预设值,则使用idc.MakeCode将对应的函数强制转换为代码,并再次使用idc.MakeFunction函数将转换后的代码转换为函数;重复所述第一转换步骤和所述第二转换步骤,直至生成的函数的总数量不再增加。5.根据权利要求1所述的跳转指令数据采集方法,其特征在于,当所述跳转指令数据集合中包含有指令执行顺序流记录时,基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定与所述内核模块文件对应的跳转指令数据集合,包括:基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定所述反汇编处理结果中各函数中包含的跳转指令的起始偏移地址以及所述跳转指令下一条的可能指令的起始偏移地址;根据所述反汇编处理结果中各函数中包含的跳转指令的起始偏移地址以及所述跳转指令下一条的可能指令的起始偏移地址,确定所述内核模块文件的指令执行顺序流记录。6.根据权利要求5所述的跳转指令数据采集方法,其特征在于,所述指令执行顺序流记录采用有向无环图DAG进行记录。7.根据权利要求1所述的跳转指令数据采集方法,其特征在于,当所述跳转指令数据集
合中包含有模块内跳转指令多层次记录时,基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定与所述内核模块文件对应的跳转指令数据集合,包括:根据所述内核模块文件生成导出表;其中,所述导出表中记录有所述内核模块文件的所有函数;基于所述IDA自带的IDApython工具提供的函数接口对所述反汇编处理结果进行处理,确定所述反汇编处理结果中各函数中包含的call跳转指令数据采集指令的目的地址;其中,所述call指令的目的地址=当前call指令地址+操作数数值+call指令长度;判断所述call指令的目的地址是否在所述导出表中,若否,则进...

【专利技术属性】
技术研发人员:杨晓东李奇峰罗世谦曹志龙
申请(专利权)人:奇安信科技集团股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1