Hikari-LLVM15动态测试框架:使用LLVM lit进行功能验证

Hikari-LLVM15动态测试框架:使用LLVM lit进行功能验证

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

你是否在开发编译期混淆工具时遇到过这些问题?辛辛苦苦实现的代码混淆逻辑,在实际应用中却导致程序崩溃;添加的反调试保护,在特定场景下失效;优化的控制流平坦化,反而降低了执行效率?Hikari-LLVM15项目提供了基于LLVM lit(Lightweight Integrated Tester)的动态测试框架,帮助开发者快速验证混淆功能的正确性和稳定性。本文将详细介绍如何使用这一框架进行功能验证,确保你的混淆工具在迭代过程中始终保持可靠。

读完本文你将获得:

  • 了解Hikari-LLVM15测试框架的基本架构
  • 掌握使用LLVM lit编写测试用例的方法
  • 学会分析测试结果并定位问题
  • 掌握测试驱动的混淆功能开发流程

测试框架概述

Hikari-LLVM15是HikariObfuscator的一个分支版本,专注于LLVM 15的混淆功能增强和优化。项目的核心目标是提供更强大、更稳定的代码混淆能力,同时保持对多种编程语言(尤其是Swift)的良好支持。为了实现这一目标,项目采用了LLVM lit作为动态测试框架,确保每一项混淆功能都经过充分验证。

为什么选择LLVM lit?

LLVM lit是LLVM项目自带的轻量级集成测试工具,专为编译器和相关工具的测试设计。它具有以下优势:

  • 与LLVM生态系统无缝集成,支持LLVM IR(Intermediate Representation,中间表示)文件的直接测试
  • 灵活的测试用例格式,支持自定义测试规则和断言
  • 并行测试执行,提高测试效率
  • 丰富的命令行选项,支持测试用例过滤和结果报告生成

测试框架结构

Hikari-LLVM15的测试框架主要包含以下组件:

  • 测试用例集合:位于项目根目录下的test目录,包含各种混淆功能的测试用例
  • 测试驱动脚本:用于解析测试用例、执行测试并验证结果的Python脚本
  • 测试辅助工具:用于生成测试报告、比较测试结果的辅助程序

测试用例编写

基本测试用例格式

一个典型的LLVM lit测试用例是一个以.ll为扩展名的LLVM IR文件,包含以下几个部分:

  • 测试元数据:以; RUN:开头的注释,指定测试命令
  • LLVM IR代码:待测试的中间表示代码
  • 测试断言:以; CHECK:开头的注释,指定预期的测试结果

以下是一个简单的控制流平坦化测试用例示例:

; RUN: opt -load %loadPolly -polly-canonicalize -polly-codegen -S < %s | FileCheck %s
; ModuleID = 'test.c'
source_filename = "test.c"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @foo(i32 %a, i32 %b) #0 {
entry:
  %cmp = icmp sgt i32 %a, %b
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %add = add nsw i32 %a, %b
  br label %if.end

if.else:                                          ; preds = %entry
  %sub = sub nsw i32 %a, %b
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %retval.0 = phi i32 [ %add, %if.then ], [ %sub, %if.else ]
  ret i32 %retval.0
}

; CHECK:      entry:
; CHECK-NEXT:   %cmp = icmp sgt i32 %a, %b
; CHECK-NEXT:   br i1 %cmp, label %if.then, label %if.else
; CHECK:      if.then:
; CHECK-NEXT:   %add = add nsw i32 %a, %b
; CHECK-NEXT:   br label %if.end
; CHECK:      if.else:
; CHECK-NEXT:   %sub = sub nsw i32 %a, %b
; CHECK-NEXT:   br label %if.end
; CHECK:      if.end:
; CHECK-NEXT:   %retval.0 = phi i32 [ %add, %if.then ], [ %sub, %if.else ]
; CHECK-NEXT:   ret i32 %retval.0

Hikari-LLVM15特定测试用例

