blandteampr/Source-code-scanner
GitHub: blandteampr/Source-code-scanner
一款用于扫描C#和Python源代码中恶意模式、行为链并提供风险评分的静态分析工具。
Stars: 0 | Forks: 0
# 平淡扫描器
## 版本:1.0
平淡扫描器是一款使用 C# 编写的 Windows 窗体桌面应用程序,用于扫描源代码文件(.cs 和 .py)中的恶意模式、可疑行为链和高熵字符串。它会生成风险评分、判定结果和详细报告。

## 工作原理
### 用户输入(拖放或浏览)
- 用户将一个或多个文件或文件夹拖放到窗体上
- 应用程序在提供的路径中递归查找所有 .cs 和 .py 文件
### 引擎选择
- .cs 文件使用 CSharpEngine
- .py 文件使用 PythonEngine
- 两个引擎都实现了包含 ScanWithDetails 方法的 IScannerEngine 接口
### 逐行分析
对于每个文件,引擎会读取所有行并逐行处理:
#### 3.1 注释跳过
以 //、/*、# 或 """ 开头的行会被忽略,以减少误报
#### 3.2 模式匹配
每行都会按类别检查正则表达式模式:
| 模式类型 | 示例 |
| :--- | :--- |
| 执行 | Process.Start, os.system, eval, subprocess |
| 网络 | HttpClient, WebClient, requests.get, socket |
| 注入 | Assembly.Load, VirtualAlloc, pickle.loads, ctypes |
| 编码 | Convert.FromBase64String, base64.b64decode |
| 文件系统 | File.Delete, os.remove, shutil.rmtree |
| 持久化 | RegistryKey, winreg |
当模式匹配时,会记录一个可疑项目,包含:
- 行号
- 危险评分
- 严重级别(低、中、高、严重)
- 原因描述
#### 3.3 变量跟踪
简单的变量赋值跟踪有助于检测被混淆或动态构造的恶意载荷
#### 3.4 熵检测
- 长度超过 40 个字符的字符串会被分析其熵值
- 高熵且包含数字或大小写混合表明可能是加密或压缩的载荷
### 行为链检测
引擎维护一个最近行(最后 5 行)的滑动窗口,以检测多步骤的恶意行为链:
| 链类型 | 检测模式 |
| :--- | :--- |
| 下载 + 执行 | 网络请求 + 进程执行 |
| Base64 解码 + 执行 | 解码字符串然后执行 |
| 注入 + 执行 | 非托管代码注入 + 执行 |
当检测到行为链时,会向结果中添加一个“严重”级别的条目。
### 评分系统
每个引擎针对每种模式类型维护独立的分数:
| 分数类别 | 最大上限 |
| :--- | :--- |
| 执行分数 | 50 |
| 网络分数 | 40 |
| 注入分数 | 60 |
| 编码分数 | 40 |
重复的模式命中会增加分数,但收益递减(最大倍数为 2)。最终总分上限为 100。
### 最终判定计算
基于总分:
| 分数范围 | 判定 |
| :--- | :--- |
| 80 - 100 | 可能是恶意软件 |
| 60 - 79 | 高度可疑 |
| 40 - 59 | 可疑 |
| 0 - 39 | 可能安全 |
**置信度 = 总分 / 100(上限为 1.0)**
### 结果聚合与显示
扫描完所有文件后:
- 将分数聚合为一个危险百分比
- 计算平均置信度
- 结果以颜色编码的严重级别显示在列表框中
- 详细报告可以保存为文本文件
## 代码块示例
以下是扫描引擎处理可疑 C# 行的示例:
```
// High entropy string detection example
string payload = "JHVzZXJhZ2VudCQkc2hhMjU2JCRlbmNyeXB0ZWQ=";
byte[] decoded = Convert.FromBase64String(payload);
Assembly.Load(decoded);
```
标签:Python, Windows Forms, 代码审计工具, 安全专业人员, 安全扫描, 恶意模式, 扫描工具, 无后门, 时序注入, 桌面应用, 模式匹配, 混淆字符串, 熵检测, 自动化资产收集, 行为链分析, 错误基检测, 静态代码分析, 风险评分