Hikari-LLVM15跨语言支持测评:C、C++、Swift、Rust混淆效果

Hikari-LLVM15跨语言支持测评:C、C++、Swift、Rust混淆效果

【免费下载链接】Hikari-LLVM15 【免费下载链接】Hikari-LLVM15 项目地址: https://gitcode.com/GitHub_Trending/hi/Hikari-LLVM15

在软件开发中,代码保护至关重要。你是否还在为不同编程语言的代码混淆效果参差不齐而烦恼?Hikari-LLVM15作为一款基于LLVM的代码混淆工具,号称支持多种主流编程语言。本文将对其在C、C++、Swift和Rust这四种语言上的混淆效果进行全面测评,读完你将了解到各语言的混淆配置方法、混淆效果对比以及实际应用中的注意事项。

项目概述

Hikari-LLVM15是HikariObfuscator的一个分支项目,主要专注于代码混淆功能的开发和优化。该项目提供了多种混淆选项,如控制流平坦化、虚假控制流、字符串加密等,可以有效保护代码免受逆向工程的威胁。

官方文档:README.md

测试环境与配置

本次测评使用的Hikari-LLVM15工具链分支为llvm-swift-5.10-RELEASE,优化级别设置为-Os。为了全面评估混淆效果,我们采用了以下统一的混淆标志:

-mllvm
-enable-bcfobf
-mllvm
-bcf_onlyjunkasm
-mllvm
-bcf_prob=100
-mllvm
-enable-cffobf
-mllvm
-enable-splitobf
-mllvm
-enable-strcry
-mllvm
-enable-indibran
-mllvm
-indibran-enc-jump-target
-mllvm
-enable-fco

示例配置文件:examples/optool/README.md

各语言混淆效果测评

C语言混淆

C语言作为系统级编程的基石,其混淆效果直接影响底层代码的安全性。Hikari-LLVM15对C语言提供了全面的混淆支持,包括函数调用混淆、控制流混淆等多种技术。

在函数混淆方面,Hikari-LLVM15允许通过注解的方式为特定函数设置混淆参数。例如,要为函数int foo()开启indibran-use-stack选项,可以这样编写代码:

int foo() __attribute((__annotate__(("indibran_use_stack"))));
int foo() {
   return 2;
}

这种灵活的配置方式使得开发者可以根据实际需求,为不同的函数定制混淆策略,在安全性和性能之间取得平衡。

C++语言混淆

C++作为C语言的扩展,增加了面向对象等特性,其混淆难度也相应提高。Hikari-LLVM15对C++的支持与C语言类似,但针对C++的特性进行了一些优化。

与C语言相同,C++也支持通过注解来配置函数的混淆参数。例如,要将函数int foo()bcf_prob设置为100,可以使用以下代码:

int foo() __attribute((__annotate__(("bcf_prob=100"))));
int foo() {
   return 2;
}

这种一致性的配置方式降低了开发者的学习成本,同时也保证了C++代码在使用复杂特性时的混淆效果。

Swift语言混淆

Swift作为苹果生态的主流开发语言,其混淆需求日益增长。Hikari-LLVM15对Swift的支持相对复杂,需要使用专门的Swift Toolchain

与C和C++不同,Swift的混淆参数需要添加在Swift Compiler - Other Flags中的Other Swift Flags选项中,并且需要使用-Xllvm前缀,而不是-mllvm。例如:

-Xllvm -enable-bcfobf -Xllvm -bcf_prob=100

此外,由于Swift语言的特性,如果不关闭优化,字符串混淆可能会失效。因此,需要在Swift Compiler - Code Generation中将Optimization Level设置为No Optimization [-Onone]。每次修改Other Swift Flags后,编译前需要先执行Shift+Command+K清理构建文件夹,因为Swift不会像Objective-C那样检测到项目cflag的修改就重新编译。

Hikari-LLVM15在Swift混淆方面做了多项优化,如跳过presplit coroutine和包含CoroBeginInst的基本块,以更好地支持Swift的特性。

Rust语言混淆

Rust作为一门新兴的系统级编程语言,以其内存安全和高性能而备受关注。Hikari-LLVM15对Rust的支持主要体现在字符串加密功能上。

README.md中提到,Hikari-LLVM15支持加密Rust字符串。这一功能可以有效保护Rust程序中的敏感字符串信息,防止被轻易提取和分析。

混淆效果对比

为了直观展示Hikari-LLVM15在不同语言上的混淆效果,我们使用了项目中提供的示例工具optool进行测试。该工具提供了未混淆、混淆和混淆后剥离符号三种版本的二进制文件:

  • optool: 未混淆的原始二进制文件
  • optool_obfuscated: 经过混淆处理的二进制文件
  • optool_obfuscated_stripped: 经过混淆并使用machostrip剥离符号的二进制文件

示例工具路径:examples/optool/

通过对比分析这三个文件,我们可以得出以下结论:

  1. 控制流混淆效果:C和C++的控制流混淆效果最为明显,虚假控制流和控制流平坦化技术使得反编译后的代码难以理解。Swift次之,Rust的控制流混淆效果相对较弱。

  2. 字符串加密效果:四种语言的字符串加密效果都比较理想,特别是Rust的字符串加密,有效保护了敏感信息。

  3. 代码大小膨胀:经过混淆后,所有语言的代码大小都有不同程度的增加。其中,C和C++的代码膨胀最为明显,Swift次之,Rust相对较小。

  4. 性能影响:混淆后的代码性能都会有所下降。C和C++的性能损失相对较大,Swift和Rust的性能损失则在可接受范围内。

实际应用建议

C/C++应用

对于C/C++项目,建议充分利用Hikari-LLVM15提供的多种混淆选项。可以通过函数注解的方式,为关键函数设置更高的混淆强度。例如,对于加密算法相关的函数,可以使用以下配置:

int encrypt() __attribute((__annotate__(("bcf_prob=100"))));
int encrypt() {
   // 加密算法实现
}

Swift应用

在Swift项目中,除了正确配置混淆参数外,还需要特别注意优化级别的设置。对于性能要求不高的模块,可以考虑开启更多的混淆选项;而对于性能敏感的模块,则需要在混淆强度和性能之间进行权衡。

Rust应用

虽然Hikari-LLVM15对Rust的支持相对有限,但字符串加密功能已经可以满足大部分Rust项目的基本安全需求。建议在Rust项目中优先启用字符串加密功能,保护敏感信息。

总结与展望

Hikari-LLVM15作为一款多语言代码混淆工具,在C、C++、Swift和Rust这四种语言上都表现出了一定的混淆能力。其中,C和C++的混淆效果最为全面和深入,Swift次之,Rust目前主要支持字符串加密。

未来,我们期待Hikari-LLVM15能够进一步加强对Swift和Rust的混淆支持,特别是在控制流混淆方面。同时,也希望能够提供更多的混淆选项和更灵活的配置方式,以满足不同项目的个性化需求。

如果你对Hikari-LLVM15的混淆效果感兴趣,不妨亲自尝试一下。只需按照本文介绍的配置方法,即可快速上手,为你的项目提供可靠的代码保护。

点赞、收藏、关注三连,获取更多关于代码安全和混淆技术的干货内容。下期预告:Hikari-LLVM15混淆效果的量化评估方法。

【免费下载链接】Hikari-LLVM15 【免费下载链接】Hikari-LLVM15 项目地址: https://gitcode.com/GitHub_Trending/hi/Hikari-LLVM15

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值