李继中,蒋烈辉,舒 辉
(1.信息工程大学,河南 郑州450002;2.数学工程与先进计算国家重点实验室,河南 郑州450002)
二进制代码中的密码算法技术主要分为静态识别和动态识别2种[1,2],静态识别主要采用特征字匹配[3]和基于指令统计属性[4]的筛选,具有识别效率高、误报率较高的特点;动态识别是在对目标代码执行指令监控记录的基础上,针对指令序列采用累加百分比[5]进行密码函数大致位置定位,针对指令中的内存数据和寄存器数据进行密码算法动态特征字识别[6],由于动态记录信息庞大,造成识别效率不高,但识别准确性较高。
文献 [7,8]中指出循环是密码函数实现代码中的重要特征之一,识别代码中的循环特征对于密码函数的筛选与定位具有重要作用。本文详细分析了密码算法循环特征产生机理,分别针对控制循环结构和指令序列循环提出了识别算法。
密码算法在设计中,通常会采用循环模式实现加解密功能。根据循环存在的粒度不同,密码算法循环特征可分为2种:密码函数内部循环;加解密分组循环。在程序执行流程中,密码函数内部循环包含于加解密分组循环内部。
(1)密码函数内部循环
密码函数内部循环是指在密码函数在设计时,使用相同或类似的功能函数对数据进行反复操作,在Hash函数和分组密码中体现的比较明显。逻辑表达式是构造Hash函数的重要组件,代码实现时会反复循环运用该类表达式,为了提高执行效率,Hash函数代码实现时通常进行循环展开;……