查看: 104|回复: 0

[Reverse] 浅析反静态分析(三)

[复制链接]
发表于 2020-5-27 13:35:50 | 显示全部楼层 |阅读模式
  前言
  在上一篇中我们讲过MOV混淆和SMC自解码,这两种反静态分析的手段在中等偏难的题目中会遇见。但是在今天的文章中我们会讲解到LLOM这种工业级的混淆方式,在CTF题目中也是很常见的,为此我们要来分析LLOM混淆。除此之外,讲解了常见的混淆模式,在第六节中我们会去探索一些不太常见的反静态分析手段。同时预报一下,在我的下一个系列中会分析《CTF中的反动态调试》的相关技术。
  第五节 OLLVM混淆(LLOM)
  什么是LLVM?
  LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。
  LLVM计划启动于2000年,最初由美国UIUC大学的Chris Lattner博士主持开展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者。
  目前LLVM已经被苹果IOS开发工具、Xilinx Vivado、Facebook、Google等各大公司采用。(源自百度百科的解释)
  而我们的主题并不是llvm这个架构编译器,而是基于这个架构编译器的obfuscator-llvm。
  为了不重复造轮子,我就不会解释OLLVM。
  在下面我推荐两篇文章:大家在看之前,请先浏览这两篇文章。
  https://security.tencent.com/index.php/blog/msg/112
  https://xz.aliyun.com/t/4960
  配置OLLVM
  Github地址:https://github.com/obfuscator-llvm/obfuscator/wiki/Installation
  上面地址安装的是oLLVm-4.0
  Github:https://github.com/AllocAndInit/ollvm5.0.1
  上面这个是最新的。
  我先安装4.0的看看感觉

浅析反静态分析(三)

浅析反静态分析(三)
  但是我们在执行第四步的时候可能会出现这样的错误

浅析反静态分析(三)

浅析反静态分析(三)
  这个时候我们需要更换一下我们的第四步命令
  cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF ../obfuscator/
  但是我们在完成最后编译环节的时候,有些电脑可能会出现这样的错误提示,
  c++:internal compiler error:killked(program cclplus) 
  编译就终止了。
  解决方案就是扩大swap分区的容量,这个问题是swap分区太小而导致的。
  笔者的环境是Ubuntu18.04,怎样增加swap分区呢?
  查看我们的盘符情况:free -h

浅析反静态分析(三)

浅析反静态分析(三)
  我的分区只有2G
  创建一个swap文件
  sudo mkdir /swap
  cd /swap
  进行扩充(下面的命令是扩6G,可以根据实际情况更改)
  sudo dd if=/dev/zero of=swapfile bs=1G count=6

浅析反静态分析(三)

浅析反静态分析(三)
  因为dd是不会查看进度的
  同时这个命令可以查看进度
  sudo watch -n 5 killall -USR1 dd
  然后将生成的文件转换成swap文件
  sudo mkswap -f swapfile

浅析反静态分析(三)

浅析反静态分析(三)
  这里我报错了,需要我们手动将文件夹的权限转换成600
  sudo chmod 0600 /swap/swapfile
  然后直接激活
  sudo swapon /swap/swapfile

浅析反静态分析(三)

浅析反静态分析(三)
  (以下步骤可以不用执行,不影响安装环境)
  但是这样重启后会直接失效
  你如果需要的话可以进行重新激活
  sudo swapon /swap/swapfile
  如果需要一直保持这个swap,则需要将其写在/etc/fstab文件中
  sudo nano /etc/fstab
  解决好上面这个报错,就可以继续执行编译环节。安装环境就没有什么问题了。我们就开始来试一试这个混淆方式吧。
  OLLVM的初体验
  为了让大家熟悉附加平坦化,我写了一个简单的C代码,然后用两种编译实现一下,看看返回编后的效果。在附件中我会上传我的源代码。
  在正常编译下后反汇编的效果:

浅析反静态分析(三)

浅析反静态分析(三)
  核心代码:

浅析反静态分析(三)

浅析反静态分析(三)
  对源代码未进行保护。
  接下来我们看看经过OLLVM编译的反汇编效果:

浅析反静态分析(三)

浅析反静态分析(三)
  而关键代码:

浅析反静态分析(三)

浅析反静态分析(三)

浅析反静态分析(三)

浅析反静态分析(三)
  关键代码就受到保护。
  简单的演示就到这里。各位师傅们有兴趣可以多探究一下。
  如何去平坦化
  在我的上一篇文章中,有详细的讲解如何配置去平坦化,如果读者没有配置,请先参考上篇文章配置环境后进行阅读下面的内容。
  在这里我将采用2019全国信息安全专项赛上的一个题目flat,进行测试(附件会有相关资料)。
  打开IDA直接分析

浅析反静态分析(三)

浅析反静态分析(三)
  开局就发现有点熟悉,很可能就是采用了OLLVM混淆

浅析反静态分析(三)

浅析反静态分析(三)
  在我们用strings命令查看,便看到一段很有意思的字符。在这里我们已经知道个大概了,不慌,进入程序再看看。

浅析反静态分析(三)

浅析反静态分析(三)

浅析反静态分析(三)

浅析反静态分析(三)
  现在基本上很确定是OLLVM混淆。那我们就直接还原check函数。

浅析反静态分析(三)

浅析反静态分析(三)
  这是我还原的check1函数。还原的很彻底。
  接下来我们就不用怎么分析。直接还原所有的check函数。Flag就非常容易分析出来。虽然这题可以手动分析出来,不去平坦化,肯定会花去不少时间。
  那这题我就不具体分析了,我直接给出题解:http://mp.weixin.qq.com/s?__biz= ... 91541446b49b93e1#rd (感谢星盟安全团队的题解)。
  总结
  分析了这么多反静态分析的手段,在比赛中或多或少会遇到,有事并不会单独出现。希望读者们多多研究一下这些手段。手段是旧的,但是出题者的想法总是层出不穷的。

游客,如果您要查看本帖隐藏内容请回复


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表