JaskRendix/odlparser
GitHub: JaskRendix/odlparser
odlparser 是一个模块化、完全类型化的 OneDrive ODL 同步引擎日志解析器,能自动解码混淆与 AES 加密的二进制日志并输出结构化数据。
Stars: 0 | Forks: 0
# **odlparser — 现代、模块化的 OneDrive ODL 日志解析器**
一个针对 **Microsoft OneDrive ODL 同步引擎日志** 的简洁、带类型且完全模块化的解析器。
本项目是对 **Yogesh Khatri (@swiftforensics)** 原始取证解析器的现代重构。
它保留了原有的解码逻辑(混淆映射、AES keystore、CDEF 解析),同时提供了一个易于维护、可测试且可用于生产环境的代码库。
## **功能特性**
- 解析 **ODL v2** 和 **ODL v3** 日志格式
- 支持所有 OneDrive 日志扩展名:
`.odl`, `.odlgz`, `.odlsent`, `.aodl`
- 自动检测:
- 传统 **ObfuscationStringMap.txt**
- 现代 **general.keystore** (AES‑CBC)
- Gzip 封装的日志
- 清晰的关注点分离:
- **reader** → 文件 I/O + 解压
- **parser** → CDEF block 解析
- **decoder** → 解除混淆 + AES 解密
- **models** → 带类型的不可变记录
- **cli** → 统筹协调 + CSV 和 SQLite 输出
- 完全类型化(兼容 `mypy`)
- 所有组件 100% 的 pytest 覆盖率
- 适用于 DFIR pipeline、自动化以及大规模日志摄取
## **安装**
```
pip install odlparser # not yet published to PyPI
```
或从源码安装:
```
git clone https://github.com//odlparser
cd odlparser
pip install -e .
```
## **命令行使用**
```
odlparse [-o OUTPUT] [-s MAP] [-k] [--sqlite DB]
```
### **参数**
| 选项 | 描述 |
|--------|-------------|
| `folder` | 包含 `.odl`, `.odlgz`, `.odlsent`, `.aodl` 文件的文件夹 |
| `-o, --output` | 输出 CSV 路径(默认:文件夹中的 `ODL_Report.csv`) |
| `-s, --map` | `ObfuscationStringMap.txt` 的路径 |
| `-k, --all-keys` | 包含所有重复的映射值 |
| `--sqlite DB` | 将结果写入 SQLite 数据库(除 CSV 外) |
### **示例**
仅输出 CSV:
```
odlparse ~/OneDriveLogs -o ~/Desktop/odl.csv
```
仅输出 SQLite(默认仍会生成 CSV):
```
odlparse ~/OneDriveLogs --sqlite ~/Desktop/odl.db
```
CSV + SQLite:
```
odlparse ~/OneDriveLogs -o report.csv --sqlite report.db
```
## **以编程方式使用**
```
from pathlib import Path
from odlparser.reader import load_odl_file
from odlparser.parser import parse_odl
from odlparser.decoder.unobfuscate import OdlDecryptor
odl_file = load_odl_file(Path("SyncEngine-2024-01-01.1234.odlgz"))
decryptor = OdlDecryptor(keystore=None, mapping={})
records = parse_odl(odl_file.version, odl_file.data, filename="log.odl", decryptor=decryptor)
for r in records:
print(r.timestamp, r.code_file, r.function, r.params)
```
## **OneDrive ODL 日志的工作原理**
OneDrive 同步引擎日志以二进制文件形式存储,其扩展名包括:
它们包含一系列 **CDEF block**,每个代表 OneDrive 同步引擎内部的一次函数调用。
### **字符串解码**
存在两种机制:
#### **1. 传统方式(2022 年之前)**
字符串使用存储在以下位置的键/值映射进行混淆:
#### **2. 现代方式(2022 年之后)**
字符串使用存储在以下位置的密钥进行 AES‑CBC 加密:
解析器会自动检测并使用现有的任何机制。
## **项目结构**
```
src/odlparser/
cli.py # CLI entrypoint
reader.py # File I/O + decompression
parser.py # CDEF v2/v3 parsing
models.py # Typed immutable OdlRecord
structures.py # Construct definitions
decoder/
keystore.py
obfuscation_map.py
string_extract.py
unobfuscate.py
tests/
test_*.py # Full pytest suite
```
## **输出格式**
CLI 会生成:
### CSV
- `filename`
- `index`
- `timestamp`
- `code_file`
- `function`
- `params`
### SQLite
一个名为 `records` 的单表,包含以下列:
- `filename`
- `index_num`
- `timestamp`
- `code_file`
- `function`
- `params`
CSV 行示例:
```
SyncEngine-2024-01-01.1234.odlgz,42,2024-01-01T12:34:56,SyncEngine.cpp,UploadItem,"/Documents/report.docx"
```
## **归属说明**
本项目是一个模块化的重写版本,灵感来自以下作者的原始 OneDrive ODL 解析器:
**Yogesh Khatri (@swiftforensics)**
[https://github.com/ydkhatri/OneDrive](https://github.com/ydkhatri/OneDrive)
所有的解码逻辑(CDEF 结构、解除混淆、AES 处理)均基于对原始实现的分析。
标签:AES解密, HTTP工具, Python, SQLite, 子域名变形, 安全规则引擎, 数字取证, 数据分析工具, 无后门, 日志解析, 自动化脚本, 证书伪造, 逆向工具