控制流平坦化 3.2 CapStone&AsmJit 不用Clang编译器的平台,也有开源的框架可利用。基本原理大致是利用...
这个工具通过改变代码的结构、加入垃圾代码、修改控制流程等方式来实现混淆,极大地增加了逆向工程的难度。它支持多种混淆技术,如控制流平坦化、指令替换、假代码插入等,可有效防止黑客通过分析编译后的二进制文件来理解原始代码逻辑。 一、LLVM OBFUSCATOR LLVM Obfuscator的工作原理是在编译过程中插入混淆模块,这样可以在...
Obfuscator-LLVM的控制流平坦化是一个典型的实例,它将代码中的条件判断和跳转结构转换为看似无序的跳转。 语法变换 语法变换包括重新排列代码块、替换算法和引入无用代码段。这一过程可以让程序逻辑保持原样,却让源代码的阅读难度大大增加。工具如Stunnix CXX-Obfus可以自动完成这样的转换。 五、混淆后的代码管理 即便...
ConfuserEx是一款免费、开源的C#代码混淆器,它支持多种混淆技术,如控制流平坦化、字符串加密、模拟器代码等。此外,ConfuserEx还提供了插件系统,可以通过插件实现更多的混淆技术。GitHub地址是:github.com/yck1509/ConfuserEx。Obfuscar Obfuscar是一种免费、开源的C#代码混淆器,它可以对整个程序集进行混淆,支持多种...
控制流平坦化:通过改变代码的控制流程,使得代码的逻辑变得复杂和混乱,增加逆向工程的难度。常见的工具包括iXGuard、Obfuscator-LLVM等。 字符串加密:对Objective C代码中的字符串进行加密,使得字符串的内容难以被直接获取,增加逆向工程的难度。常见的工具包括iXGuard、Obfuscator-LLVM等。
程序未混淆时 main 方法的控制流图如下 word/media/image8.png 经过Bogus Control Flow 混淆后 word/media/image9.png 参考:Bogus Control Flow 3. Control Flow Flattening(控制流平坦化) Control Flow Flattening(控制流平坦化)通过引入一个调度变量和统一的调度循环,将程序的所有基本块按编号管理,使用条件跳转动...
LLVM Obfuscator(llvm-obfuscator):这是一个基于LLVM的代码混淆工具,可以使用不同的技术对源代码进行混淆,包括重命名、控制流平坦化、字符串加密等。 Obfuscator-LLVM:这是另一个基于LLVM的代码混淆工具,提供了多种混淆技术,包括符号重命名、控制流平坦化、函数内联等。
代码控制流平坦化 参数controlFlowFlattening , 该参数默认不写,该混淆库默认false 打乱函数原有代码执行流程及函数调用关系,使代码逻变得混乱无序。 设置为false, 函数逻辑还是保持不变的,参考main7.js main8.js 参考代码 main.js 原始 js 代码 main1.js 代码控制流扁平化(代码打乱重新编码)和代码不压缩...
APK运行后,会首先加载libjiagu.so,并执行其JNI_Onload方法。该方法最终会调用到__fun_a_18,这个方法进行了控制流混淆,流程对于我来说是非常复杂的。 刚开始,我以为它用了o-llvm进行混淆编译。但仔细看一下汇编代码,应该不是。应该就是自己在源码中利用while-switch实现了“控制流平坦化”的混淆算法。
最简单最原始的做法就是增加新的代码块A,找出所有jcc指令,修改该指令跳转到A,再通过A跳转到正确的代码块,代码块A可以根据数学公式实现一些运算,动态计算出跳转地址,模糊控制流。 这种做法也被大牛们叫做控制流程平坦化,代码块A也叫做控制分发器,负责分发指令跳转。