基于循环分析和二进制相似代码分析的密码函数识别方法技术

技术编号:38826631 阅读:25 留言:0更新日期:2023-09-15 20:06
一种基于循环分析和二进制相似代码分析的密码函数识别方法,对待分析的二进制函数代码进行模拟执行,提取其在模拟执行过程中的动态执行特征序列,通过计算其与特征库中密码函数特征的雅卡尔系数作为相似性分数,将与待分析函数相似性分数最高的特征库中密码函数作为识别结果,实现密码算法自动化检测。本发明专利技术在保证不同编译器版本和优化选项下密码算法识别准确性的同时,兼顾分析的高效性、可扩展性,提高标准密码算法识别在这类场景下的准确性的同时,减少分析过程的时间开销,并有着跨编译配置和跨不同架构的优势。编译配置和跨不同架构的优势。编译配置和跨不同架构的优势。

【技术实现步骤摘要】
基于循环分析和二进制相似代码分析的密码函数识别方法


[0001]本专利技术涉及的是一种信息安全领域的技术,具体是一种基于循环分析和二进制相似代码分析的密码函数识别方法。

技术介绍

[0002]系统中密码算法的具体实现方法,可能极大影响系统安全性,恶意代码甚至用其掩盖恶意行为。因此密码算法的识别与分析在信息安全领域中不可或缺。但软件固件以及恶意代码大都不开源,进而极大增加人为分析工作量,因此在二进制代码中自动化识别密码算法有着广泛的需求。
[0003]在大部分密码算法当中,循环结构往往包含算法核心语义。但由于代码运行架构、编译选项以及循环优化等因素的广泛存在,相同源码的循环结构在二进制代码层面也会出现巨大差异,因此这类问题成了密码算法识别的关键挑战。

技术实现思路

