接着上篇Asm2Vec神经网络模型流程继续,接下来探讨具体过程和细节。

一.为汇编函数建模 

二.训练,评估

 

先来看第一部分为汇编函数建模,这个过程是将存储库中的每一个汇编函数建模为多个序列。由于控制流图的原始线性布局覆盖了一些无效的执行路径,不能直接使用它作为训练序列。相反,可以将控制流程图建模为边缘覆盖序列和随机游动,除此之外,还要考虑函数内联等编译器优化。

1.1选择性被扩张. 函数内联这种技术,用被调用函数的主体替换调用指令。扩展了原来的汇编函数,并通过删除调用开销提高了其性能。它显著地修改了控制流图,是汇编克隆搜索[12][13]的一个主要挑战。本文采用让函数调用指令有选择地被调用函数的主体展开,BinGo[12]内联所有标准库调用,以确保语义正确。本文不用内联任何库调用,因为库调用tokens之间的词汇语义已经被模型很好地捕获了(之前提到过的这些训练汇编代码不包含任何库内联调用,直接用普通的汇编代码训练Asm2Vec模型,得到三类tokens(操作数,操作,库函数调用)每一个token的200维数值向量)。对于递归调用的处理,采用被调用函数的入度和出度比作为解耦指标,决定被调用函数是否展开。

设置阈值为0.01,调用别人为出度,被别人调用为入度。如果发现被调用函数比调用函数具有相当的长度,展开后类似于被调用函数。因此,添加一个额外的度量来过滤掉冗长的调用:

如果被调用函数长度占调用函数长度的比小于0.6,或者调用函数小于10行指令,则内联被调用函数。

1.2边缘覆盖.  为了生成一个汇编函数的多个序列,从已经内联扩张的控制流程图中随机采样所有的边,直到原始图中的所有边都被覆盖。对于每条采样边,将它们的汇编代码串联起来,形成一个新的序列。这样,可以确保控制流程图被完全覆盖。及时控制流程图中的基本快被分割或者合并,模型也可以产生类似的序列。

1.3随机路线.  CACompare[13]使用随机输入序列来分析汇编函数的I/O行为,随机输入模拟有效执行流上的随机路线。受此方法的启发,本文通过在已经扩展的CFG上用填充多个随机路线的方式针对一个汇编函数进行扩展汇编序列。Dominator是一个在控制流分析和编译器优化中广泛使用的盖帘。如果一个基本必须通过另一个基本块才能到达另一个基本块,那么该基本块就占主导地位。多个随机游走将使覆盖主导其他块的基本块(主导块)的概率更高。这些主导块可以指示循环机构,也可以覆盖重要分支条件。使用随机路线可以被认为是一种自然方法来优化处理那些主导块。

第二部分主要是训练的过程,评估的流程,以及实验所用的相关配置。

训练过程算法如下:

  算法1针对存储库中的每一个函数,通过边采样和随机路线的方式生成了序列。对于每个序列,它遍历每个指令并应用Asm2Vec更新向量(第10行到第19行)。如算法1,训练过程不需要等效汇编函数之间的ground-truth映射。

  对于给定一个查询ft,用一个向量表示它,初始化为接近0的很小值。然后用神经网络遍历关于此函数的每一个序列和每一条指令。在每一个预测步骤中,针对token t生成的两个向量t,和t1(用来做预测的),只传播错误给查询ft向量,整个训练结束后,就有了函数ft的向量和属于存储库中函数的向量和所有tokens字典D中由token t生成的两个向量t, t1组成的向量相同,搜索匹配的衡量,通过计算向量之间的余弦相似度。

  可扩展性对于二进制克隆搜索很重要,因为存储库中可能有数百万个程序集函数,在大规模的汇编代码上训练Asm2Vec是可行的。一个类似的文本模型已经被证明可以扩展到数十亿个文本样本来训练[21]。在本文研究中,使用成对相似性来搜索最近邻居。在低维固定长度向量之间进行两两搜索是快速的。

Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization(二)的更多相关文章

  1. Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization(一)

    接着上一篇,现在明确问题:在汇编克隆搜索文献中,有四种类型的克隆[15][16][17]:Type1.literally identical(字面相同):Type2.syntactically equ ...

  2. Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization

    用于理解恶意软件的内部工作原理,并发现系统中的漏洞,逆向工程是一种耗费人工的却很重要的技术.汇编克隆搜索引擎是通过识别那些重复的或者已知的部件来帮助逆向工程师的工作,要想设计健壮的克隆搜索引擎是一项挑 ...

  3. [LeetCode] 108. Convert Sorted Array to Binary Search Tree 把有序数组转成二叉搜索树

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...

  4. [LeetCode] 109. Convert Sorted List to Binary Search Tree 把有序链表转成二叉搜索树

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  5. LeetCode 108. Convert Sorted Array to Binary Search Tree (有序数组转化为二叉搜索树)

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 题目 ...

  6. [leetcode]426. Convert Binary Search Tree to Sorted Doubly Linked List二叉搜索树转有序双向链表

    Convert a BST to a sorted circular doubly-linked list in-place. Think of the left and right pointers ...

  7. [LeetCode] Search a 2D Matrix II 搜索一个二维矩阵之二

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  8. [LeetCode] 240. Search a 2D Matrix II 搜索一个二维矩阵 II

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. 【Code clone】Distributed Code Clone Detection Based on Index

    1 摘要  随着软件产业的发展,代码克隆现象越来越常见,随之带来的安全漏洞.可维护性.产权等问题也引起人们重视.代码克隆按照复制程度分为4类:完全复制.修改名称.更换顺序和自实现.现有的代码克隆检测工 ...

随机推荐

  1. BBS论坛(四)

    4.1.cms登录页面csrf保护 (1)Perfect_bbs.py from flask_wtf import CSRFProtect CSRFProtect(app) 添加csrf保护后,现在再 ...

  2. 我对SQL性能优化的看法,对我的文章有提议的欢迎评论!

    影响你的查询速度的原因是什么? 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不够. sql语句设计不合理 没有相应的索引,索引不合理 表数据过大没有有效的分区设计 数据库设计太2,存 ...

  3. 《深入理解Java虚拟机》-----第2章 Java内存区域与内存溢出异常

    2.1 概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任 ...

  4. Python爬虫入门教程 15-100 石家庄政民互动数据爬取

    石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的.网址为 http://www.sjz.gov.cn/col/14900 ...

  5. Linux~常用的命令

    大叔学Linux就一个目的,部署在它上面的服务,如redis,mongodb,fastDFS,cat,docker,mysql,nginx等 下面找一下的命令,来学学这个神秘的操作系统 常用指令 ls ...

  6. EF架构~TransactionScope与SaveChanges的关系

    回到目录 TransactionScope是.net环境下的事务,可以提升为分布式事务,这些知识早在很久前就已经说过了,今天不再说它,今天主要谈谈Savechanges()这个方法在Transacti ...

  7. Docker安装MySQL并配置my.cnf

    1.创建一个临时的mysql,以便复制出my.cnf等数据 $ docker run --restart=always -d -v /opt/data/mysql/:/var/lib/mysql -p ...

  8. putty 默认颜色样式修改 for windows

    一.导出 putty 注册表默认配置文件 1.1 打开注册表:运行 --» regedit 找到 putty 注册表文件: [HKEY_CURRENT_USER\Software\SimonTatha ...

  9. leetcode — candy

    /** * Source : https://oj.leetcode.com/problems/candy/ * * There are N children standing in a line. ...

  10. Linux文件权限与属性详解 之 SUID、SGID & SBIT

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...