AkuchiS/Oni

GitHub: AkuchiS/Oni

Oni 是一个零依赖的源码级逆向工程引擎,通过 PageRank 图分析自动拆解仓库并生成净室开发导向的分析报告。

Stars: 0 | Forks: 0

Oni

Oni

一个净室开发、源码级的逆向工程引擎。
将其指向一个 repo。它会将 codebase 拆解为值得关注的核心要素 ——
它是什么、它是如何运作的、哪些 文件是核心资产,
以及在不复制一行代码的情况下,原生重建其优秀理念的方案。

MIT Python 3.8+ zero deps offline tests

纯标准库 · 零依赖 · 离线且无需密钥 · 可选 LLM

## 为什么需要 每个团队最终都会去逆向工程别人的代码 —— 为了学习一种模式、为了评估 竞争对手,为了决定 *这里是否有值得借鉴的东西?* 依靠手工完成是一个缓慢的爬行过程:clone、 grep、猜测哪些文件重要、先读了不相关的文件,并最终重构出整体轮廓。 **Oni 将这一繁琐过程简化为一条命令。** 它会为你找出重要的代码(基于中心度分析,而非主观 猜测),解释其运行机制,并且 —— 这是大多数工具会忽略的部分 —— 告诉你目标的 **许可证** 是如何规范你对所学知识的使用权限的。 ``` oni Aider-AI/aider oni ./path/to/local/repo --query "how does the planner work" oni https://github.com/psf/requests --no-llm --out ./teardowns ``` ## 你能得到什么 生成一个 `TEARDOWN.md`(以及匹配的 `teardown.json`),包含: | 部分 | 告诉你的内容 | |---|---| | **采用策略** | 许可证,以及你*确切*可以如何复用它 —— 刻意将其放在首位展示。 | | **概览** | 语言、规模、许可证,以及信号(测试 / CI / Docker / 文档)。 | | **它是什么 / 如何工作** | 紧凑、具体的叙述 —— 真实的模块和符号,没有废话。 | | **架构** | 按中心度排名的顶层区域 + 检测到的入口点。 | | **核心资产** | 中心度最高的符号,每个都附有简短的源码摘录。请优先研究这些。 | | **模式 · 优势 · 劣势** | 可复用的理念、它做得好的地方、以及它的薄弱环节。 | | **采用方案** | 针对每个模式:*原生构建什么*、工作量(S/M/L)以及原因 —— 一份净室开发规范,绝非简单复制。 | ## 核心资产引擎 寻找“重要的文件”是最困难的部分,Oni 采用了与 [Aider](https://github.com/Aider-AI/aider) 相同的方法来实现 —— 纯粹使用标准库重新实现: 1. **将 repo 建模为图。** 节点即文件。对于一个文件*引用*而在另一个文件中 *定义*的每个标识符,添加一条边(引用方 → 定义方),其权重取决于引用次数, 并且对于有意义的 `snake_case` / `CamelCase` 命名会增加权重。 2. **在该图上运行 PageRank**(幂迭代法,阻尼系数 0.85)。定义了 被广泛使用符号的文件会浮到顶部。通过 `--query` 可以偏置转移向量,使得*“指向身份验证”*的查询能够 展现出验证机制,而不仅仅是全局核心文件。 3. **将每个文件的级别分布到其包含的符号上** → 得到*每个符号*的排名。这些就是你的核心 资产:codebase 其余部分所依赖的核心代码。 没有 embedding,没有外部服务,没有索引服务器 —— 仅使用 `ast`、正则表达式和约 30 行 PageRank 代码。 ## 天生为净室开发设计 Oni 的存在是为了帮助你从代码中**学习**,而不是洗白代码。因此它从不将目标代码复制到你的 目录树中,保持摘录简短(展示意图,而非具体实现),并在每份报告的开头注明许可证: - **宽松型** (MIT / Apache / BSD / ISC) → 自由复用模式;保留署名说明即可。 - **Copyleft 型** (GPL / AGPL / LGPL / MPL) → **仅限净室开发**:研究行为,编写规范, 根据规范重新实现。AGPL 会被标记为具有网络传染性。对 copyleft 源码的近似重写本身可能构成衍生作品 —— Oni 会醒目地提醒你这一点。 - **未知 / 无** → 在人类确认之前,一律视为保留所有权利。 采用方案只会提出*原生重写*的建议。 ## 安装说明 ``` ./install.sh # pipx / pip --user / zero-install shim, in that order # 或者 pip install -e . # then `oni` is on your PATH # 或者只是 python3 -m oni # no install at all ``` 需要 Python 3.8+。无需其他依赖。 ## 使用模型(可选) 每个阶段都有启发式的备选方案,因此即使**完全不使用模型**,Oni 也非常实用。提供一个 模型,叙述和采用方案会变得更加精准。通过环境变量进行配置 —— 它可以无缝接入任何 兼容 OpenAI 的 endpoint(OpenAI、OpenRouter、Ollama、vLLM、LM Studio 等): ``` export ONI_API_KEY=sk-... # omit for a local/Ollama endpoint export ONI_MODEL=gpt-4o-mini # or any model your endpoint serves export ONI_ENDPOINT=https://api.openai.com/v1 # or http://localhost:11434/v1, etc. oni some/repo ``` 随时可以通过 `--no-llm` 强制使用离线模式。 ## 作为库使用 ``` import oni result = oni.teardown("Aider-AI/aider", query="repo map", n_jewels=15) print(result["jewels"][0]["name"]) # highest-centrality symbol print(result["posture"]["banner"]) # how you may adopt it for a in result["adoption"]["adopt"]: print(a["pattern"], "→", a["build"], f"({a['effort']})") ``` ## 命令行参考 ``` oni [options] local path | GitHub URL | owner/repo[@ref] -o, --out DIR write TEARDOWN.md + teardown.json to DIR -q, --query TEXT bias the crown-jewel ranking toward a concept -n, --jewels N how many crown jewels to surface (default 12) -c, --context TEXT your own context, so the adoption plan maps ideas onto it --no-llm skip the model; structural teardown only --json print JSON instead of Markdown --cache-dir DIR clone remotes here (kept) instead of a tempdir ``` ## 如何保持客观真实 - **全方面容错。** 没有 git → 下载 tarball。没有模型 → 启发式拆解。没有 网络 → 在本地检出上运行。某个环节失效会降级处理;它不会导致整个运行中止。 - **确定性。** 输入相同的 repo,得到相同的排名结果 —— 采用排序遍历,没有随机性。 - **只读模式。** Oni 从不修改目标,除非你传入 `--out`,否则它绝不会向你的项目中写入任何内容。 ## 测试 ``` pip install pytest && pytest -q # runs fully offline against a bundled fixture repo ``` ## 致谢 请参阅 [ACKNOWLEDGMENTS.md](ACKNOWLEDGMENTS.md)。核心资产排名采用了 Aider 的 repo-map 思想; 语言检测遵循 github-linguist;净室开发策略遵循既定的 逆向工程原则。 ## 许可证 MIT —— 详见 [LICENSE](LICENSE)。请负责任地使用 Oni 从代码中学习。
标签:Python, SOC Prime, 云安全监控, 云资产清单, 人工智能, 代码分析, 凭证管理, 开发工具, 无后门, 用户模式Hook绕过, 自动化payload嵌入, 逆向工具, 逆向工程, 静态分析