ParkWardRR/arm64-taint-slicer
GitHub: ParkWardRR/arm64-taint-slicer
针对 ARM64 的周期精确动态污点分析引擎,能够在通用寄存器和 SIMD/NEON 向量寄存器之间进行字节级污点传播与差分切片,解决传统工具在向量指令边界丢失追踪的问题。
Stars: 0 | Forks: 0
[](LICENSE)
[](https://go.dev)
[](#)
[](#)
[](#)
[](#)
# 🧬 ARM64 TAINT SLICER 🧬 ### *针对 ARM64 架构的周期精确动态污点分析与差分执行切片*
## 📖 高层概述
想象一个庞大且混乱的工厂流水线,一滴红漆落在一块金属上。如果你想知道到底是哪些机器处理了这块特定的金属,你只需要顺着红漆在流水线上的移动轨迹去寻找即可。
**ARM64 Taint Slicer** 对计算机代码做的正是这件事情。现代应用程序通常会被刻意混淆,以隐藏其真实行为,它们会运行成千上万条无用的虚假指令。如果我们想找到处理秘密密码的确切指令,我们就会用虚拟的“红漆”给密码打上“污点”。我们的引擎会运行程序,并追踪这些“污点”在内存和 CPU 数学运算组件中的移动过程。
这个工具的独特之处在于,即使程序将数据转移到高速向量数学单元(NEON 寄存器)中,它依然能够追踪污点,而这一技巧通常会导致其他追踪工具彻底丢失追踪线索。
## 1. 引言
动态污点分析(DTA)是逆向工程、恶意软件分析以及受保护二进制文件去混淆的基础技术。通过对特定内存区域或输入分配污点策略,分析人员可以提取相关的执行切片——即直接操作或派生自污点数据的指令子集。
然而,现代混淆器大量利用单指令多数据(SIMD)架构来破坏污点传播。当操作数从通用(GP)寄存器移动到向量执行单元时,标准的 DTA 引擎经常会遇到“污点丢失”的问题。本框架提供了一个针对 ARM64 架构的周期精确模拟器和污点追踪器,它能够在 GP(`X0-X30`)和 NEON(`V0-V31`)寄存器域之间维持严格的字节级和位级传播规则。
## 2. 方法论与架构
该架构实现了一个完整的差分执行环境,允许进行并行执行状态监控和差异追踪。
### 2.1 统一污点传播
引擎对 ARM64 处理器的完整状态进行了建模。污点标签通过以下途径传播:
1. **标量 ALU**:标准的算术和逻辑传播。
2. **内存子系统**:追踪加载/存储操作,包括复杂的后索引和前索引寻址模式。
3. **NEON 向量单元**:通过向量化指令(例如 `LD1`、`EOR (vector)`、`TBL`)进行周期精确的传播。
### 2.2 差分切片
除了直接的污点传播外,该引擎还支持差分执行切片。通过在两个不同的输入状态 $S_1$ 和 $S_2$ 下执行二进制文件,引擎会记录导致微架构状态(寄存器或内存)发生分歧的指令集 $I_{diff}$。
```
graph TD
A[Raw ARM64 Binary] --> B[Instruction Decoder]
B --> C{Emulation Core}
C -->|Scalar State| D[GP Registers]
C -->|Vector State| E[NEON Registers]
C -->|Memory State| F[Memory Pages]
D -.->|Policy Rules| G[Taint Tracking Engine]
E -.->|Policy Rules| G
F -.->|Policy Rules| G
G --> H[Pertinent Execution Slice]
```
## 3. 实际实现
该框架完全使用原生 Go 实现,无需任何外部 C 依赖或 hypervisor,从而便于轻松集成到更大的分析 pipeline 中。
```
package main
import (
"fmt"
"github.com/ParkWardRR/arm64-taint-slicer/taint"
"github.com/ParkWardRR/arm64-taint-slicer/cpu"
)
func main() {
// 1. Initialize execution environment
engine := cpu.NewEmulator(binaryData)
tracker := taint.NewTracker(engine)
// 2. Apply taint policy to input buffer
tracker.TaintMemory(0x80010000, 16)
// 3. Emulate and propagate
for !engine.Halted() {
tracker.Step()
}
// 4. Extract the pertinent slice
slice := tracker.GetPertinentSlice()
fmt.Printf("Trace Reduced: %d -> %d instructions\n",
engine.InstructionCount(), len(slice))
slice.Dump()
}
```
## 4. 结论
通过确保在 SIMD 架构边界上进行稳健的污点传播,ARM64 Taint Slicer 成功缓解了基于向量的反分析技术,从而能够从高度混淆的二进制文件中快速提取底层的加密算法或知识产权。
## 许可证
基于 [Blue Oak Model License 1.0.0](LICENSE) 分发。# 🧬 ARM64 TAINT SLICER 🧬 ### *针对 ARM64 架构的周期精确动态污点分析与差分执行切片*
标签:ARM64, EVTX分析, Go, Ruby工具, 二进制分析, 云安全运维, 云资产清单, 动态污点分析, 日志审计, 程序切片, 逆向工程