我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:万喜彩票 > 反向推理 >

Binsec 反向有界的动态符号执行:针对混淆代码的不可行性问题

归档日期:07-22       文本归类:反向推理      文章编辑:爱尚语录

  binsec是一个开源工具,主要的应用领域:恶意软件检测、crash分析、反混淆、漏洞分析。

  相当于IDA中的一个插件, 可以去除一些死代码. 实验性质的, 有兴趣的可以玩玩.

  混淆代码的逆向过程中所产生的许多问题归结为不可行问题的求解,下面的文章中提出了后向有界的动态符号执行,可以自动识别不透明谓词,并在CFG图中对其进行裁剪,新生成的CFG图非常精简。相关研究成果发表在2016 blackhat和2017 S&P上:

  把文中反混淆的实验测试了一下. 如下图所示, 左边是混淆后的代码, 右边是使用BinSec处理后的代码

  代码混淆是安全分析中的重要内容,动态符号执行提出了一个有趣的方案,比静态分析更强大,比动态分析的更完整。但是,DSE只针对某些种类的反向问题,即可行性问题。

  Backward Bounded DSE是一个通用、精确、高效和强大的用来解决不可行问题的方法,我们证明了该方法对不透明谓词和调用堆栈篡改的优势。

  Backward Bounded DSE不是要替代现有的DSE,而是通过以可扩展和精确的方式解决不可行性问题来补充DSE。

  遵循这条线,我们提出了稀疏反汇编,反向有界DSE和静态分析的组合,能够以有保证的方式扩大动态分析,从而获得最佳的动态和静态分析。这项工作为针对严重混淆的二进制文件进行高效和精确的反汇编工具铺平了道路。

  静态分析:IDA、objdump,但是容易被混淆:代码交叉覆盖、不透明谓词、不透明常量、调用堆栈覆盖、自修改

  目前,只有结合动态分析和DSE(Dynamic Symbolic Execution)才强大到足以解决严重混淆的代码。

  在这篇文章中,我们感兴趣的是解决(大型)混淆程序的逆向过程中发生的不可行性问题。 预期的方法必须是精确的(低误报率),并且能够在规模(效率)和保护方面(包括自我修改(稳健性))在实际代码上进行扩展,并且足够通用于处理大型不可行性问题。 同时实现所有这些目标尤其具有挑战性.

  我们结合软件形式化验证方法的一些最先进的关键功能,如推理验证,有界模型检测或DSE。特别是面向目标的、面向效率的、结合动态信息和形式推理的鲁棒性技术。

  提出了Backward-Bounded DSE方法,并做了评估,主要是隐晦谓词和调用堆栈修改方面的测试,也使用了其他的程序做了测试。

  最后,给出了两个应用:首先,我们描述了政府级恶意软件X-TUNNEL的深入案例研究,BB-DSE允许识别和删除所有混淆(不透明谓词)。 我们已经能够自动提取功能的去混淆版本 - 丢弃几乎50%的死亡和“虚假”指令,并提供对其保护方案的深入了解,为进一步深入调查奠定了良好的基础。 其次,我们提出了稀疏反汇编,这是一个BB-DSE,动态分析和标准静态反汇编的组合,允许以一种精确的方式扩大动态拆卸 - 获得了最好的动态和静态技术,以及令人鼓舞的初步实验。

  不透明谓词是指一个表达式,他的值在执行到某处时,对程序员而言必然是已知的,但是由于某种原因,编译器或者说静态分析器无法推断出这个值,只能在运行时确定。因此,不透明谓词可以作为控制流混淆时的条件生成器。用它构造一些必真或必假的条件,改造目标程序控制流。举个例子,在执行一些语句序列,如下面这个基本块

  k太小,FN(false negative)现象,本身是不透明谓词,被判定为不是不透明谓词

  k太大,由于较大的k意味着更多的空间来错过分支,它也产生更多的FP(false positive)。 因此,在一般情况下,较大的k导致较少的FN和更多的FP

  BB-DSE 算法集成在其中。在解析谓词可行性时,执行反向修剪过程,以消除任何无用的变量或约束。

  动态跳转闭包:比如switch,判断是否所有的jmp被找到了。判断是否没有其他输入了

  测试结果表示,BB-DSE在检测不透明谓词时非常精准,但是边界很重要。试验中10  k  30比较好

  BB-DSE表现很好,没有FP。该技术同时恢复真正的ret和单目标篡改后的ret。

  这些不同的对照实验清晰地证明BB-DSE是一个解决不同种类不可行性问题的非常精确的方法。还表明在实践中找到一个合适的约束k不是一个问题。最后,这种方法似乎是可扩展的。最后一点将在第七章和第八节中得到明确证明。

  这些不同的对照实验清楚地表明,BB-DSE是解决不同类型的不可行性问题的一种非常精确的方法。它们还表明,找到一个合适的界限k在实践中不是一个问题。最后,这个方法似乎是可扩展的。最后一点将在第七章和第八节中得到明确证明。

  对一个简单的程序进行加壳,使用了很多常用的加壳软件,如ACProtect/ASPack/UPX…

  1. 把混淆方案的计算分布在一个长的代码序列上,超过BB-DSE中的k值。对于这些“远依赖性的谓词”来说,一个很好的缓解就是依赖一个更一般的k边界的概念,例如基于def-use链长度或者一些公式复杂度标准而不是严格的指令数量。

  2. 对策是引入难以解决的谓词(例如基于混合布尔算法或密码散列函数)会造成求解器超时。但是,超时可能反而暴露了重要代码。同时这样措施会使恶意软件设计大大复杂化,可能导致非典型的代码结构,容易出现相关的恶意代码指纹。

  3. 一些反动态跟踪的技巧。本文中方法可以与其他技术协同工作,来缓解这个问题。

  反向推理。反后推理在无限状态模型检查中很有名,纯粹的向后方法在二进制水平上几乎不可能实现,因为缺少计算跳跃的先验信息。而BB-DSE解决了这个问题。

  反汇编。这些方法在伸缩性和健壮性方面仍然面临着重大问题。特别是,自修改很难对付,并且在这个方向中只有很少的工作存在。几项工作试图将静态分析和动态分析相结合,以便更好地反汇编。特别是,codisasm利用动态轨迹进行自动修改程序语法的静态反汇编。

  混淆。不透明的谓词,为了检测它们,已经提出了多种方法,特别是抽象解释和最近与DSE的研究。堆栈篡改引起的问题以及最显着的不返回函数,提出了一种基于抽象解释的方法。以上解决方案都不能像BB-DSE那样以可扩展和可靠的方式解决问题。

  混淆代码的逆向过程中所产生的许多问题归结为不可行的问题解决。然而,这类问题大多是标准和高级的反汇编工具的盲点。我们提出了后向有界的动态符号执行,一种精确,高效,稳健和通用的方法来解决与反混淆相关的不可行性问题。我们已经证明了这种方法对几个真实类型的混淆如不透明谓词和调用栈篡改的好处,并给出了其他保护方案的见解。后向有界的动态符号执行不取代现有的反汇编方法,而是通过解决不可行性问题来补充它们。接下来,我们展示了如何使用这些技术来解决国家资助的恶意软件(X-TUNNEL),以及如何将这一技术与标准的静态反汇编和动态分析相结合,从而以精确和有保证的方式扩大动态分析。这项工作为针对混淆二进制文件的精确高效的反汇编工具铺平了道路。

  源码及二进制文件链接:是DARPA为网络大挑战赛...博文来自:doudoudouzoule的博客

  控制流平坦化的相关理论百度有很多,简单来讲就是将代码块之间的关系打断,由一个分发器来控制代码块的跳转正常流程如下经混淆后的流程如下破坏了代码块之间的关系后,整个程序的逻辑将很难辨认符号执行的思路是遍历...博文来自:whklhhhh的博客

  简介OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学安全实验室于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加对逆向工程的难度。githu...博文来自:weixin_34290390的博客

  一、概念  符号执行技术的核心思想是使用符号值来表示程序的输入数据,并将程序的运算过程逐指令或逐语句地转换为数学表达式,在CFG的基础上生成符号执行树,并为每一条路径建立一系列以输入数据为变量的符号表...博文来自:云深杂记

  用例源码以及二进制文件链接:本次用例代码压轴...博文来自:doudoudouzoule的博客

  最简易的方式就是通过S2E自带的管理工具s2e-env安装。基本步骤及注意事项如下:安装s2e-env工具 $:gitclone博文来自:qujianyunyl的博客

  用例源码以及二进制文件链接:这个二进制文件执行...博文来自:doudoudouzoule的博客

  用例源码以及二进制文件链接:执行二进制文件,发...博文来自:doudoudouzoule的博客

  源码及二进制文件链接:这次的用例非常简单,也非常基础(也是唯一一个,...博文来自:doudoudouzoule的博客

  用例源码以及二进制文件链接:这道题非常非常简答啦!就是要求输入一个p...博文来自:doudoudouzoule的博客

  刚开始学习符号执行,z3的话之前倒是有接触过,但是一直安装不成功,故到现在重新翻看一下。angr的安装参考蓝鲸塔主的文章:angr安装手册这个安装好之后其实就自带z3了,因为angr本身就是基于z3的...博文来自:weixin_34060741的博客

  用例源码以及二进制文件链接:这是一个恐怖的世界,一条恶龙在这片领域盘旋...博文来自:doudoudouzoule的博客

  在这个用例中,给出了一个带有程序执行的trace的text文件。这个文件有两列,地址和执行指令。所以我们知道所有的执行的指令和分支,但是我们不知道初始数据。通过逆向,我们发现在栈上有一段缓冲区最先由已...博文来自:doudoudouzoule的博客

  关于定义域有界性的三种判断@(微积分)给定一个函数,讨论其在定义域上是否有界,有三种方法。不敢说常见,提出来思考。理论法:若f(x)在定义域[a,b]上连续,或者放宽到常义可积(有限个第一类间断点),...博文来自:Bings Blog

  一序分析控制流图是分析程序必不可少地过程,通过分析控制流图能够快速地帮助我们了解程序结构,同时利用控制流图实现漏洞挖掘,Bug分析等也是非常有用地。Angr提供了多种分析工具,其中就有控制流图分析。(...博文来自:water_likly的博客

  解题源码以及二进制文件在:一道有趣的题目!首先运行bomb文件...博文来自:doudoudouzoule的博客

  0x00:简介符号执行简单来说就是用符号来模拟程序执行,在我看来就相当于暴力破解,比如一个程序要求你进行一个复杂的运算,每次动态调试只能输入一次,然而符合执行可以尽可能的遍历每一条路径,这样就方便了许...博文来自:CharlesGodX的博客

  angr是什么  我的理解就是 可以用它来帮我们从众多的路中找到最正确的那条(太复杂的话就不行了执行效率是个问题)类似与z3来解方程似的(不清楚的话可以看这个怎样在win10上安装并食用Z3库来解CT...博文来自:iqiqiya的博客

  源码及二进制文件链接:该题目来自于2016年0ctf比赛的被混淆过的二...博文来自:doudoudouzoule的博客

  我是基于python2安装的,再安装过程中遇到好多问题,安装了好几次也没安装成功,很偶然的一次成功了(转载请注明出处)1首先是安装python环境sudoaptinstallpython-virtua...博文来自:water_likly的博客

  GoogleHelper使Chrome可以登录谷歌账号,访问Chrome应用商店、Gmail等广告终结者网必备的插件!而且支持自定义拦截...博文来自:shepherd_dirk的博客

  ……Stata连享会精彩推文……【在线观看】连玉君-内生性问题:处理方法与进展相关链接IV估计DID-倍分法……Stata连享会精彩推文……关于我们【Stata连享会(公众号:StataChina)】...博文来自:stata连享会

  目前看过的几篇论文都是讲在LLVMIR上面做程序分析相关的工作的,下面就它们各自的特点进行总结:LLMBC主要用于边界模型检测,支持C和C++语言,通过将LLVMintermediatereprese...博文来自:菩提树下写代码

  这道题。。。。说实话感觉是我脚本写错了但是我确确实实感觉没有什么错误。。先贴上脚本吧如果有大佬看出哪里有问题希望还能指出来#!/usr/bin/python3#coding=utf8importang...博文来自:的博客

  本文主要通过一个简单的案例来说明angr的使用,同时,尽可能的将上文中提到的一些指令、代码实践下。一案例在上文中,我才发现如果只是利用angr实现间的分析的话,真的很容易做到,上文中对angr的一些指...博文来自:water_likly的博客

  #代码混淆压缩比,在0~7之间,默认为5,一般不下需要修改-optimizationpasses5#混淆时不使用大小写混合,混淆后的类名为小写#windows下的同学还是加入这个选项吧(windows...博文来自:介亭的博客

  一参考安装好了angr后,如何利用angr来完成自己的工作,实现程序分析是个大问题。我参考了一些技术人员的博客,能稳定介绍这个工具的人不是很多,不过还是让我找到了几个:(转载请注明出处)https:/...博文来自:water_likly的博客

  S2E安装S2E是什么就不科普了,GitHub一搜就知道了。想着装一个瞅瞅人家怎么弄的,然而过程比较曲折。由于已经装好才想起来写,就在这里记录安装过程中出现的问题及解决办法。1、手边没有Ubuntu的...博文来自:qldxsun的博客

  源码及二进制文件链接: 首先拿到这个文件,还是先...博文来自:doudoudouzoule的博客

本文链接:http://apps-n-tabs.com/fanxiangtuili/871.html