CN116910770A - 一种基于密度的固件基址识别系统及方法 - Google Patents
一种基于密度的固件基址识别系统及方法 Download PDFInfo
- Publication number
- CN116910770A CN116910770A CN202311174442.3A CN202311174442A CN116910770A CN 116910770 A CN116910770 A CN 116910770A CN 202311174442 A CN202311174442 A CN 202311174442A CN 116910770 A CN116910770 A CN 116910770A
- Authority
- CN
- China
- Prior art keywords
- address
- firmware
- list
- density
- address list
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000003860 storage Methods 0.000 claims abstract description 44
- 238000000605 extraction Methods 0.000 claims abstract description 40
- 238000001914 filtration Methods 0.000 claims abstract description 25
- 238000007781 pre-processing Methods 0.000 claims abstract description 15
- 238000005457 optimization Methods 0.000 claims abstract description 14
- 238000012163 sequencing technique Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 20
- 238000012216 screening Methods 0.000 claims description 4
- 239000000284 extract Substances 0.000 claims description 3
- 210000003813 thumb Anatomy 0.000 description 14
- 238000004458 analytical method Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/572—Secure firmware programming, e.g. of basic input output system [BIOS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
- G06F18/232—Non-hierarchical techniques
- G06F18/2321—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Virology (AREA)
- General Health & Medical Sciences (AREA)
- Probability & Statistics with Applications (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及软件安全中物联网安全领域,公开了一种基于密度的固件基址识别系统及方法,其特征在于,包括预处理模块、提取模块、地址过滤模块和优化输出模块;预处理模块用于判断固件的架构,并识别存储方式;提取模块用于提取固件中字符串的相对地址和绝对地址,得到相对地址列表和绝对地址列表;地址过滤模块用于对提取的相对地址列表和绝对地址列表中的地址分别进行排序,并在排序完成后对绝对地址列表中的地址进行过滤;优化输出模块用于对相对地址列表和绝对地址列表进行基于密度的聚类,找到输入列表中连续数值密度最高的子列表。本发明所公开的系统及方法可以使固件基址的识别更加智能化,加快基址识别的速度,降低对硬件的依赖。
Description
技术领域
本发明涉及软件安全中物联网安全领域,特别涉及一种基于密度的固件基址识别系统及方法。
背景技术
随着计算机技术的快速发展和人们生活便利的需求,物联网已经成为互联网企业生产和科学研究领域的热门方向。物联网将各种物理设备连接到互联网,实现设备之间的信息交流和智能化控制,为人们的生活工作带来巨大的便利和效益。嵌入式设备在物联网中扮演着关键的角色,它们被广泛应用于各个领域,如家居自动化、智能电网、工业自动化、医疗设备等。嵌入式设备通常包含了固件,即嵌入在设备中的软件,用于控制设备的功能和行为。
固件逆向分析是物联网安全研究者在研究中的一个重要环节,逆向分析固件可以帮助理解设备的工作原理、发现潜在的漏洞和安全风险,并进行优化和改进。为了进行有效的固件逆向分析,需要准确识别固件的基地址。固件基址识别是指确定固件在内存中的起始位置,以便正确地解析和分析固件的二进制代码。然而,由于嵌入式设备的多样性和复杂性,固件基址识别一直是一个具有挑战性的问题。
传统的固件基址识别方法包括人工方法和自动化方法。人工方法通过反汇编程序对程序进行人工逆向分析,进而来确定固件的基址。人工方法需要花费较多的时间并且对研究人员的技术要求较高。自动化方法通过分析二进制文件得到一些有用的地址信息,比如函数地址、字符串地址等,然后通过绝对地址与相对地址做差,从而得到固件的基址。自动化方法需要人工介入的地方比动态方法要少,对技术门槛的要求也更低。自动化方法在如何选取合适的绝对地址和相对地址做差这个问题上一直缺少合适的方法。一般方法是通过暴力方法将每一个绝对地址分别减去每一个相对地址,然后利用概率统计的方法得到一个合理的固件基址。由于处理的数据量过大,导致识别速度过慢,对硬件的要求较高。
发明内容
为解决上述技术问题,本发明提供了一种基于密度的固件基址识别系统及方法,以达到使固件基址的识别更加智能化,加快基址识别的速度,降低对硬件的依赖的目的。
为达到上述目的,本发明的技术方案如下:
一种基于密度的固件基址识别系统,包括预处理模块、提取模块、地址过滤模块和优化输出模块;
所述预处理模块用于判断固件的架构,并识别存储方式;
所述提取模块用于提取固件中字符串的相对地址和绝对地址,得到相对地址列表和绝对地址列表;
所述地址过滤模块用于对提取的相对地址列表和绝对地址列表中的地址分别进行排序,并在排序完成后对绝对地址列表中的地址进行过滤;
所述优化输出模块用于对相对地址列表和绝对地址列表进行基于密度的聚类,找到输入列表中连续数值密度最高的子列表。
上述方案中,所述预处理模块包括架构识别单元和存储方式识别单元,所述架构识别单元用于判断固件的架构,所述存储方式识别单元用于识别存储方式是大端存储还是小端存储。
上述方案中,所述提取模块包括字符串识别提取单元、加载指令识别单元和绝对地址提取单元,所述字符串识别提取单元用于识别固件中的字符串,并记录其在固件中的相对地址;所述加载指令识别单元用于识别固件中对字符串进行加载的指令,识别到的加载指令被送到绝对地址提取单元;所述绝对地址提取单元用于对加载指令中包含的绝对地址信息进行提取。
上述方案中,所述优化输出模块包括密度聚类单元和基址识别单元;所述密度聚类单元用于对相对地址列表和绝对地址列表进行基于密度的聚类,所述基址识别单元用于根据聚类的结果进行基址的识别。
一种基于密度的固件基址识别方法,采用如上所述的一种基于密度的固件基址识别系统,包括如下步骤:
步骤一,预处理模块通过架构识别单元来判断固件的架构,通过存储方式识别单元来识别存储方式是大端存储还是小端存储;
步骤二,提取模块负责首先通过字符串识别提取单元识别固件中的字符串,并记录其在固件中的相对地址;然后通过加载指令识别单元识别固件中对字符串进行加载的指令,每当加载指令识别单元识别到一个加载指令,就会将其送到绝对地址提取单元,对这个加载指令中包含的绝对地址信息进行提取;最后绝对地址提取单元对加载指令中包含的绝对地址信息进行提取,最终得到相对地址列表和绝对地址列表;
步骤三,地址过滤模块首先将相对地址列表和绝对地址列表的地址分别进行从小到大的排序,然后在排序完成后,对绝对地址列表中的地址进行过滤,过滤的规则是地址的大小不能大于基址加上文件的大小;
步骤四,经过地址过滤模块之后,优化输出模块中的密度聚类单元负责对相对地址列表和绝对地址列表开始进行基于密度的聚类,找到输入列表中连续数值密度最高的子列表;然后,基址识别单元在范围内对基地址进行搜索,进行固件基址的识别。
上述方案中,步骤一中,架构识别单元通过在二进制固件中搜索不同架构函数调用的机器码,统计二进制固件中每个架构函数调用机器码匹配的数量,将匹配数量多的作为该固件架构;对于大小端的判断,存储方式识别单元通过统计二进制固件中匹配大端指令的数量和小端指令的数量来做出判断。
上述方案中,步骤二中,字符串识别提取单元通过设置一个阈值,将超过阈值长度的连续ASCII码认为是字符串,将识别到的字符串在二进制固件中的相对位置记录存储下来,作为相对地址。
上述方案中,步骤三中,地址过滤模块的过滤方法包括如下步骤:
(1)获取地址列表的长度,存储在length 中;
(2)初始化变量max_count 和 max_index,用于记录满足条件的地址数量的最大值和对应的索引;
(3)使用循环遍历地址列表中的每个元素,索引从0到length-1;
(4)在循环中,创建一个临时数组temp_arr,其中包含从当前索引到列表末尾的元素;
(5)使用条件筛选,判断temp_arr 中的元素是否在当前元素的值与文件大小之间;
(6)获取满足条件的元素数量,并将其存储在 count 中;
(7)如果count 大于 max_count,则更新 max_count 为 count,同时更新 max_index 为当前的索引i;
(8)在循环结束后,根据找到的max_index,创建一个新的临时数组 temp_arr,其中包含从 max_index 到列表末尾的元素;
(9)将满足条件的元素存储在新的绝对地址列表中。
上述方案中,步骤四中,基于密度的聚类方法如下:密度聚类单元通过设置一个窗口值,然后遍历地址列表,如果当前元素小于等于前一个元素加上窗口值,则说明当前元素与前一个元素在连续数值密度范围内,则将其聚为一类。
上述方案中,步骤四中,基址识别单元的识别方法如下:假设某一个字符串在文件中的偏移量为offset i ,加载到内存中位置为addr j ,假设装载基址为base,则addr j =base- offset i ;设绝对地址列表中的最小值减去相对地址列表中的最小值为x,然后设置基址的范围为[x-0x100000,x+0x100000],在这个范围内遍历可能的基址,用暂定基址与相对地址中每个元素分别相加,再与绝对地址列表求交集;统计满足公式addr j =base-offset i 的元素数,数量最多的组所对应的暂定基址判定为该固件的基址。
通过上述技术方案,本发明提供的一种基于密度的固件基址识别系统及方法具有如下有益效果:
1)本发明在静态识别固件基址技术的基础上,提出了一种基于密度的固件基址识别方法,缩小了候选基址的范围,从而加快固件基址的识别速度,减小了对硬件的依赖。
2)本发明改进了静态方法中的判断二进制固件中字符串的方法,能更准确的识别出二进制固件中的字符串。
3)与其他固件识别技术相比较,本发明开销小,且保证程序执行的稳定性和高实用性。
4)本发明执行效率高,对二进制固件进行信息分析和提取更准确,可以在较短时间内判断出固件基址。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例所公开的一种基于密度的固件基址识别系统示意图;
图2为本发明实施例所公开的一种基于密度的固件基址识别方法流程示意图;
图3为本发明中识别字符加载指令的识别流程图;
图4为本明中绝对地址密度图;
图5为本明中相对地址密度图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
本发明提供了一种基于密度的固件基址识别系统,如图1所示,包括预处理模块、提取模块、地址过滤模块和优化输出模块。
预处理模块用于判断固件的架构,并识别存储方式;预处理模块包括架构识别单元和存储方式识别单元,架构识别单元用于判断固件的架构,存储方式识别单元用于识别存储方式是大端存储还是小端存储。
提取模块用于提取固件中字符串的相对地址和绝对地址,得到相对地址列表和绝对地址列表;提取模块包括字符串识别提取单元、加载指令识别单元和绝对地址提取单元,字符串识别提取单元用于识别固件中的字符串,并记录其在固件中的相对地址;加载指令识别单元用于识别固件中对字符串进行加载的指令,识别到的加载指令被送到绝对地址提取单元;绝对地址提取单元用于对加载指令中包含的绝对地址信息进行提取。
地址过滤模块用于对提取的相对地址列表和绝对地址列表中的地址分别进行排序,并在排序完成后对绝对地址列表中的地址进行过滤;
优化输出模块用于对相对地址列表和绝对地址列表进行基于密度的聚类,找到输入列表中连续数值密度最高的子列表;优化输出模块包括密度聚类单元和基址识别单元;密度聚类单元用于对相对地址列表和绝对地址列表进行基于密度的聚类,基址识别单元用于根据聚类的结果进行基址的识别。
本发明公开了一种基于密度的固件基址识别方法,如图2所示,采用如上的一种基于密度的固件基址识别系统,本发明对ARM、MIPS和Thumb指令集下的基址识别进行阐述,具体包括如下步骤:
步骤一,预处理模块通过架构识别单元来判断固件的架构,通过存储方式识别单元来识别存储方式是大端存储还是小端存储。
不同架构对函数调用的方式和指令也不同,我们把这个作为区分不同架构的标准,来判断固件的架构。比如Thumb 指令集为 PUSH 指令,1个字节是0xb5;在 ARM 指令集下为 STMFD 指令,STMFD机器码的前2个字节是0xe9和0x2d。具体的,架构识别单元通过在二进制固件中搜索不同架构函数调用的机器码,统计二进制固件中每个架构函数调用机器码匹配的数量,将匹配数量多的作为该固件架构;对于大小端的判断,存储方式识别单元通过统计二进制固件中匹配大端指令的数量和小端指令的数量来做出判断。
固件架构不同,其指令和指令编码也不同,为了后续能准确识别加载指令,首先需要对固件的架构进行确认。架构识别单元通过不同架构对函数序言和指令有不同特征来判断固件的架构。在 ARM 架构下,函数序言中保存寄存器的指令为 STMFD 指令,STMFD机器码的前2个字节是0xE9和0x2d。MIPS架构的函数序言为 ADDIU, $SP, X,其中X为一个负数,对应的机器码为0x27,0xBD。Thumb架构的指令都是16位bit的,Thumb 指令集的函数序言一般是通过PUSH 指令保存一些重要的寄存器的值,然后会根据需要调整栈指针(SP寄存器)的位置。PUSH指令的10-16位为10110101,其十六进制是0xB5 。架构识别单元的实现方法是通过在二进制固件中搜索固件中函数序言的特征,统计二进制固件中每个架构函数序言机器码匹配的数量,认为匹配哪种情况的函数序言数量多,该情况就为该固件的架构。该方法首先对ARM和MIPS的情况进行判断,因为Thumb的指令是16位bit组成的,很容易导致误报,而ARM和MIPS的指令是32位bit组成的,拥有更多信息来让我们进行判断。因此架构识别单元在排除另外两种情况后再对Thumb情况进行判断。
存储方式有两种:大端存储、小端存储。以Thumb指令集为例,在大端存储情况下PUSH指令的第一个字节为0xB5,第二字节为寄存器信息,而在小端存储下PUSH指令的第二字节为0xB5,第一字节为寄存器信息。存储方式识别单元负责对固件指令和数据的存储方式进行识别。在架构识别单元识别架构的同时,存储方式识别单元会统计二进制固件中匹配大端存储情况下的函数序言的数量和匹配小端存储情况下函数序言的数量,数量多者为该固件的存储形式。
步骤二,提取模块负责首先通过字符串识别提取单元识别固件中的字符串,并记录其在固件中的相对地址;然后通过加载指令识别单元识别固件中对字符串进行加载的指令,每当加载指令识别单元识别到一个加载指令,就会将其送到绝对地址提取单元,对这个加载指令中包含的绝对地址信息进行提取;最后绝对地址提取单元对加载指令中包含的绝对地址信息进行提取,最终得到相对地址列表和绝对地址列表。
具体的,字符串识别提取单元通过设置一个阈值,将超过阈值长度的连续ASCII码认为是字符串,将识别到的字符串在二进制固件中的相对位置记录存储下来,作为相对地址。
大部分软件由于要与用户进行交互或者输出一些信息提示,其内必然存储有字符串。字符一般是以ASCII码的形式存储在固件中,一个字符占据1字节的大小。本发明认为0x09至0x0D和0x20至0x7E为字符,前者为格式控制字符,后者为常见的数字、字母、标点符号和可打印的特殊字符。字符串识别提取单元首先遍历整个二进制固件,将连续5个为ASCII码的字节认为是候选字符串。候选字符串中可能存在被误识别的字符串,字符串识别模块使用正则表达式对候选字符串进行拆分操作,将字符串拆分成一个个子串。具体的拆分规则是基于候选字符串中的空格、回车等格式控制字符进行切分。如果被切分的字串中存在超过3个连续的数字、字母,就认为该候选字符串为有意义的字符串,将其在二进制固件中的相对位置记录到相对地址列表中。通过筛选过程能减少字符串的误识别,同时减少后续计算基址时的计算量。
固件中的字符串存储在内存中,被使用时需要使用加载指令。加载指令加载字符串的绝对地址,然后字符串才能被使用。本发明列举了ARM、MIPS和Thumb三种情况下的加载指令判断流程,如图3所示。ARM指令集下的字符串一般通过LDR指令进行加载,LDR指令可以用用于从内存中读取数据到寄存器,在LDR指令中包含了数据的在内存中的绝对地址;MIPS指令集下通过LUI指令来实现字符串的加载;Thumb指令集下也是通过LDR指令来加载字符串,与ARM指令集不同的是,Thumb中的LDR是16位的指令而ARM中是32位的指令。加载指令识别模块通过这些指令的机器码在对应的固件中去搜索这些指。在ARM中,LDR指令是32位bit构成的,其第一个字节是一个固定的值为0xE5,通过这个特征去搜索二进制固件中的LDR指令。在MIPS中,LUI指令也是由32位bit构成,第一个字节为固定的0x3C。在Thumb中,LDR指令由16位bit组成。根据Thumb指令的特性,加载常量池的指令的第一字节的前5位为01001,本发明的搜索算法是,取一个字节的数据,然后右移3位后值等于0x09则判断其为LDR指令。由于Thumb指令集的编码较短,仅通过前5位bit进行判断,所以准确度可能受到一定影响。
在识别到二进制固件中的加载指令后,绝对地址提取单元通过分析该指令的后续bit位来获得加载字符串的绝对地址,并将其存入绝对地址列表。在ARM中LDR指令的第一字节是固定的0xE5,最后的12位bit存储的是一个offset偏移量。根据ARM指令的规定LDR指令寻址地址为PC&0xFFFFFFFC+ offset,PC为当前指令运行到的地址,本发明据此公式得到字符串的绝对地址。在MIPS中,LUI指令的前11位bit固定为00111100000,后16位bit为地址的高16位。找到LUI指令后,继续在的4个指令范围内寻找ADDIU指令,该指令的后16位为地址的低16位,将两者拼接起来得到一个32位的绝对地址。在Thumb中,LDR指令的前5位bit固定为01001,后8位bit是一个偏移量。与ARM类似,Thumb规定LDR指令寻址地址为PC&0xFFFFFFFC+ offset * 4,PC为当前指令运行到的地址,据此公式得到字符串的绝对地址。
步骤三,固件经过预处理模块和提取模块后,现在已经掌握了固件的架构、存储方式、相对地址列表和绝对地址列表。接下来,地址过滤模块首先将相对地址列表和绝对地址列表的地址分别进行从小到大的排序,然后在排序完成后,对绝对地址列表中的地址进行过滤,过滤的规则是地址的大小不能大于基址加上文件的大小。具体包括如下步骤:
(1)获取地址列表的长度,存储在length 中;
(2)初始化变量max_count 和 max_index,用于记录满足条件的地址数量的最大值和对应的索引;
(3)使用循环遍历地址列表中的每个元素,索引从0到length-1;
(4)在循环中,创建一个临时数组temp_arr,其中包含从当前索引到列表末尾的元素;
(5)使用条件筛选,判断temp_arr 中的元素是否在当前元素的值与文件大小之间;
(6)获取满足条件的元素数量,并将其存储在 count 中;
(7)如果count 大于 max_count,则更新 max_count 为 count,同时更新 max_index 为当前的索引i;
(8)在循环结束后,根据找到的max_index,创建一个新的临时数组 temp_arr,其中包含从 max_index 到列表末尾的元素;
(9)将满足条件的元素存储在新的绝对地址列表中。
步骤四,经过地址过滤模块之后,优化输出模块中的密度聚类单元负责对相对地址列表和绝对地址列表开始进行基于密度的聚类,找到输入列表中连续数值密度最高的子列表;然后,基址识别单元在范围内对基地址进行搜索,进行固件基址的识别。
如图4和图5所示的绝对地址和相对地址的密度分布,很明显可以发现绝大部分地址很密集的分布在一个小区间范围。根绝这个特点,本发明提出了将地址基于密度聚类。基于密度的聚类方法如下:密度聚类单元通过设置一个窗口值,然后遍历地址列表,如果当前元素小于等于前一个元素加上窗口值,则说明当前元素与前一个元素在连续数值密度范围内,则将其聚为一类。该算法的伪代码实如下:
Algorithm 1 get_highest_density
1: function GET_HIGHEST_DENSITY(input_lst,wnd=0x1000)
2: lst_len← length of input_lst
3: i←1
4: count ← 0
5: start ←0
6: max_start ←0
7: max_end ←length of input_lst-1
8: max_count ← 0
9: while i<lst_len do
10: if input_lst[i-1] + wnd ≥ input_lst[i]then
11: count ← count+1
12: else
13: if count>max_count then
14: max_count ← count
15: max_start ←start
16: max_end ← i
17: end if
18: count ← 0
19: start ← i
20: end if
21: i ← i+1
22: end while
23: return input_lst[max_start: max_end]
24: end function
获取输入地址列表的长度,存储在 lst_len 中。初始化变量 i、count、start、max_start、max_end 和 max_count。其中,i 用于遍历列表元素的索引,count 用于记录当前聚类的地址数量,start 记录当前聚类的起始索引,max_start 和 max_end 记录具有最高密度的聚类的起始和结束索引,max_count 记录最高密度的聚类的地址数量。在 while循环中,从索引 1 开始遍历列表元素,直到遍历完所有元素。在循环中,检查当前元素与前一个元素的差值是否小于等于窗口大小 wnd。如果满足条件,则表示当前元素可以与前一个元素聚类。如果满足聚类条件,将count 加一。如果不满足聚类条件,表示当前聚类结束。在这种情况下,检查当前聚类的地址数量是否大于max_count,如果是,则更新 max_count、max_start 和 max_end。重置 count 为零,并将 start 更新为当前元素的索引,以开始新的聚类。增加 i 的值,以继续遍历下一个元素。循环结束后,返回具有最高密度的聚类的地址子列表,即 input_lst[max_start: max_end]。经过密度聚类后的地址列表去除了很多无意义或无用的地址,可以更快的确定基址。
基址识别单元的识别方法如下:假设某一个字符串在文件中的偏移量为offset i ,加载到内存中位置为addr j ,假设装载基址为base,则addr j =base-offset i ;设绝对地址列表中的最小值减去相对地址列表中的最小值为x,然后设置基址的范围为[x-0x100000,x+0x100000],在这个范围内遍历可能的基址,用暂定基址与相对地址中每个元素分别相加,再与绝对地址列表求交集;统计满足公式addr j =base-offset i 的元素数,数量最多的组所对应的暂定基址判定为该固件的基址。
本发明的基于密度的固件基址识别方法,其依据是程序的字符串引用段总是集中在一起。该方法可以大大提高固件逆向分析过程中基址识别的速度,并且更为智能化。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种基于密度的固件基址识别系统,其特征在于,包括预处理模块、提取模块、地址过滤模块和优化输出模块;
所述预处理模块用于判断固件的架构,并识别存储方式;
所述提取模块用于提取固件中字符串的相对地址和绝对地址,得到相对地址列表和绝对地址列表;
所述地址过滤模块用于对提取的相对地址列表和绝对地址列表中的地址分别进行排序,并在排序完成后对绝对地址列表中的地址进行过滤;
所述优化输出模块用于对相对地址列表和绝对地址列表进行基于密度的聚类,找到输入列表中连续数值密度最高的子列表。
2.根据权利要求1所述的一种基于密度的固件基址识别系统,其特征在于,所述预处理模块包括架构识别单元和存储方式识别单元,所述架构识别单元用于判断固件的架构,所述存储方式识别单元用于识别存储方式是大端存储还是小端存储。
3.根据权利要求1所述的一种基于密度的固件基址识别系统,其特征在于,所述提取模块包括字符串识别提取单元、加载指令识别单元和绝对地址提取单元,所述字符串识别提取单元用于识别固件中的字符串,并记录其在固件中的相对地址;所述加载指令识别单元用于识别固件中对字符串进行加载的指令,识别到的加载指令被送到绝对地址提取单元;所述绝对地址提取单元用于对加载指令中包含的绝对地址信息进行提取。
4.根据权利要求1所述的一种基于密度的固件基址识别系统,其特征在于,所述优化输出模块包括密度聚类单元和基址识别单元;所述密度聚类单元用于对相对地址列表和绝对地址列表进行基于密度的聚类,所述基址识别单元用于根据聚类的结果进行基址的识别。
5.一种基于密度的固件基址识别方法,采用如权利要求1-4任一所述的一种基于密度的固件基址识别系统,其特征在于,包括如下步骤:
步骤一,预处理模块通过架构识别单元来判断固件的架构,通过存储方式识别单元来识别存储方式是大端存储还是小端存储;
步骤二,提取模块负责首先通过字符串识别提取单元识别固件中的字符串,并记录其在固件中的相对地址;然后通过加载指令识别单元识别固件中对字符串进行加载的指令,每当加载指令识别单元识别到一个加载指令,就会将其送到绝对地址提取单元,对这个加载指令中包含的绝对地址信息进行提取;最后绝对地址提取单元对加载指令中包含的绝对地址信息进行提取,最终得到相对地址列表和绝对地址列表;
步骤三,地址过滤模块首先将相对地址列表和绝对地址列表的地址分别进行从小到大的排序,然后在排序完成后,对绝对地址列表中的地址进行过滤,过滤的规则是地址的大小不能大于基址加上文件的大小;
步骤四,经过地址过滤模块之后,优化输出模块中的密度聚类单元负责对相对地址列表和绝对地址列表开始进行基于密度的聚类,找到输入列表中连续数值密度最高的子列表;然后,基址识别单元在范围内对基地址进行搜索,进行固件基址的识别。
6.根据权利要求5所述的一种基于密度的固件基址识别方法,其特征在于,步骤一中,架构识别单元通过在二进制固件中搜索不同架构函数调用的机器码,统计二进制固件中每个架构函数调用机器码匹配的数量,将匹配数量多的作为该固件架构;对于大小端的判断,存储方式识别单元通过统计二进制固件中匹配大端指令的数量和小端指令的数量来做出判断。
7.根据权利要求5所述的一种基于密度的固件基址识别方法,其特征在于,步骤二中,字符串识别提取单元通过设置一个阈值,将超过阈值长度的连续ASCII码认为是字符串,将识别到的字符串在二进制固件中的相对位置记录存储下来,作为相对地址。
8.根据权利要求5所述的一种基于密度的固件基址识别方法,其特征在于,步骤三中,地址过滤模块的过滤方法包括如下步骤:
(1)获取地址列表的长度,存储在length 中;
(2)初始化变量max_count 和 max_index,用于记录满足条件的地址数量的最大值和对应的索引;
(3)使用循环遍历地址列表中的每个元素,索引从0到length-1;
(4)在循环中,创建一个临时数组temp_arr,其中包含从当前索引到列表末尾的元素;
(5)使用条件筛选,判断temp_arr 中的元素是否在当前元素的值与文件大小之间;
(6)获取满足条件的元素数量,并将其存储在 count 中;
(7)如果count 大于 max_count,则更新 max_count 为 count,同时更新 max_index为当前的索引i;
(8)在循环结束后,根据找到的max_index,创建一个新的临时数组 temp_arr,其中包含从 max_index 到列表末尾的元素;
(9)将满足条件的元素存储在新的绝对地址列表中。
9.根据权利要求5所述的一种基于密度的固件基址识别方法,其特征在于,步骤四中,基于密度的聚类方法如下:密度聚类单元通过设置一个窗口值,然后遍历地址列表,如果当前元素小于等于前一个元素加上窗口值,则说明当前元素与前一个元素在连续数值密度范围内,则将其聚为一类。
10.根据权利要求5所述的一种基于密度的固件基址识别方法,其特征在于,步骤四中,基址识别单元的识别方法如下:假设某一个字符串在文件中的偏移量为offset i ,加载到内存中位置为addr j ,假设装载基址为base,则addr j =base-offset i ;设绝对地址列表中的最小值减去相对地址列表中的最小值为x,然后设置基址的范围为[x-0x100000,x+0x100000],在这个范围内遍历可能的基址,用暂定基址与相对地址中每个元素分别相加,再与绝对地址列表求交集;统计满足公式addr j =base-offset i 的元素数,数量最多的组所对应的暂定基址判定为该固件的基址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311174442.3A CN116910770B (zh) | 2023-09-13 | 2023-09-13 | 一种基于密度的固件基址识别系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311174442.3A CN116910770B (zh) | 2023-09-13 | 2023-09-13 | 一种基于密度的固件基址识别系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116910770A true CN116910770A (zh) | 2023-10-20 |
CN116910770B CN116910770B (zh) | 2023-12-19 |
Family
ID=88363374
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311174442.3A Active CN116910770B (zh) | 2023-09-13 | 2023-09-13 | 一种基于密度的固件基址识别系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116910770B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100088305A1 (en) * | 2008-10-03 | 2010-04-08 | David Fournier | Detection of Confidential Information |
CN102687126A (zh) * | 2009-12-30 | 2012-09-19 | 国际商业机器公司 | 在多内核环境中有效分配引用的全局唯一标识符 |
CN107851023A (zh) * | 2015-08-14 | 2018-03-27 | 高通股份有限公司 | 基于指令编码确定预提取指令 |
CN110866166A (zh) * | 2019-11-14 | 2020-03-06 | 北京京航计算通讯研究所 | 面向海量数据采集的分布式网络爬虫性能优化系统 |
CN112149136A (zh) * | 2020-09-23 | 2020-12-29 | 北京顶象技术有限公司 | loT设备固件漏洞的检测方法、系统及电子设备 |
CN113327639A (zh) * | 2021-05-26 | 2021-08-31 | 翱捷科技股份有限公司 | 一种基于lvgl的固件存储读取方法及装置 |
CN113767371A (zh) * | 2019-05-10 | 2021-12-07 | 国际商业机器公司 | 用于高性能向量处理的地址生成 |
CN113987517A (zh) * | 2021-11-03 | 2022-01-28 | 北京天融信网络安全技术有限公司 | 基于物联网固件的漏洞挖掘方法、装置、设备及存储介质 |
-
2023
- 2023-09-13 CN CN202311174442.3A patent/CN116910770B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100088305A1 (en) * | 2008-10-03 | 2010-04-08 | David Fournier | Detection of Confidential Information |
CN102687126A (zh) * | 2009-12-30 | 2012-09-19 | 国际商业机器公司 | 在多内核环境中有效分配引用的全局唯一标识符 |
CN107851023A (zh) * | 2015-08-14 | 2018-03-27 | 高通股份有限公司 | 基于指令编码确定预提取指令 |
CN113767371A (zh) * | 2019-05-10 | 2021-12-07 | 国际商业机器公司 | 用于高性能向量处理的地址生成 |
CN110866166A (zh) * | 2019-11-14 | 2020-03-06 | 北京京航计算通讯研究所 | 面向海量数据采集的分布式网络爬虫性能优化系统 |
CN112149136A (zh) * | 2020-09-23 | 2020-12-29 | 北京顶象技术有限公司 | loT设备固件漏洞的检测方法、系统及电子设备 |
CN113327639A (zh) * | 2021-05-26 | 2021-08-31 | 翱捷科技股份有限公司 | 一种基于lvgl的固件存储读取方法及装置 |
CN113987517A (zh) * | 2021-11-03 | 2022-01-28 | 北京天融信网络安全技术有限公司 | 基于物联网固件的漏洞挖掘方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
陈荔城;崔泽汉;包云岗;陈明宇;沈林峰;梁祺;: "一种监测函数语义信息访存地址序列的方法", 计算机研究与发展, no. 05 * |
Also Published As
Publication number | Publication date |
---|---|
CN116910770B (zh) | 2023-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112347284B (zh) | 一种组合商标图像检索方法 | |
CN1531692A (zh) | 用于处理大量字符的高效排序元素结构 | |
CN102867049B (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN109033833B (zh) | 一种基于多特征与特征选择的恶意代码分类方法 | |
US5125039A (en) | Object recognition system | |
CN110196968B (zh) | 一种基于特定字符串查找的简体中文编码方式自动识别系统及方法 | |
CN109753517A (zh) | 一种信息查询的方法、装置、计算机存储介质及终端 | |
CN112528030A (zh) | 一种用于文本分类的半监督学习方法和系统 | |
CN112116950B (zh) | 基于深度度量学习的蛋白质折叠识别方法 | |
CN1124537C (zh) | 联机字符输入方法和设备 | |
CN115100739B (zh) | 人机行为检测方法、系统、终端设备及存储介质 | |
CN1121605A (zh) | 信息处理方法和设备 | |
CN110956271B (zh) | 一种海量数据的多级分类方法及装置 | |
CN116910770B (zh) | 一种基于密度的固件基址识别系统及方法 | |
US20100057809A1 (en) | Information storing/retrieving method and device for state transition table, and program | |
JP2693914B2 (ja) | 検索システム | |
CN111090859B (zh) | 一种基于图编辑距离的恶意软件检测方法 | |
CN114692603A (zh) | 基于crf的敏感数据识别方法、系统、装置及介质 | |
CN112651026B (zh) | 一种具有业务安全问题的应用版本挖掘方法及装置 | |
WO2022033130A1 (zh) | 一种json配置文件的编辑保存方法 | |
CN100483402C (zh) | 用于执行高速上下文检索和数据模式特征描述的可编程规则处理设备 | |
CN114490703A (zh) | 一种数据解析方法、装置及计算机可读存储介质 | |
CN114995880B (zh) | 一种基于SimHash的二进制代码相似性比对方法 | |
CN113537195B (zh) | 一种图像文本识别方法、系统和电子设备 | |
CN102402692B (zh) | 一种特征字符串识别方法及系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |