kierennicolas/irscanner
GitHub: kierennicolas/irscanner
一个使用 ANSI Fortran 77 编写的事件响应二进制初步分析工具,用于在各类系统上快速检测可疑文件的熵值异常及还原简单 XOR 混淆。
Stars: 0 | Forks: 0
# IRSCANNER
IRSCANNER 是一个小型的事件响应(incident-response)二进制初步分析工具,使用严格的 ANSI Fortran 77 编写。
它旨在对可疑或未知文件进行初步检查。它不能替代完整的取证工作流,但可以快速突显在事件响应、恶意软件分类和基本二进制检查中通常有用的属性。由于它是用 F77 编写的,因此可以在较旧的遗留系统和 IoT 上轻松编译,并且没有依赖项。
## 用途
IRSCANNER 将目标文件作为原始字节读取,并生成一份人类可读的报告,涵盖:
- 文件大小和读取模式
- 某些常见格式的识别文件签名
- 全局 Shannon 熵
- 滑动窗口熵
- 主导字节和空字节百分比
- 单字节 XOR 检测和可能的密钥恢复
- 短密钥的重复密钥 XOR 检测和可能的密钥恢复
- 字节多样性
- 长重复字节运行
- 最高字节频率
- 当 XOR 恢复足够强时的短解码预览
这使其适用于发现以下内容:
- 压缩或打包的内容
- 看起来像加密的数据块
- 全零文件
- 稀疏或空字节密集的文件
- 可能经过 XOR 混淆的载荷
- 异常重复的区域
- 明显的文件头,如 ELF、ZIP、PDF、PNG、JPEG 和类似格式
IRSCANNER 是一个分类工具。其输出是启发式的,应被视为分析师的指导,而非正式证据。
## 操作系统
源代码是使用严格的 ANSI Fortran 77 编写的,旨在可移植到任何拥有合适 Fortran 编译器并以通常方式支持直接访问无格式文件 I/O 的系统。
它旨在运行于:
- Linux
- 其他类 Unix 系统
- 配备 Acorn Norcroft Fortran 编译器的 RISC OS 系统
- Windows,如果使用合适的 Fortran 编译器编译
在实践中,最直接的目标是:
- 配有 `gfortran` 的 Linux
- 配有 `gfortran` 或其他兼容 Fortran 编译器的类 Unix 系统
- 配有 Acorn/Norcroft 兼容 Fortran 环境的 RISC OS
本 README 主要关注 Linux 和 Unix 用法。
## 支持的运行时行为
在标准的按字节寻址运行时(如 Linux 上的 `gfortran`)上,IRSCANNER 执行精确到字节的读取。
源代码还包含针对使用基于字的直接访问记录单元的运行时的逻辑。在此类系统上,其行为设计为仍可用于分类,但特定于平台的编译器和运行时细节可能仍然有影响。
## 在 Linux / Unix 上构建
### 使用 gfortran
```
gfortran -std=legacy -O2 -o irscanner irscanner.f
```
如果你想要一个更独立的 Linux 二进制文件,你也可以尝试:
```
gfortran -std=legacy -O2 -static-libgfortran -static-libgcc \
-o irscanner irscanner.f
```
静态链接并不一定在所有系统上都可用。
### 编译器说明
源代码是以固定格式 Fortran 77 风格编写的。如有必要,请使用接受传统固定格式源代码的编译器模式。
## 在 Linux / Unix 上使用 IRSCANNER
IRSCANNER 从标准输入读取目标文件名。
像这样运行它:
```
./irscanner
```
它会提示:
```
Enter target filename:
```
输入文件路径并按 Enter 键。
### 非交互式使用
你也可以通过标准输入传递文件名:
```
printf 'sample.bin\n' | ./irscanner
```
### 保存报告
```
printf 'sample.bin\n' | ./irscanner > sample_report.txt
```
### 测试多个文件
```
for f in plain.txt zeros.bin random.bin xor_text.bin elf_sample.bin xor_rep.bin
do
echo "===== $f ====="
printf '%s\n' "$f" | ./irscanner
echo
done
```
## 解读报告
### 文件摘要
显示字节计数、读取路径和任何识别出的文件格式签名。
### 熵分析
较高的熵可能表示加密、压缩或打包的数据。较低的熵通常表示纯文本、结构化数据或重复内容。
### XOR 部分
IRSCANNER 可以尝试识别:
- 单字节 XOR
- 短重复密钥 XOR,目前仅限于短密钥
当证据足够充分时,它会报告可能的密钥和简短的解码预览。
这些发现仍然是启发式的。可能的密钥恢复是一个强有力的线索,而非自动保证。
### 字节多样性
显示文件中出现了多少个不同的字节值。极低的多样性可能表示非常受限的编码、填充、测试文件或全零文件。
### 重复字节运行
标记相同字节的长运行。在某些情况下,这可能表示填充、对齐、填充模式或暂存区域。
### 最高字节频率
显示最常见的字节值及其近似百分比。
## 示例测试文件
以下无害文件可用于测试:
- 一个小文本文件
- 一个全零文件
- 来自 `/dev/urandom` 的随机文件
- 一个普通可执行文件,如 `/bin/ls`
- 一个用单字节 XOR 编码的文件
- 一个用短重复密钥 XOR 编码的文件
示例命令:
```
printf 'This is a plain text test file.\n' > plain.txt
dd if=/dev/zero of=zeros.bin bs=1 count=4096
dd if=/dev/urandom of=random.bin bs=1 count=4096
cp /bin/ls elf_sample.bin
python3 - <<'PY'
data = b'This is a test of single-byte XOR recovery.\n' * 20
key = 0x5A
open('xor_text.bin', 'wb').write(bytes([b ^ key for b in data]))
PY
python3 - <<'PY'
data = b'This is repeating-key XOR test data.\n' * 30
key = b'ICE'
out = bytearray()
for i, b in enumerate(data):
out.append(b ^ key[i % len(key)])
open('xor_rep.bin', 'wb').write(out)
PY
```
## 局限性
- IRSCANNER 是一个分类工具,而不是一个完整的恶意软件分析框架。
- 基于熵和频率的发现是启发式的。
- XOR 检测仅限于单字节 XOR 和短重复密钥 XOR。
- 文件签名识别基于一小部分常见头部。
- 识别出的签名或可能恢复的密钥仍应使用其他工具进行验证。
## Linux / Unix 上的典型工作流
一个简单的工作流是:
1. 编译该工具
2. 针对可疑文件运行它
3. 检查熵、XOR、格式和重复模式部分
4. 如果发现异常,使用更深入的工具进行跟进
例如:
```
gfortran -std=legacy -O2 -o irscanner irscanner_v1_9_ansi_f77.f
printf 'suspect.bin\n' | ./irscanner > suspect_report.txt
less suspect_report.txt
```
标签:DNS 反向解析, Fortran, IoT 安全, XOR 解码, 二进制分析, 云安全运维, 云资产清单, 加壳检测, 取证工具, 可疑文件分析, 启发式检测, 字节频率分析, 文件签名识别, 文档结构分析, 混淆检测, 熵分析, 网络信息收集, 逆向工程