- requires-python >=3.8, classifiers 增加 3.8/3.9 - 代码经 ast feature_version=(3,8) 校验, 无 3.9+ 专属语法; str|None 等注解由 future annotations 延迟求值 - CI 测试/构建/smoke 矩阵扩展为 3.8-3.14, 裸资产数 6→8 - 注意: Windows runner 需预装 Python 3.8 与 3.9 (py launcher)
3.8 KiB
dlp-io
io-compatible file reads through an approved Python helper on Windows DLP hosts.
完整文档见 docs/DLP_IO_LIBRARY.md;DLP 环境实测特征与判定/写入逻辑推导见 docs/DLP_ENVIRONMENT_NOTES.md。
DLP 程序化特征与实现逻辑
在透明加密 DLP 环境下实测到的关键事实(详见上面的特征文档):
- 文件属性不可区分:加密/未加密文件的 attrib、ADS、大小完全一致,只有内容可判。
- 同尺寸流式加密:密文无附加头尾、无静态 magic,且进程按身份分白名单——
python.exe/cmd.exe/powershell.exe读加密文件得到明文(透明解密),certutil.exe等非白名单工具得到磁盘密文。 - 白名单读透明 ≠ 写加密:写入是否被加密因机器策略而异,必须运行时探测。
对应的实现逻辑:
- 读取始终明文:打包 EXE(非白名单)经 stdin 注入 helper 源码拉起白名单
python.exe,由它读明文、经认证 Named Pipe 回传(python 按身份白名单, 任何父进程拉起都有效)。 is_encrypted(path)加密判定:先比 certutil 原始哈希与当前进程视图哈希, 不等即加密;相等时存在歧义(未加密,或 EXE 读加密文件),再比 helper 视图与 本地视图的前 64 KiB 定案——Python/pyd/EXE 三种环境都正确。- 写入始终未加密:按文件后缀探测直写是否落盘明文(写探针文件后用 certutil
原始哈希校验);若直写会被加密,自动切换到 PowerShell stdin 管道中转写盘,
字节不落地任何临时文件;两通道均不可用则抛
DlpWriteError,绝不静默写密文。 可用DLP_IO_WRITE_CHANNEL=direct|powershell强制指定通道。
安装
从 Gitea PyPI registry 安装(匿名可下载,无需 token):
py -m pip install --index-url https://gitea.docker.antior.cn/api/packages/antior/pypi/simple dlp-io
pip 会自动选择最匹配的 wheel:Windows 上 CPython 3.8–3.14 安装对应的 pyd wheel(整个库由 Cython 编译为单个 .pyd),其余环境安装纯 Python wheel。如需固定版本:
py -m pip install --index-url https://gitea.docker.antior.cn/api/packages/antior/pypi/simple dlp-io==0.1.1
也可以从 Releases 页面下载产物:wheel 用 py -m pip install <文件> 安装;dlp_io.py 或对应版本的裸 .pyd 为免安装单文件,直接放进项目目录(或加入 PYTHONPATH)即可 import dlp_io。
开发
pip install -r requirements-dev.txt
pytest
构建发布
发布流程由 .gitea/workflows/publish-dlp-io.yaml 驱动:推送 dlp-io-vX.Y.Z 格式的 annotated tag,Windows runner(Python 3.8–3.14)会自动完成测试、构建,并把产物上传到 Gitea Release:
dlp_io-X.Y.Z-py3-none-any.whl(纯 Python,跨平台)dlp_io-X.Y.Z-cp38…cp314-win_amd64.whl(7 个 pyd wheel,Cython 编译,Windows 按解释器版本选用)dlp_io-X.Y.Z.tar.gz(sdist)dlp_io.py和 5 个裸dlp_io.cp3XX-win_amd64.pyd(免安装单文件,放进项目目录即可 import)
同一批 wheel/sdist 还会同步发布到 Gitea PyPI registry(https://gitea.docker.antior.cn/api/packages/antior/pypi/simple),可直接 pip install --index-url ... dlp-io。
安装方式见 docs/DLP_IO_LIBRARY.md。
本地只构建纯 Python 版:
py -3.13 -m build
pyd wheel 由 CI 编译,不需要本地编译;runner 主机需预装 MSVC 生成工具(Visual Studio Build Tools 的 C++ 工作负载)。如需本地验证 pyd 构建,安装 cython 后执行:
set DLP_IO_PYD=1
py -3.13 -m build --wheel --no-isolation