⚠️ 开发中 — 项目正在积极开发。核心扫描引擎正在重建
NuReaper 是一个 .NET 8 后端 API,可自动分析 NuGet 包的安全性。你只需提供任意 NuGet 包的链接,系统便会递归下载其整个依赖树,反编译编译后的代码,并扫描每个方法中的恶意模式——返回详细的威胁报告。
🔍 面向非技术读者: 可以把它想象成在手机上安装一个应用。与此同时,几十个更小的库会被自动安装。NuReaper 会逐一检查它们——查看实际编译后的二进制代码——并检测其中是否有任何库试图连接可疑服务器、执行隐藏代码或混淆其真实行为。
发送一个包含 NuGet 包 URL 的 HTTP 请求,NuReaper 将会:
.nupkg 文件并计算其 SHA-256 哈希该引擎在 IL(中间语言)指令级别分析代码,并识别出 7 种恶意软件特征模式:
| # | 模式 | 描述 |
|---|---|---|
| 1 | 直接 API 调用 | 可疑字符串立即用于网络调用 |
| 2 | 字符串赋值 | URL 被赋值给变量,然后传递给网络调用 |
| 3 | 字符串拼接 | 通过拼接构建 URL("http://" + var + "/path")——混淆技术 |
| 4 | 字符串插值 | 通过插值组装 URL($"{part1}{part2}") |
| 5 | 纯字符插值 | 从字符数组逐字符构建 URL——高级混淆 |
| 6 | DefaultInterpolatedStringHandler | 用于向静态分析隐藏字符串的低级插值机制 |
| 7 | 裸 API 调用 | 没有显式字符串的直接网络调用(TcpClient.Connect、Socket.Connect、Process.Start) |
Network: HttpClient, WebClient, DNS, TcpClient, WebSocket
Execution: Process.Start, Assembly.Load, Activator.CreateInstance
Low-level: DllImport, VirtualAlloc, CreateThread, NtCreateThreadEx
System: ManagementObjectSearcher (WMI)
String-based: Concatenation, CharArray, Interpolation, StringBuilder
Suspicious: URL, IP address, .onion address, Base64
评分算法考虑以下因素:
POST /api/PackageScan扫描给定的 NuGet 包及其完整依赖树。
请求:
{
"url": "https://www.nuget.org/packages/System.Net.Http/4.3.4"
}
响应:
{
"rootPackageName": "System.Net.Http",
"rootPackageVersion": "4.3.4",
"totalPackages": 12,
"totalFindingsFromAllPackages": 5,
"threatLevelAllPackages": 47.5,
"scannedTimeAllPackages": "2026-03-25T12:00:00Z",
"packages": [
{
"packageName": "System.Net.Http",
"version": "4.3.4",
"sha256Hash": "abc123...",
"threatLevel": 35.0,
"totalFindings": 3,
"findings": [
{
"type": "HttpClientCall",
"confidenceScore": 95.0,
"dangerLevel": 60.0,
"evidence": "http://example.com/payload",
"location": "MyClass::SendData",
"hopDepth": 0,
"flowTrace": "[Pattern1] Direct API call using string..."
}
]
}
],
"dependencyGraph": {
"rootPackage": "[email protected]",
"nodes": [...],
"edges": [...],
"cycles": [...]
}
}
基于 Clean Architecture 构建,严格分离关注点:
NuReaperBackend/
├── NuReaper.Api/ # API 层 — 控制器、中间件、启动
├── NuReaper.Application/ # 应用层 — 命令、接口、DTO、验证
├── NuReaper.Domain/ # 领域核心 — 实体、枚举、抽象
├── NuReaper.Infrastructure/ # 实现 — 扫描器、解析器、仓储
│ └── Repositories/
│ ├── Scanners/ # IL 分析引擎
│ │ ├── Analysis/ # ScanModule, ScanMethod, NetworkApiCallScan
│ │ ├── Detectors/ # 7 个模式检测器(Pattern1–Pattern7)
│ │ ├── Patterns/ # PatternRegistry(正则:URL、IP、.onion、Base64)
│ │ ├── RiskCalculation/# 威胁评分算法
│ │ ├── Finders/ # 在 IL 指令中定位 API 调用
│ │ ├── VariableAnalysis/# 跨 IL 跟踪变量值
│ │ └── StringAnalysis/ # 从片段重建字符串
│ ├── Parsers/ # .nuspec 文件解析
│ ├── GraphBuilders/ # 依赖图构建(BFS + 递归)
│ └── FileHelpers/ # 下载、解压、SHA-256
└── Docker/
├── Dockerfile
└── docker-compose.yml
| 领域 | 技术 / 模式 |
|---|---|
| 架构 | Clean Architecture |
| 层间通信 | CQRS + MediatR |
| IL 代码分析 | dnlib |
| 输入验证 | FluentValidation + MediatR Pipeline Behavior |
| 对象映射 | AutoMapper |
| 日志 | Serilog(控制台 + 每日滚动文件) |
| API 文档 | Swagger / OpenAPI |
| 数据库 | Entity Framework Core + MySQL (Pomelo) |
| HTTP | IHttpClientFactory 与连接池 |
| 容器化 | Docker + Docker Compose |
| 测试 | xUnit + Moq |
Package URL
│
▼
DependencyGraphBuilder ← 从 .nuspec 文件构建依赖图
│ (递归 + BFS,循环检测)
▼
唯一包列表
│
▼ (并行,SemaphoreSlim — CPU-1 线程)
NetworkApiCallScan 针对每个包
├── DownloadPackageAsync ← 获取 .nupkg
├── CalculateSha256 ← 完整性验证
├── ExtractNupkgAsync ← 解压归档
└── GetAssemblyFiles ← 列出 .dll 文件
│
▼ (Parallel.ForEachAsync)
ScanModule (针对每个 .dll)
│
▼ (Parallel.ForEach — 所有类型和方法)
ScanMethod (针对每个方法)
│
▼ (7 个模式检测器)
Pattern1..7 → FindingSummaryDto
│
▼
CalculateThreatLevel ← 评分 0–100
│
▼
ScanPackageResultResponse
| 包 | 用途 |
|---|---|
dnlib | .NET IL 反编译与分析 |
MediatR | CQRS — 命令/查询管道 |
FluentValidation | 请求验证 |
AutoMapper | 跨层对象映射 |
Serilog | 结构化日志 |
Pomelo.EntityFrameworkCore.MySql | MySQL ORM |
Swashbuckle.AspNetCore | Swagger UI |
xUnit + Moq | 单元测试 |
本项目基于 PolyForm Noncommercial License 1.0.0 提供,禁止商业使用。 如需商业许可或咨询,请联系:[email protected]