Page 292 - 《软件学报》2025年第8期
P. 292

赵浩钧 等: 基于   BERT  与自编码器的概念漂移恶意软件分类优化                                            3715


                 的字节流信息无疑会为后续分析带来开销和准确性上的问题.
                    与一般方法不同, MCBA       不直接对原始二进制流进行数值转换, 而是使用基于反汇编的执行导向的操作码提
                 取方法. MCBA   对原始二进制程序进行反汇编分析, 舍弃一般的文件结构信息、各种数据存储信息、指令操作数
                 信息等, 只保留对指令操作码的关注. 这是因为操作码体现了当前指令的行为, 能够从细粒度反映出程序的行为特
                 点, 且操作码本身也更接近自然语言.
                    与动态分析实际执行程序不同, 静态分析通常很难分析一个程序真实执行路径. 尽管如此, 通过分析静态信息
                 依然可以提取出可能的控制流方向, 在一定程度上可以反映程序的行为特征. 为了尽量地反映程序的执行逻辑,
                 MCBA  通过附加面向行为的分析模块, 按照程序可能的执行路径提取操作码序列, 以捕获比按地址顺序分析的方
                 法更多的上下文语义, 如图        2  所示.

                                            …   A     B   c C    D  E
                                          程序入口点
                                               …
                                             push  edi   跳转
                                             mov  edi, eax
                                         A   cmp  eax, esi
                                             jnb  short loc_401C4D
                                             call  eax
                                               …
                                            顺序执行
                                                            …
                                                       B
                                                         mov  eax, [edi]  跳转
                                                         test  eax, eax
                                                         jz  short loc_401C46
                                               …         call  eax
                                                            …
                                             pop  edi
                                          E  pop   esi
                                             retn                            C
                                                         顺序执行
                                                            …
                                                         push  ebp       …
                                                         mov   ebp, esp
                                                       D  sub  esp, 28h  push  0FFFFFFFFh
                                                         mov   [ebp+var_4], ecx  call  ds:CloseHandle
                                                         mov  eax, [ebp+arg_0]
                                                         mov  ecx, [eax+10h]  …
                                                            …
                                               图 2 执行导向的操作码序列提取

                    MCBA  首先扫描并存储目标程序的入口点. 对于可能有多个入口点的程序, MCBA                       一次性存储所有入口点,
                 然后对所有入口点依次分析. MCBA           从入口点地址开始, 按执行顺序分析接下来的所有指令信息, 并存储操作码
                 助记符. 当当前指令为跳转指令时, MCBA           获取指令的操作数对象        (即跳转地址) 并进行重定位后继续分析指令序
                 列, 以尽可能按照指令的执行顺序进行分析. 特别地, 在每一次重定位前, MCBA                     将当前指令的地址存储在一个动
                 态维护的返回地址队列中, 以方便在分析完重定位后的指令及其后续指令后进行地址恢复, 继续分析先前未分析
                 完的代码块. 此外, 为了避免分析陷入循环分支跳转, 且能全面覆盖可能执行的指令, MCBA                         在每次跳转前检查当
                 前的指令地址是否存在于返回地址队列中, 如果存在则不进行跳转, 直接继续顺序分析. 需要注意的是, 由于静态
                 分析无法获取运行时的数据状态, 因此无法确定各种分支的判断条件, 所以                       MCBA  旨在尽可能按执行逻辑提取操
                 作码序列, 对可能执行的指令进行覆盖, 但不强求对所有可能的执行路径进行覆盖. 当当前指令为函数调用指令
                 时, 首先判断调用指令的操作数是用户函数还是系统函数: 对于用户函数, 则执行与跳转指令相同的分析; 对于系
                 统函数, 则将系统函数名进行保存, 添加到当前操作码序列中. 通过上述逻辑, 可以在保证分析效率的前提下有效
                 地防止分析陷入循环死锁, 覆盖循环分支中的所有有效指令地址. 此外, 由于每次分支分析结束后从返回地址队列
                 中的跳转地址开始继续分析, 不需要对跳转之前的重复前置指令进行重复分析, 避免了程序分析中可能出现的路
                 径爆炸问题.
                    MCBA  最终输出包含丰富程序上下文语义的操作码序列                 (包括部分系统函数名字符串), 并将其存储以作为下
                 一阶段的输入. 与直接从原始二进制流中提取操作码相比, 基于反汇编的执行导向的操作码提取可以以简化、精
                 准的方式将目标程序转换为包含上下文关系的操作码序列文本.

                 3.2   基于  BERT  滑动窗口的向量嵌入
                    在向量嵌入阶段, 需要将静态分析阶段获得的具有细粒度程序上下文语义的操作码序列转换为适合神经网络
   287   288   289   290   291   292   293   294   295   296   297