0%

AntiOllvm去除二进制代码Ollvm混淆并回编译

AntiOllvm

去除二进制文件 Ollvm 混淆,并生成新的可执行二进制文件

其它方法介绍

  • Ollvm 已经开源很久了,现在市面很多恶意软件都使用它,为了防止分析加壳加混淆基本是必备的。假如一个恶意软件使用某种算法加密了你的文件,并且采用了混淆,如果你要自己解密或者制作解密工具都离不开分析它的算法。而使用混淆后伪代码几乎不可查看,为此你要付出大量的时间和精力去分析。现在网上通用一点的方法有使用 unicorn 模拟执行,还有使用 trace 功能跟踪运行过的代码。
  • 使用 unicorn 模拟执行
    • 虽然可以支持很多架构的运行,但是从汇编层构建出 CFG 还是比较吃力的
    • 具体的分析都对应着直接的汇编指令,再加上多架构这样处理起来非常麻烦
    • 还有修复跳转,补丁指令,在原函数中代码分散,甚至还需要修复指令的重定位
  • 使用 trace 跟踪
    • trace 分析相对较简单,但缺点是你需要在真机上运行
    • 每次运行也不一定会覆盖所有路径
    • 在还原算法或分析时看的是汇编指令,增加分析难度

AntiOllvm 简介

  • 采用将二进制代码还原为 LLVM IR 的方式,经过各种优化去除混淆后再编译回原文件
  • 采用这种方案优点很多
    • 本身 Ollvm 就是在 LLVM IR 中转换代码然后编译,在还原回 LLVM IR 后能最大限度的还原特征
    • 可以利用现有的 LLVM 中的优化,各种分析也可以查找部分现成的
    • 统一了所有架构的分析,分析方法通用,重建 CFG 非常容易
    • 分析过程更加直观,不接触汇编代码,更容易分析出混淆规则

大概思路

  • AntiOllvm 使用 retdec 将二进制文件还原为 LLVM IR
  • 使用 LLVM 中的内部优化,将 IR 码优化为较高可读性的代码,这期间部分指令替换以及不可达代码就已经优化掉了
  • 定制 Pass 去除掉函数内部的 虚假控制流和平坦化
  • 最后通过 LLVM 将代码重新编译回汇编并回填文件

开发进度

架构 ELF COFF Mach-O
Arm Yes
Arm64
X86
X86_64
  • 等测试稳定会后陆续开放其它架构
  • IDA 插件的开发(需等所有架构开放后)

使用说明

  • 该项目是收费项目,AntiOllvm仓库只会存放说明文件和一些测试样本的源码和二进制文件
  • 目前还未提供可购买版本,鉴于目前不够稳定,样本量较少,后续稳定后会推出正式可购买版本
  • 欢迎大家提供样本(越复杂越好)到我的邮箱 beichenzhizuoshi@163.com,也可在本仓库提交 issues 附带样本及说明,目前只接受 Arm 架构的 ELF 样本,发送样本时请在标题上注明 二进制架构及文件格式 例如 Arm-ELF 测试样本, 内容上注明被混淆的 函数名称或地址,和你自认为的 混淆难度等级(1-3),我会在去混淆通过后回复你去混淆后的二进制文件

例子演示

  • AntiOllvm,在这个仓库会公布文档和一些测试的源码以及去混淆后的二进制文件
  • 该样本是使用 openssl 加密库,开启混淆,注意测试与 MD5 算法有关方法 MD5_Updatemd5_block_data_order,样本详细说明可以查看仓库 OpenSSLTest
  • 未混淆和去混淆后的运行对比
    gif
  • 混淆过后的 MD5_Update CFG
    MD5_Update Obf CFG
  • 混淆过后的 md5_block_data_order CFG
    md5_block_data_order Obf CFG
  • 未混淆 MD5_Update CFG 如下:
    MD5_Update CFG
  • 去混淆后 MD5_Update CFG
    MD5_Update AntiObf  CFG
  • 未混淆 md5_block_data_order CFG
    md5_block_data_order CFG
  • 去混淆后 md5_block_data_order CFG
    CFG

问题交流

  • 请关注下方微信公众号后获取入群提示
坚持原创技术分享,感谢您的支持与鼓励!
sanfengAndroid 微信支付

微信支付

sanfengAndroid 支付宝

支付宝

sanfengAndroid PayPal

PayPal

欢迎关注我的公众号,第一时间收到原创分享