对于Hikari-LLVM15的混淆功能测试,测试用例需要包含相应的混淆参数。以下是一个使用控制流平坦化(Flattening)和虚假控制流(BogusControlFlow)混淆的测试用例示例:

; RUN: opt -load %loadHikari -hikari -enable-flattening -enable-bcfobf -bcf_prob=100 -S < %s | FileCheck %s
; ModuleID = 'test.c'
source_filename = "test.c"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define dso_local i32 @foo(i32 %a, i32 %b) {
entry:
  %cmp = icmp sgt i32 %a, %b
  br i1 %cmp, label %if.then, label %if.else

if.then:
  %add = add nsw i32 %a, %b
  br label %if.end

if.else:
  %sub = sub nsw i32 %a, %b
  br label %if.end

if.end:
  %retval.0 = phi i32 [ %add, %if.then ], [ %sub, %if.else ]
  ret i32 %retval.0
}

; CHECK:      entry:
; CHECK-NEXT:   %cmp = icmp sgt i32 %a, %b
; CHECK-NEXT:   br i1 %cmp, label %if.then, label %if.else
; CHECK:      if.then:
; CHECK-NEXT:   %add = add nsw i32 %a, %b
; CHECK-NEXT:   br label %if.end
; CHECK:      if.else:
; CHECK-NEXT:   %sub = sub nsw i32 %a, %b
; CHECK-NEXT:   br label %if.end
; CHECK:      if.end:
; CHECK-NEXT:   %retval.0 = phi i32 [ %add, %if.then ], [ %sub, %if.else ]
; CHECK-NEXT:   ret i32 %retval.0

测试执行与结果分析

执行测试命令

在Hikari-LLVM15项目根目录下,执行以下命令启动测试:

lit test/

如果需要指定特定的测试用例或测试目录,可以使用以下命令:

lit test/obfuscation/bcf/

测试结果解读

测试执行完成后,LLVM lit会生成详细的测试报告,包含以下信息:

  • 测试用例总数
  • 通过的测试用例数
  • 失败的测试用例数
  • 超时的测试用例数

以下是一个典型的测试报告示例:

Testing Time: 0.23s
  Expected Passes    : 123
  Expected Failures  : 4
  Unsupported Tests  : 2
  Unexpected Failures: 1

问题定位与调试

当测试失败时,可以通过以下步骤定位问题:

  1. 查看详细的测试输出,找到失败的测试用例
  2. 分析测试用例的预期结果与实际结果的差异
  3. 使用调试工具(如lldb)单步执行混淆过程,定位问题代码
  4. 修改代码并重新运行测试,验证修复效果

高级测试技巧

参数化测试

LLVM lit支持通过lit.local.cfg文件定义参数化测试,实现对不同混淆参数组合的测试。例如,可以定义一个测试套件,自动测试不同bcf_prob值对控制流混淆效果的影响。

性能测试

除了功能验证,Hikari-LLVM15还支持对混淆后代码的性能测试。通过在测试用例中添加性能指标断言,可以确保混淆功能不会引入过度的性能开销。

集成测试

Hikari-LLVM15提供了端到端的集成测试,验证混淆工具在实际项目中的应用效果。例如,项目中的examples/optool目录包含了一个完整的混淆示例:

通过比较这些文件的大小、执行效率和反汇编结果,可以全面评估混淆效果。

总结与展望

Hikari-LLVM15的LLVM lit动态测试框架为混淆功能的开发和维护提供了强大的支持。通过编写全面的测试用例,开发者可以确保每一项混淆功能的正确性和稳定性。随着项目的不断发展,测试框架将进一步完善,支持更多类型的测试和更复杂的混淆场景。

官方文档:README.md 混淆示例配置:examples/optool/README.md

如果你对Hikari-LLVM15的测试框架有任何建议或改进,欢迎通过项目贡献指南参与贡献。让我们共同打造更可靠、更强大的代码混淆工具!

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

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

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

抵扣说明:

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

余额充值