使用增强cfg图的被删除符号表的二进制文件神经网络逆向引擎


使用增强cfg图的被删除符号表的二进制文件神经网络逆向引擎

开源项目地址 https://github.com/tech-srl/Nero

问题

  • 汇编指令包含的语意信息太少了。
  • 二进制函数的原始名字比较长。

作者做的东西

image-20210327150406819

  • 获取CFG
  • 为每个call指令重构call-site-like结构
  • 使用pointer-aware切片通过寻找具体值或近似抽象值
  • 转化cfg图为增强调用位置图

二进制程序名称预测

从structured augmented call sites去预测过程名字

augmented call sites Graph 生成

确定参数数量

System-V-AMD64-ABI调用约定使用rdi, rsi, rdx, rcx, r8, r9寄存器传参。

  • 导入函数:通过导入库的调试信息
  • 间接调用能够被解析为内部或者外部调用

确定参数内容

需要先确定指针知识切片数Creating pointer-aware slice-trees。此切片包含为生成寄存器值(参数)而执行的计算步骤。

作者对汇编指令使用下面论文的定义

James R Lyle and David Binkley. 1993. Program slicing in the presence of pointers. In Proceedings of the 1993 Software
Engineering Research Forum. Citeseer, 255–260.

定义下面几个集合

image-20210327193421451

每条指令的操作数放入不同的集合如下图

image-20210328144427269

按照下面的顺序选值(1) concrete value, (2) ARG,(3) GLOBAL, (4) RET, (5) STK

  • ARG为被分析函数接收的参数。
  • rbp开头被设置为STK标签
  • 数字,字符串这个指针被设置为GLOBAL标签

特殊情况的处理,关注2,3。5,6. 以及1里面的自定义函数(作者只处理了api函数 可以优化)

image-20210329095011118

处理别名呵复杂常量表达式。

基于

Yaniv David, Nimrod Partush, and Eran Yahav. 2017. Similarity of Binaries Through Re-optimization. In Proceedings of the
38th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2017). ACM, New York, NY,
USA, 79–94. https://doi.org/10.1145/3062341.3062387

减少参数值,重新优化整个过程和每个切片 举例:xor rax,rax; inc rax; 被简化为 mov rax,1。

对于别名的分析比较简单,作者没有介绍有用的东西。

训练

用下面单词表示词汇表,用api名字作为语料库 。
$$
E^{snames}
$$

为每个标签和常量定义词嵌入
$$
E^{values}
$$
在api向量后面拼接标签和常量的嵌入(序列为参数的序号)。公式表达如下

image-20210329113111375

归一化的填充为特定(no-arg) 符号。

用LSTM嵌入Call Site Sequences

给神经网络的应该是被编码的调用位置序列。

callsite表示上面拼接的词向量。
$$
LSTM_{encoder}
$$
为编码器,对每个词生成嵌入向量。hl包含了前面几个向量的信息。

第二行公式表示正向词嵌入向量拼接反向词嵌入向量(最后一个词向量包含前面几个词的所有信息)

image-20210330163300817

归一化为l为60(60个函数)

结果

image-20210330195959077

模型

seq2seq models 通常基于编码-解码范式


评论
 上一篇
2019红帽杯 粤湾中心 (RHVM) 2019红帽杯 粤湾中心 (RHVM)
code结构code结构 输入 0x0706050403020100 得到的测试结果为 0x000105040302 实际对应关系是0x050403020100变为0x000105040302 0位置被移动到5位置想要处理后得到想要的值应该
1970-01-01
下一篇 
PatchScope: Memory Object Centric Patch Diffing介绍分析目的是为了定位补丁,通过丰富的语意解释为什么要添加补丁。分析补丁的根源,理解补丁细节。 定位补丁二进制区分技术 [27, 34, 49]
1970-01-01 九层台
  目录