CN109918950A - 一种在嵌入式设备中识别二进制函数的应用方法 - Google Patents
一种在嵌入式设备中识别二进制函数的应用方法 Download PDFInfo
- Publication number
- CN109918950A CN109918950A CN201910224951.XA CN201910224951A CN109918950A CN 109918950 A CN109918950 A CN 109918950A CN 201910224951 A CN201910224951 A CN 201910224951A CN 109918950 A CN109918950 A CN 109918950A
- Authority
- CN
- China
- Prior art keywords
- function
- embedded device
- application method
- file
- signature
- 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.)
- Pending
Links
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种在嵌入式设备中识别二进制函数的应用方法,包含以下步骤:A、对文件进行动态签名;B、对动态签名后的文件进行动态提取特征;C、签名生成;D、可行性分析,本发明在嵌入式设备中识别二进制函数的应用方法使用机器学习模型将函数识别研究者从繁重的特征学习和选择工作中解放出来,同时降低对研究者知识储备的要求。并能够解决传统识别方法无法解决的未知函数识别。
Description
技术领域
本发明涉及嵌入式技术领域,具体是一种在嵌入式设备中识别二进制函数的应用方法。
背景技术
当人们无法得到想要的知识、思想和设计理念时,通常采用逆向工程的方法来获取。随着软件业的发展,逆向工程也被引入软件工程领域。1990年,Chikofisky对软件逆向给出了如下定义:软件逆向工程是分析目标系统,认定系统的组件及其交互关系,并且通过高层抽象或其他的形式来展现目标系统的过程。
计算机技术的不断发展使得信息系统的安全性的更加脆弱。正是这些安全脆弱性导致病毒等不安全代码的产生与泛滥。不安全代码不仅给企业和用户带来巨大经济损失,而且使国家的安全面临着严重威胁。随着Internet的开放性以及信息共享的进一步增强,恶意代码编写者的水平越来越高,他们利用各种隐藏加密技术、模糊变换技术等提高代码的生存能力。
函数识别是一种将二进制代码分类成函数近似原始函数的一种二元分析技术,它是二进制指令、二进制级搜索领域、二进制保护等领域的构建起着重要作用,包括控制流完整性(CFI)。而且,准确的函数识别对那些依赖对复杂二进制推理的逆向工程师至关重要。
数字信息技术和网络技术不断在高速发展,如今,我们已经进入了后PC时代。计算机网络安全问题已经涉及我们的工作和生活中,无处不在。但是后PC时代的大部分计算机的存在形式是非计算机的电子设备,核心部分都是有计算机的,但很多还是以嵌入式的形式。比如家庭当中的家用电器,到办公室的一些远程会议系统,嵌入式系统深入到生活的方方面面,嵌入式软件最为核心的问题自然也是软件安全问题,嵌入式软件由于专用性强,实时性要求高,对硬件依赖度高的特点,对软件安全提出了更高的要求。软件在实现过程中,产生软件安全问题的根本问题是缺陷问题,漏洞是一些危险性较大的缺陷。随着应用的推广,嵌入式软件的数量和种类快速增加,随之而来的软件缺陷和漏洞也在快速增长,给社会带来了一定的经济损失。因此,嵌入式系统的软件安全研究更需要迫切解决。
在嵌入式设备的设计与使用中,ARM微处理器凭借其体积小、低功耗、低成本、高性能等特点,被广泛地运用在工业控制、无线通信、网络应用、消费类电子产品等领域。在分析嵌入式代码的过程中,函数识别是整个分析过程中至关重要的一步,因此研究基于ARM微处理器的函数识别对整个嵌入式代码逆向分析技术来说具有重要的应用价值和意义。在本发明中提出一种新的自动识别算法,通过对指令的二进制编码判断其是否为函数模块的起始地址。
发明内容
本发明的目的在于提供一种在嵌入式设备中识别二进制函数的应用方法,以解决所述背景技术中提出的问题。
为实现所述目的,本发明提供如下技术方案:
一种在嵌入式设备中识别二进制函数的应用方法,包含以下步骤:
A、对文件进行动态签名;
B、对动态签名后的文件进行动态提取特征;
C、签名生成;
D、可行性分析。
作为本发明的进一步技术方案:所述步骤A中的文件是在静态函数识别时建立的与可执行程序中识别出来的函数模块进行比对的一种文件。
作为本发明的进一步技术方案:所述文件的特征代码为函数的前32个字节。
作为本发明的进一步技术方案:所述动态提取特征包括一次特征提取和二次特征提取。
作为本发明的进一步技术方案:所述步骤C采用哈希算法实现。
作为本发明的进一步技术方案:所述签名的位数为160比特串。
与现有技术相比,本发明的有益效果是:本发明在嵌入式设备中识别二进制函数的应用方法使用机器学习模型将函数识别研究者从繁重的特征学习和选择工作中解放出来,同时降低对研究者知识储备的要求。并能够解决传统识别方法无法解决的未知函数识别。
具体实施方式
下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1,一种在嵌入式设备中识别二进制函数的应用方法,包含以下步骤:
A、动态签名;
签名文件是在静态函数识别时建立的可以与可执行程序中识别出来的函数模块进行比对的一种具有特定格式的文件。通过对函数进行深入分析,每一个函数体一般来说是不同的,而且大部分前几个字节也是差异比较大的。所以针对这个特点,本文采取提取函数的前32个字节作为模式文件的特征代码。
B、动态提取特征;
特征提取方式:在目标函数模块的前若干个字节中操作数和操作码是混合存放的,而函数的操作数有时是变化的,不一定是个定值。所以说对于变化的操作数来说,是不能作为特征提取的,针对代码中的外部引用也存在同样的问题。在模式文件的建立过程中应该把这些字节一律设置为通配符,从而只留下不变的部分即操作码和不随着链接或执行而发生变化的操作数。这样提取的代码是不变的,便于识别。
ARM处理器的反汇编代码分为两种形式;
(1)ARM指令:这是一个32位指令集,特征提取过程主要是根据汇编代码所对应的二进制形式有效指令编码提取实现的。
由于loc2000500是不可确定的,所以根据BNE指令的二进制编码格式签名取前8位:1A…。
(2)Thumb指令:这是ARM体系结构除了支持执行效率很高的32位指令之外同时支持的16位指令集,为ARM指令集的一个子集。
由于0xlFFFF34是不可确定的,所以根据Thumb指令下的B指令的二进制编码格式签名为:E..…
基于二进制代码的特征提取主要是首先提取反汇编后的汇编代码,根据相应指令类型(ARM或Thumb指令)、汇编代码的二进制编码格式进行特征代码提取分析,并根据相应的代码格式进行有效代码特征的提取。根据这种特征提取策略,自动生成代码的签名,从而实现动态签名的目的。
链接器优化和代码混淆:可执行程序编译链接的时候,如果不采取优化机制的情况下,其代码序列保持基本稳定。在链接优化的情况下,代码序列可能发生变化,而且甚至导致不能够使用简单的字节匹配来实现识别;代码混淆也是同样的效果,如果代码编写者使用了这项技术就很难对其识别,以致识别率有所下降。特殊函数的处理:在特征提取的时候,有可能不同的函数拥有相同的前32个字节,这是很可能发生的。解决这个问题的方法是对于这种特殊的函数进行二次信息提取,对后面的字节进一步进行特征提取直到能够分别这两个函数为止,然后记录下来二次信息提取的字节数目以及CRC16,当二次特征提取的字节直到末尾还是不能分别那么有两种情况:
第1种情况是一个函数的函数体是另一个函数的前半部分,这样只需把较长的函数提取特征的时候多取一个字节,这样便很容易区分开这两种函数;
第2种情况是这两个函数提取的特征字节完全相同,这就代表着这两个函数的函数体除操作数和外部引用外函数功能是完全相同的,要想完全识别出这两 个函数的名字需要推迟识别,在确认操作数或是引用的情况下才能真正分别出来。由于这种情况下函数的功能是相同的,这样识别出函数体已经可以有效的理解程序功能,所以当遇到这种情况的时候,本文列出可能的函数名字供用户参考而不是识别出这个函数具体名字是什么。
C、签名生成;
模式文件是由一系列二进制代码组成,一般是使用字符串匹配。但是由于个别模式文件本身可能比较大,而且待识别的整个库容量更是规模不容小觑。即使识别了编译器和编程语言后模式文件的数目大大减小,那这个运算量也是令人比较难以接受的。
哈希算法是一种常用的数字签名算法,也叫数字指纹,可以把一串给定的不超过56个字节的目标代码转换成一组固定长度的惟一标识。一般用于保证数据的真实性和完整性。其主要功能就是对不确定长度的字符串做一个定长比特串的摘要(散列值),这个摘要能够保证任何两个不同的比特串的摘要值是不同的,并且能够惟一标识一个字符串,而且在运行时间方面效率较高。目前常见的哈希算法主要有MD5、SHA-1等。
经过研究FLIRT算法,基于哈希算法提出了一种快速识别模式的方法。针对哈希函数这种特性,首先构造一组有32个字节的随机数表,然后利用一个确定的哈希函数对这组数据进行哈希变换。哈希函数按生成的签名建立一个目标列表,这个目标列表是和随机数表内的值一一对应的,即目标列表的值是随机数表的签名。签名的位数为160比特串。
签名生成以后,得出一个160比特的向量表。通过柔性字符串匹配算法对其进行匹配得出识别结果。
实施例2,在实施例1的基础上,本文在建库的时候把模式文件进行哈希变换,变换后相应的签名对应模式文件的函数名等必要信息,这就构造出了哈希函数一一对应序列。在进行函数识别的过程中,可以对待识别的函数的二进制表示形式进行哈希变换,然后对获得的签名进行字符串匹配从而判别出这是不是一个库文件,如果是便给出函数信息,否则表明这并非一个函数。设M为模式文件集合,s为模式文件的签名,X为待识别的函数模块,Y为识别出来的函数,识别出来的函数集合为K,K = {xlh(x) ∈s},
Y = {yly ∈M ,h(y) = h(x)}。
D、可行性分析
技术路线:假设我们已经访问了二进制代码C,但是代码中没有关于函数f 1,··· ,fn的信息。我们定义以下任务:
(1)函数开始识别:给定c,查找{ f 1,l,··· , f n,l}。换句话说,恢复每个函数第一个字节的位置。
(2)函数结束识别:给定c,查找{ f 1,l1,··· , f n, ln}。换言之,找出二进制文件中n个函数的结尾字节,但没有给出每个函数的长度。
(3)函数边界识别:给定c,查找{( f 1,1, f 1,l1)··· ,(f n,1, f n, ln)}。换句话说,发现每个函数中第一个和最后一个字节的位置。此任务不仅仅是函数开始和结束标识的简单组合。如果函数的开始和结束是分开标识的,那么它们需要正确配对,以便每对函数都包含相同函数的开始和结束。
(4)一般函数识别:给定c,查找{( f 1,1, f 1,2,··· , f 1,l1)··· ,(f n,1,f n,2,··· f n,ln)},即确定文件中的函数数量以及构成每个函数的所有字节。
函数边界识别是函数开始和结束识别的超集,而一般函数识别是所有其它任务的超集。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种在嵌入式设备中识别二进制函数的应用方法,其特征在于,包含以下步骤:
对文件进行动态签名;
对动态签名后的文件进行动态提取特征;
签名生成;
可行性分析。
2.根据权利要求1所述的一种在嵌入式设备中识别二进制函数的应用方法,其特征在于,所述步骤A中的文件是在静态函数识别时建立的与可执行程序中识别出来的函数模块进行比对的一种文件。
3.根据权利要求2所述的一种在嵌入式设备中识别二进制函数的应用方法,其特征在于,所述文件的特征代码为函数的前32个字节。
4.根据权利要求1所述的一种在嵌入式设备中识别二进制函数的应用方法,其特征在于,所述动态提取特征包括一次特征提取和二次特征提取。
5.根据权利要求1所述的一种在嵌入式设备中识别二进制函数的应用方法,其特征在于,所述步骤C采用哈希算法实现。
6.根据权利要求1-5任一所述的一种在嵌入式设备中识别二进制函数的应用方法,其特征在于,所述签名的位数为160比特串。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910224951.XA CN109918950A (zh) | 2019-03-24 | 2019-03-24 | 一种在嵌入式设备中识别二进制函数的应用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910224951.XA CN109918950A (zh) | 2019-03-24 | 2019-03-24 | 一种在嵌入式设备中识别二进制函数的应用方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109918950A true CN109918950A (zh) | 2019-06-21 |
Family
ID=66966372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910224951.XA Pending CN109918950A (zh) | 2019-03-24 | 2019-03-24 | 一种在嵌入式设备中识别二进制函数的应用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109918950A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1818863A (zh) * | 2006-03-13 | 2006-08-16 | 浙江大学 | 嵌入式软件反编译中的静态库函数识别实现方法 |
CN105787368A (zh) * | 2016-02-26 | 2016-07-20 | 武汉大学 | 一种基于函数置乱的rop防御方法与装置 |
CN107704501A (zh) * | 2017-08-28 | 2018-02-16 | 中国科学院信息工程研究所 | 一种识别同源二进制文件的方法及系统 |
-
2019
- 2019-03-24 CN CN201910224951.XA patent/CN109918950A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1818863A (zh) * | 2006-03-13 | 2006-08-16 | 浙江大学 | 嵌入式软件反编译中的静态库函数识别实现方法 |
CN105787368A (zh) * | 2016-02-26 | 2016-07-20 | 武汉大学 | 一种基于函数置乱的rop防御方法与装置 |
CN107704501A (zh) * | 2017-08-28 | 2018-02-16 | 中国科学院信息工程研究所 | 一种识别同源二进制文件的方法及系统 |
Non-Patent Citations (1)
Title |
---|
邱景: "面向软件安全的二进制代码逆向分析关键技术研究", 《中国博士学位论文全文数据库(电子期刊)信息科技辑》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109445834B (zh) | 基于抽象语法树的程序代码相似性快速比较方法 | |
Tufano et al. | Deep learning similarities from different representations of source code | |
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
CN104407872B (zh) | 代码克隆的检测方法 | |
CN113010209A (zh) | 一种抗编译差异的二进制代码相似性比较技术 | |
Xiang et al. | A word-embedding-based steganalysis method for linguistic steganography via synonym substitution | |
CN116149669B (zh) | 一种基于二进制文件的软件成分分析方法、装置以及介质 | |
CN111124487A (zh) | 代码克隆检测方法、装置以及电子设备 | |
US20230161879A1 (en) | Malicious code detection method and apparatus based on assembly language model | |
Al-Wesabi | A smart English text zero-watermarking approach based on third-level order and word mechanism of Markov model | |
Gonzalez et al. | Authorship attribution of android apps | |
CN115617395A (zh) | 一种融合全局和局部特征的智能合约相似性检测方法 | |
Ahuja et al. | On preventing SQL injection attacks | |
CN113609488B (zh) | 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 | |
CN114201756A (zh) | 一种智能合约代码片段的漏洞检测方法和相关装置 | |
CN101377816B (zh) | 匹配规则包含位移指示符的并行多模式匹配的方法及系统 | |
CN106020923B (zh) | SELinux策略的编译方法及系统 | |
Qing et al. | Technique of source code obfuscation based on data flow and control flow tansformations | |
CN109918950A (zh) | 一种在嵌入式设备中识别二进制函数的应用方法 | |
CN117032717A (zh) | 基于字节码相似度的javac编译器安全风险检测方法 | |
CN116522337A (zh) | 一种基于api语义的恶意软件家族无偏检测方法 | |
Adhikari et al. | Using the Strings Metadata to Detect the Source Language of the Binary | |
CN113704108A (zh) | 一种相似代码检测方法及装置、电子设备、存储介质 | |
Liu et al. | Prompt Learning for Multi-Label Code Smell Detection: A Promising Approach | |
Abuhamad et al. | SHIELD: Thwarting Code Authorship Attribution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190621 |
|
WD01 | Invention patent application deemed withdrawn after publication |