硬件地点存储形式为dword,当匹配了硬件地点后,需要举办二次匹配,定位出挪用代码,流程如下所示:
图5 在文件xxxH处匹配地点乐成
Step4:对两处匹配功效举办显示,标志匹配处在文件中的地点。
由图1明明可以看出,同一型的指令如MOV和MVN的呆板码布局险些一样,差异型的指令如CMP和ADD的指令布局差别较大,所以对付差异指令的匹配该当具有针对性。团结ARM 32/16位指令布局,本文提出半定型建模匹配方法。针对差异的指令举办预匹配,即第一步仅匹配特征区域,对付不体贴的区域举办选择性忽视,只有当预匹配乐成后对该指令举办深层匹配。以32位指令为例,将单一32位二进制码拆分成若干位段,特征区域地址位段将其称作子串,举办信息匹配时,仅需对子串举办比拟。个中数据类处理惩罚指令的半建模匹配位段如图2所示。
传统的单模式匹配算法主要有BF,KMP,BM算法及Sunday算法。BF算法实现简朴,但匹配效率很低;KMP算法比BF算法有所改造;BM算法例比KMP算法的检测速度快3~5倍[5];在短模式匹配中,Sunday是今朝速度最快的算法[6]。这些传统要领不适合于二进制文件的信息匹配[7],也没有重定位成果。因此,本文团结ARM指令架构特点,提出半定型匹配算法,通过尝试证明白该算法的靠得住性和高效性。
图1 ARM呆板码指令名目
Step2:向上匹配E5 9F ** **,匹配乐成时,取当前地点为PU。取出Char[2]第4位记为ror_num,将Char[3]转换成32位无标记整形,并向右轮回移位ror_num*2位,获得32位偏移值,记为offset。若offset大于file_len,则offset需改为Char[2]低4位与Char[3]拼接而成。计较PU+8+offset是否便是P,相等则返回PU并进入step4,错误则继承向上匹配,直至文件首。向上匹配失败,则进入step3。
Step1:计较匹配文件总长度,记为file_len,匹配处地点P小于file_len一半,进入step2,不然进入step3。
4c\&时间 /ns\&10 629 665\&6 377 799\&1 878 992\&1 253 660\&掷中次数\&10 393\&10 393\&10 323\&10 323\&16位:
1 半定型建模
4 尝试与阐明
Step3:向下匹配E5 1F ** **,匹配乐成时,取当前地点为PD。利用step2中要领得出offset。计较PD+8?offset是否便是P,相等则返回PD并进入step4,错误则继承向下匹配,直至文件竣事。
举办二进制信息匹配的进程中,对付这些呆板码可以回收半定型建模方法举办匹配定位,即针对需要匹配的指令,只匹配有意义的位段,如第一步只匹配执行条件、指令标志码等,而当即数或寄存器等信息按照需要举办匹配,这样可以极大地提高匹配效率。
3 敏感信息检测模子
源代码大概千差万别,但颠末东西编译成汇编语言时,具有极大的相似性。一是主要表此刻高级语言指令多样,并且还在不绝扩展,但汇编指令有限,单一的高级语言措施常常由多条汇编语言组合而成,这些汇编指令很相似。二是表此刻呆板编译的进程中会将代码举办优化,使其切合尺度编程名目,这样使得编译生成的汇编语言布局相似。ARM数据类指令名目理会,如图1所示。个中,cond暗示执行条件;I暗示shifter_operand是当即数照旧寄存器;Opcode是指令标志码;S暗示执行功效是否影响CPRS;Rn暗示源寄存器;Rd暗示方针寄存器;shifter_operand暗示源操纵数。
图3 半定型匹配布局
2 半定型匹配算法
4c 00\&时间 /ns\&5 866 039\&4 512 338\&1 270 442\&908 382\&掷中次数\&70\&70\&11\&11\&24位:
图6 敏感信息检测模子
对付硬件地点的赋值有两种指令,一种利用MOV指令,另一种利用LDR伪指令。MOV要求当即数必需可由8位当即数偏移获得,可利用全匹配方法搜寻定位;LDR指令回收地点挪用方法,对付所需赋值的当即数只要满意32位就可以。假设在文件某处产生匹配时[S[i~i+3]=T[j~j+3],][1≤i≤N,][1≤j≤M。]如图5所示。
HSM算法的匹配执行方法回收自左向右的方法,每32位对齐,假设在产生不匹配时[S[i]≠T[j],][1≤i≤N,][1≤j≤M,]如图4所示。
表1 匹配算法机能比拟
裸机下的开拓进程中,开拓者可以采纳汇编代码与高级代码殽杂编程,基于汇编的代码在编译后会举办优化,存在代码布局的微小改变;对付高级语言,开拓人员只认真挪用函数完成措施编写,编译器会自动生成优化后的汇编代码。基于高级语言的源代码颠末东西编译后首先生成了ELF文件,由于ELF文件中包括了调试信息,所以可以反汇编成ASM文件。在有OS的嵌入式ARM中,可以直接运行ELF文件。可是在无OS的嵌入式ARM中,当处理惩罚器取出ELF中包括的调试信息时,将无法响应。所觉得了能在无OS条件下执行,将ELF中的调试信息去除,生成BIN文件。这时的BIN文件无法反汇编,从而不能利用传统要领举办代码阐明。本文提出对BIN中的敏感信息举办匹配定位,主要是针对硬件底层模块的定位,其模子如图6所示。
图4 算法不匹配
[算法比拟\&BM\&Sunday\&32 b BF\&HSM\&8位:
测试情况为VMware10下的Red Hat Enterprise Linux 6,内核版本为2.6.39,内存1.3 GB,宿主机为i5?4200M 2.5 GHz,测试样本为U?boot 234 KB Bin文件,尝试平台为TQ2440。选取BM、Sunday算法以及每次移动32 b的BF算法,与半定型算法HSM举办匹配效率比拟,对敏感信息,即要害寄存器地点举办匹配定位,尝试功效如表1所示。
从Char[0]到Char[3]依次匹配,当呈现不匹配则继承匹配下一组主串的Char[0],直至匹配文件竣事。
4.1 算法机能
(2) 半定型匹配模式
当前跟着恶意代码数量的增多,病毒库越来越复杂,操作传统的模式匹配算法导致淹灭的时间不绝增大,已经不能满意实际应用。别的,跟着恶意代码编写技能的成长,当前的恶意代码大多回收加密等技能对自身举办掩护,这样就更进一步低落了传统检测要领的精确性[3]。为了办理这一问题,最有效的要领是归纳总结出一类恶意代码的行为特征,将传统的二进制特征匹配晋升到行为特征匹配,才气操作尽大概少的特征检测出尽大概多的恶意代码[4]。常见嵌入式设备节制模块有处理惩罚器模式配置、看门狗开关、间断开关、MMU节制、时钟节制等,这些模块的节制进口都是敏感信息,通过对BIN文件这些敏感信息的匹配可以有效地对代码大概存在的恶意操纵举办预警。
半定型算法分为两种事情模式。第一种是全匹配模式,即匹配32位字符数据;第二种是半定型匹配模式,即先匹配Char[0]和Char[1],判定指令名目,称之为预匹配,当指令范例匹配乐成后,对Char[2]和Char[3]举办计较,得出偏移量,称之为二次匹配。
图2 半定型匹配子串
① 当[S[i+4]=T[j],]移动间隔为4,即将[T]与下一组32位指令举办比对。
(1) 全匹配模式
传统的代码检测,利用各类模式匹配要领,实现要领归结为字符串匹配问题。由BF算法从左向右的逐字节较量,到Sunday算法从右向左较量的演变,办理了尽大概跳过更多的字符,加快匹配的问题。但这种方法,对付嵌入式的二进制代码检测而言并不高效。以ARM为例,其支持ARM和THUMB两种指令模式,别离为32位和16位代码名目。若干字节的跳转,在许多时候没有意义。针对ARM的代码检测,其步长就该当牢靠为32或16,所以本文针对ARM二进制文件的非凡性,提出半定型匹配算法HSM,如图3所示。
② 当[S[i+4]≠T[j]]时,比对[S[i+8]]是否与[T[j]]相等,相等则移动间隔为8,不相等则继承取下一组32位指令的前8位举办比拟。
ARM数据类指毕业硕士毕业论文令格式解析
毕业论文库:计算机 时间:2016-10-11 点击:
次