如何用llvm-obfuscator混淆代码
混淆方法一: InstructionsSubstitution[html] view plain copy-mllvm -sub: activate instructions substitution -mllvm -funcSUB="func1,func2,func3": if instructions substitution is activated, apply it only on functions func1, func2 and func3 -mllvm -perSUB=20: if instructions substitution is activated, apply it with a probability of 20% on each function 2. 混淆方法二: BogusControlFlow[html] view plain copy-mllvm -bcf: activates the bogus control flow pass -mllvm -funcBCF="func1,func2,func3": if the pass is activated, applies it only on functions func1, func2, func3 -mllvm -perBCF=20: if the pass is activated, applies it on all functions with a probability of 20%. Default: 100 -mllvm -boguscf-loop=3: if the pass is activated, applies it 3 times on a function. Default: 1 -mllvm -boguscf-prob=40: if the pass is activated, a basic bloc will be obfuscated with a probability of 40%. Default: 30 3. 混淆方法三: ControlFlow Flattening[html] view plain copy-mllvm -fla: activates control flow flattening -mllvm -funcFLA="func1,func2,func3": if control flow flattening is activated, apply it only on functions func1, func2 and func3 -mllvm -perFLA=20: if control flow flattening is activated, apply it with a probability of 20% on each function 4. 如何用开源 source code 编译出混淆器O-LLVM ?[cpp] view plain copy$ git clone -b llvm-3.5 https://github.com/obfuscator-llvm/obfuscator.git $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE:String=Release ../obfuscator/ $ make -j5 编译后的结果只有bin 和 lib 是有用的,其余的都可以删除:
如何用llvm-obfuscator混淆 js
LLVM是什么?
(1)LLVM是lowlevel virtual machine的简称,是一个编译器框架。苹果公司的Xcode 4.0之后用的都是LLVM编译器。
(2)LLVM 诞生于2003.10伊利诺伊大学香槟分校,创始人ChrisLattner,现任苹果公司『开发者工具』部门的主管。
二、 LLVM-Obfuscator 是什么?
(1)LLVM-Obfuscator 是瑞士西北应用科技大学安全实验室针对LLVM编译组件开发的代码混淆工具,该工具完全开源,目的是为了增加逆向工程的难度,保证代码的安全性。
(2)Obfuscator-llvm最新版本集成了LLVM-3.4编译器,并且兼容LLVM支持的所有语言(C,C++, Objective-C, Ada and Fortran)和平台(x86, x86-64, PowerPC, PowerPC-64,ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ,and XCore)。
如何学习 clang和LLVM,需要哪些知识
转自知乎 蓝色
我最近和Clang/LLVM打交道比较多,目前游离在LLVM IR和IBM WCode之间。对于学习Clang/LLVM来说,其实需要看你做什么,是研究C, C++, Objective-C在Clang的实现,抑或着是想利用Clang做AST层面的事情,还是说想要利用LLVM IR来做一些事情,抑或着你是想要添加LLVM优化,还是说想要为LLVM添加新的体系结构支持.Clang/LLVM现在都很大了,所以需要了解好自己想要的是什么,然后去针对的阅读,而非直接就开始一大块的开始,这实在是太大了。
而在阅读源代码之前,无论如何,首先是需要基本的编译原理知识。你需要知道我们编译器的几个基本步骤,如词法分析,语法分析,语意分析,代码生成等过程,有了这个基本的思路,你才不至于迷失在Clang的浩海代码中,如看见Sema,AST,CodeGen这样的字眼你也能对应上这是哪个阶段的,若你想要了解C, C++, Objective-C等的实现,大部分都要集中在Lexer,Parser, AST, Sema等部分。与此同时,若你想要理清楚,明白为什么这么实现,如C++。那么,你还需要备一份C++标准,并且熟悉C++标准的常用语,至少可以分清楚Declaration,Definition,L-Value, R-Value等,因为你会看见Clang有很多Decl,若不理解Declaration,你很难理解为什么会有这么多Decl冒出来。而这一部分代码的阅读,我会当你想要了解某一部分的实现时再去挑着读,而非挨着挨着读。
而若你如我一样,需要直接面对LLVM IR,那么你更多需要的是学习 LLVM IR Language,即LLVM Language Reference Manual ,但是我知道直接看这样的文档是抽象的,是无趣的,我也如此。那么其实最好的办法就是从C/C++程序dump出.ll文件,然后阅读它,修改它,看看会发生什么。同时,在这个阶段,你需要更多的有关链接器,Object File,Symbol Table等知识,这样才能更好的做这件事情。而这阶段的代码,主要都是都在Clang CodeGen里面,所以你要阅读代码这部分是比较集中的,但是你要完整理清楚,你还是不可避免的需要从Driver等部分开始,但是你若是只想知道IR,大部分在CodeGen,Clang的源码大多是CG****。
若你是做LLVM后端的话,这部分我了解的比较少,但是LLVM最好的地方就是它文档还算好,如我立马就找到了一个相关的东西:Writing an LLVM Backend 然后空明大神补了一个:The LLVM Target-Independent Code Generator
如何学习 clang和LLVM,需要哪些知识
我最近和Clang/LLVM打交道比较多,目前游离在LLVM IR和IBM WCode之间。对于学习Clang/LLVM来说,其实需要看你做什么,是研究C, C++, Objective-C在Clang的实现,抑或着是想利用Clang做AST层面的事情,还是说想要利用LLVM IR来做一些事情,抑或着你是想要添加LLVM优化,还是说想要为LLVM添加新的体系结构支持.......Clang/LLVM现在都很大了,所以需要了解好自己想要的是什么,然后去针对的阅读,而非直接就开始一大块的开始,这实在是太大了。而在阅读源代码之前,无论如何,首先是需要基本的编译原理知识。你需要知道我们编译器的几个基本步骤,如词法分析,语法分析,语意分析,代码生成等过程,有了这个基本的思路,你才不至于迷失在Clang的浩海代码中,如看见Sema,AST,CodeGen这样的字眼你也能对应上这是哪个阶段的,若你想要了解C, C++, Objective-C等的实现,大部分都要集中在Lexer,Parser, AST, Sema等部分。与此同时,若你想要理清楚,明白为什么这么实现,如C++。那么,你还需要备一份C++标准,并且熟悉C++标准的常用语,至少可以分清楚Declaration,Definition,L-Value, R-Value等,因为你会看见Clang有很多Decl,若不理解Declaration,你很难理解为什么会有这么多Decl冒出来。而这一部分代码的阅读,我会推荐当你想要了解某一部分的实现时再去挑着读,而非挨着挨着读。而若你如我一样,需要直接面对LLVM IR,那么你更多需要的是学习 LLVM IR Language,即LLVM Language Reference Manual ,但是我知道直接看这样的文档是抽象的,是无趣的,我也如此。那么其实最好的办法就是从C/C++程序dump出.ll文件,然后阅读它,修改它,看看会发生什么。同时,在这个阶段,你需要更多的有关链接器,Object File,Symbol Table等知识,这样才能更好的做这件事情。而这阶段的代码,主要都是都在Clang CodeGen里面,所以你要阅读代码这部分是比较集中的,但是你要完整理清楚,你还是不可避免的需要从Driver等部分开始,但是你若是只想知道IR,大部分在CodeGen,Clang的源码大多是CG****。若你是做LLVM后端的话,这部分我了解的比较少,但是LLVM最好的地方就是它文档还算好,如我立马就找到了一个相关的东西:Writing an LLVM Backend 然后空明大神补了一个:The LLVM Target-Independent Code Generator