ollvm

ollvm学习笔记–day(1)

第一步肯定是。。编译并使用ollvm(我之前已经初步了解了llvm以及ollvm),然后我这边首先编译了ollvm,虽说用的还是4.0的老版本(最近的6.0已经支持了字符串混淆)
安装环境–Ubuntu 16.04
需要工具–cmake
shell:git clone -b llvm-4.0 https://github.com/obfuscator-lvm/obfuscator.git
mkdir build
cd buildcmake -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF ../obfuscator
cmake -j7
安装好的ollvm就在/build/bin里可以使用了

大概的混淆功能就是这样,我写了一段简单的样例代码

然后对其进行三种形式的混淆,首先是虚假指令流,他会在你的程序中插入大量的无用代码或者无法实现的逻辑,但是我寻思着也只能增加静态分析的难度,动调时配合log完全可以标记出全部有效代码块

可以看到控制流程图变的略微复杂了,至少深度变了不少,然后f5看一下

可以看出,变复杂了不少,多了很多无效的if判断,混淆效果还算ok,然后让我们看下最有趣的控制流平坦化

可以看到,真实的代码块被分发成了一个个小的代码块,由dispatcher去控制这个代码跳转的流程,效果类似vm,还是可以的,然后看下同时开启fla和bcf

令人吃惊的是,控制流已经混淆的十分厉害,并且有一点点小叹息之墙的感觉,手动滑稽

总之,可以看到ollvm的混淆功能已经大概得到了见证,然后需要做的就是去分析他是如何实现的,现在分析ollvm的文章也不少了,但最有效的方法还是去读源码吗,明日 to do,分析ollvm的大致构造,以及渎下md