[0004]本专利技术针对现有技术在不同编译器、不同编译器版本以及不同优化选项下二进制文件循环结构差异性问题,提出一种基于循环分析和二进制相似代码分析的密码函数识别方法,在保证不同编译器版本和优化选项下密码算法识别准确性的同时,兼顾分析的高效性、可扩展性。提高标准密码算法识别在这类场景下的准确性的同时,减少分析过程的时间开销,并有着跨编译配置和跨不同架构的优势。
[0005]本专利技术是通过以下技术方案实现的:
[0006]本专利技术涉及一种基于循环分析和二进制相似代码分析的密码函数识别方法,对待分析的二进制函数代码进行模拟执行,提取其在模拟执行过程中的动态执行特征序列,通过计算其与特征库中密码函数特征的雅卡尔系数(JaccardIndex)作为相似性分数,将与待分析函数相似性分数最高的特征库中密码函数作为识别结果,实现密码算法自动化检测。
[0007]所述的函数代码,优先经过预处理,即将二进制代码文件Binary_File转换为反汇编文件ASM_File后将得到的反汇编文件ASM_File按照函数和代码块进行识别划分与提取,并提取ASM_File中的二进制代码基本信息;再对二进制函数进行静态分析,识别函数中存在的循环结构信息,并进一步提取所有函数的参数信息以及返回值信息。
[0008]所述的模拟执行是指:结合函数代码的参数信息、返回值信息,将划分好的函数块翻译到中间语言环境下进行插桩,并进行解释执行或翻译至分析工具所在机器架构环境下执行,进而提取得到函数块的动态执行特征序列。
[0009]所述的雅卡尔系数其中:|S1|和|S2|为特征序列S1和S2的序列长度。|S1∩S2|为两个特征序列的最长公共子序列(Longest Common Subsequence,LCS)的长度。
[0010]所述的二进制代码基本信息提取,具体包括:
[0011]S21、根据ASM_File文件中的函数开始标识和结束标识,或结合各类汇编分析软件
识别提取函数块信息;
[0012]S22、根据函数块中分支指令信息,或结合各类汇编分析软件识别提取函数内的基本快信息;
[0013]S23、提取并计算得到数据段(.data)、未初始化数据段(.bss)、只读数据段(.rodata)、库函数链接表段(.plt)以及代码段(.text)的起始地址偏移值和结束地址偏移值;
[0014]S24、获取ASM_File整个文件的起始虚拟地址和结束虚拟地址;
[0015]S25、获取所有基本块与其子基本块地址的对应关系;
[0016]所述的循环结构信息,具体通过以下方式得到:
[0017]S31、识别所有基本块若处在循环结构中时可能的出口地址,若基本块存在超过一个子基本块,则其所有子基本块地址即为其出口地址;若基本块只有一个子基本块,则将其子基本块的出口地址作为该基本块的出口地址;
[0018]S32、使用深度优先遍历算法,检查函数中存在的回边,以此识别所有函数中存在的循环结构;
[0019]S33、在识别到的循环结构中,查找比较指令所在基本块;
[0020]S34、在比较指令所在基本块中识别循环常数,记录常数次数循环结构中比较指令所在基本块与循环常数的映射信息。
[0021]所述的所有函数的参数信息以及返回值信息,具体通过以下方式得到:
[0022]S41、根据代码所属架构的调用约定,判断是否有参数寄存器在被赋值之前被使用,若有则被认为是传递了参数;
[0023]S42、根据代码所属架构的调用约定,判断是否有当前栈帧以外的栈地址(非返回地址、栈保护参数和相关寄存器上下文信息)被读取使用,若有则被认为是传递了参数;
[0024]S43、根据代码所属架构的调用约定,检查当前分析函数的被调用点之后的所有执行路径中,是否有在返回值寄存器被赋值前直接使用,若有则认为是当前分析函数存在返回值,否则认为返回值为void。
[0025]所述的模拟执行,具体包括:
[0026]S51、每次对一个函数块的二进制代码进行分析,首先随机生成在一次相似性分析过程中固定的输入参数序列,然后根据所述第四步分析得到的参数情况,按照参数顺序依次赋值,再开始模拟执行过程;
[0027]所述的随机参数值,在整个分析过程中不同二进制文件、不同函数块的模拟执行过程中,所用的随机参数序列保持一致,以此保证不同二进制代码、不同函数模块的可比性。
[0028]所述的模拟执行过程具体为:将二进制代码翻译成中间语言为后进行插桩,用于模拟执行过程中记录动态行为特征,再利用模拟器对中间语言做解释执行或翻译到分析器所在架构代码做模拟执行,以此可以做到针对不同架构代码进行分析。
[0029]所述的模拟执行过程,当遇到内存崩溃或越界情况时的处理方法具体包括:映射一个内存崩溃处理内存,将对不合法内存的读写操作转换到映射后的内存中。
[0030]所述的模拟执行过程,当遇到循环结构的处理方法具体包括:记录函数中基本块的执行信息,识别到重复执行的情况时,根据识别到的出口地址信息,选取上一执行块的最
近未被执行的出口地址对应的基本块作为下一执行块来退出循环;当识别到的重复执行的基本块存在识别到的循环常数映射信息时,则不直接退出循环,而是根据循环常数进行重复执行,最后再根据出口地址信息退出循环操作。
[0031]所述的模拟执行过程,当遇到函数调用指令call和jmp的处理方法具体包括:若调用本二进制文件中的其他函数,则持续对调用函数进行模拟执行;若调用库函数,则按照所述步骤S52记录库函数调用特征,并跳过该调用操作。
[0032]S52、在模拟执行的过程中,按照执行顺序来提取内存读写特征、指令常数读取特征、库函数调用特征、分支判断特征以及返回值特征,构成当前执行序列。
[0033]所述的内存读写特征包括:数据段(.data)地址内存读写、未初始化数据段(.bss)地址内存读写、只读数据段(.rodata)地址内存读取以及其他非栈地址且有效的内存地址读取。
[0034]所述的指令常数特征包括:指令中超过16bit的常数记为常数特征。
[0本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于循环分析和二进制相似代码分析的密码函数识别方法,其特征在于,对待分析的二进制函数代码进行模拟执行,提取其在模拟执行过程中的动态执行特征序列,通过计算其与特征库中密码函数特征的雅卡尔系数作为相似性分数,将与待分析函数相似性分数最高的特征库中密码函数作为识别结果;所述的函数代码,优先经过预处理,即将二进制代码文件Binary_File转换为反汇编文件ASM_File后将得到的反汇编文件ASM_File按照函数和代码块进行识别划分与提取,并提取ASM_File中的二进制代码基本信息;再对二进制函数进行静态分析,识别函数中存在的循环结构信息,并进一步提取所有函数的参数信息以及返回值信息。2.根据权利要求1所述的基于循环分析和二进制相似代码分析的密码函数识别方法,其特征是,所述的模拟执行是指:结合函数代码的参数信息、返回值信息,将划分好的函数块翻译到中间语言环境下进行插桩,并进行解释执行或翻译至分析工具所在机器架构环境下执行,进而提取得到函数块的动态执行特征序列。3.根据权利要求1所述的基于循环分析和二进制相似代码分析的密码函数识别方法,其特征是,所述的雅卡尔系数其中:|S1|和|S2|为特征序列S1和S2的序列长度;|S1∩S2|为两个特征序列的最长公共子序列(Longest Common Subsequence,LCS)的长度。4.根据权利要求1所述的基于循环分析和二进制相似代码分析的密码函数识别方法,其特征是,所述的二进制代码基本信息提取,具体包括:S21、根据ASM_File文件中的函数开始标识和结束标识,或结合各类汇编分析软件识别提取函数块信息;S22、根据函数块中分支指令信息,或结合各类汇编分析软件识别提取函数内的基本快信息;S23、提取并计算得到数据段(.data)、未初始化数据段(.bss)、只读数据段(.rodata)、库函数链接表段(.plt)以及代码段(.text)的起始地址偏移值和结束地址偏移值;S24、获取ASM_File整个文件的起始虚拟地址和结束虚拟地址;S25、获取所有基本块与其子基本块地址的对应关系。5.根据权利要求1所述的基于循环分析和二进制相似代码分析的密码函数识别方法,其特征是,所述的循环结构信息,具体通过以下方式得到:S31、识别所有基本块若处在循环结构中时可能的出口地址,若基本块存在超过一个子基本块,则其所有子基本块地址即为其出口地址;若基本块只有一个子基本块,则将其子基本块的出口地址作为该基本块的出口地址;S32、使用深度优先遍历算法,检查函数中存在的回边,以此识别所有函数中存在的循环结构;S33、在识别到的循环结构中,查找比较指令所在基本块;S34、在比较指令所在基本块中识别循环常数,记录常数次数循环结构中比较指令所在基本块与循环常数的映射信息。6.根据权利要求1所述的基于循环分析和二进制相似代码分析的密码函数识别方法,其特征是,所述的所有函数的参数信息以及返回值信息,具体通过以下方式得到:
S41、根据代码所属架构的调用约定,判断是否有参数寄存器在被赋值之前被使用,若有则被认为是传递了参数;S42、根据代码所属架构的调用约定,判断是否有当前栈帧以外的栈地址(非返回地址、栈保护参数和相关寄存器上下文信息)被读取使用,若有则被认为是传递了参数;S43、根据代码所属架构的调用约定,检查当前分析函数的被调用点之后的所有执行路径中,是否有在返回值寄存器被赋值前直接使用,若有则认为是当前分析函数存在返回值,否则认为返回值为void。7.根据权利要求1所述的基于循环分析和二进制相似代码分析的密码函数...

【专利技术属性】
技术研发人员:何弈拓胡易坤陆海宁谷大武
申请(专利权)人:上海交通大学
类型:发明
国别省市:

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

1