con un clic
akiba-zh
Akiba 二进制分析框架使用与开发指南 - 基于 Ghidra 和 Kotlin 的批量流水线式分析框架,适用于大规模固件和二进制文件分析
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Akiba 二进制分析框架使用与开发指南 - 基于 Ghidra 和 Kotlin 的批量流水线式分析框架,适用于大规模固件和二进制文件分析
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
| name | akiba-zh |
| description | Akiba 二进制分析框架使用与开发指南 - 基于 Ghidra 和 Kotlin 的批量流水线式分析框架,适用于大规模固件和二进制文件分析 |
| author | Akiba Team |
| version | 1.0.0 |
Akiba 是一个基于 Ghidra 的支持批量流水线任务的二进制分析框架,使用 Kotlin 开发,设计用于大规模批量化二进制分析场景。
核心价值:
适用人群:二进制安全研究人员、固件分析师、逆向工程师
不包含:Ghidra 基础操作教学、Kotlin/Java 编程入门、二进制分析理论知识
重要:在使用 Akiba 之前,必须先读取配置文件。
# 读取配置文件
cat skills/akiba_zh/akiba_config.json
配置文件说明:
| 字段 | 说明 |
|---|---|
akiba.home | Akiba 主源代码仓库路径 |
akiba.executableRoot | Akiba 框架可执行文件根目录 |
modExample.repoUrl | 模块开发示例仓库地址 |
framework.runCommand | 运行 Akiba Framework 的命令,需要在后面添加各项所需参数 |
daemon.host / daemon.port | 数据库守护进程地址 |
注意:
akiba.home为空或无效,且需要自行开发模块,需要从 Github 仓库 https://github.com/IoTS-P/Akiba.git 拉取,并按照仓库中的 README.md 拉取子模块,另外需要从 Github 下载 11.3.2 版本的 Ghidra:
ghidra_11.3.2_PUBLIC/support,在 Linux 系统中运行 ./buildGhidraJar 脚本(如果没有权限则首先赋予),在 Windows 系统下运行 buildGhidraJar.bat 脚本。运行后将在 ghidra_11.3.2_PUBLIC/support 中生成 ghidra.jar。ghidra.jar 复制到 Akiba 源码仓库根目录内库目录(akiba.home内的lib)akiba.executableRoot)后使用 ./bin/akiba_framework 启动,不得在其他位置运行验证服务:
# 如果使用 Akiba Docker,下面的命令可检查 daemon 是否正常运行
curl -s "http://127.0.0.1:31777/test"
| 依赖项 | 版本要求 | 说明 |
|---|---|---|
| Java | 21+ | 必须使用 JDK 21,低版本会导致运行时错误 |
| Kotlin | 2.1.20+ | 框架开发语言 |
| Ghidra | 11.3.2 | 二进制分析引擎(其他版本 API 不兼容) |
| PostgreSQL | 最新稳定版 | 数据存储,由数据库守护进程管理 |
# 1. 设置 Java 环境
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
# 2. 初始化 Git 子模块
git submodule update --init --recursive
# 3. Docker 部署(推荐)
docker compose up --build
Akiba 为每个二进制文件启动独立的任务流水线:
Akiba 启动 → 初始化 → 全局预处理任务
↓
线程1: 流水线A(模块1 → 模块2 → 模块3)
线程2: 流水线B(模块1 → 模块2 → 模块3)
线程3: 流水线C(模块1 → 模块2 → 模块3)
config.json 的 general.threads 配置Akiba 为每个任务创建 2 个协程上下文:
| 上下文类型 | 访问权限 | 用途 |
|---|---|---|
| 全局作用域 | 所有任务可访问 | 全局预处理、全局 API |
| 流水线作用域 | 该流水线内任务可访问 | 二进制专属数据、任务 API |
| 数据类型 | 存储位置 | 访问方式 |
|---|---|---|
| 全局数据 | results 表的 global_data 列(JSON) | 模块间共享 |
| 临时数据 | 流水线内存 HashMap | getTaskData()/setTaskData() |
| 任务专用数据 | 自定义数据表列 | updateData() |
详细配置说明参见 docs/CONFIGURATION.md,核心配置结构:
{
"main": {
"username": "akiba",
"password": "akiba",
"usingInstance": "akiba-instance",
"general": {
"binariesRoot": "/data/binaries",
"threads": 1,
"autoAnalysisTimeout": 600
},
"withGhidraProject": {
"projectRoot": "./ghidra_projects",
"name": "project_name",
"mode": "new"
},
"sqlSource": {
"serverIP": "127.0.0.1",
"serverPort": "31777"
},
"tasks": [
{
"mainClassName": "org.iotsplab.akiba.module.MyModule",
"configKey": "@@/MyModule",
"timeout": 600
}
]
}
}
注:Akiba Docker 默认已经创建了 akiba 用户和 akiba-instance 数据库实例,
详细开发规范参见 docs/MODULE_DEVELOPMENT.md,核心开发步骤:
AkibaModule,使用 @WithTableColumn 定义数据列startProcess() 中编写分析逻辑updateData() 写入数据库config.json 中注册模块@WithTableColumn("result", "TEXT")
class MyModule(
id: Int,
program: Program,
consoleLogLevel: Level = Level.INFO,
fileLogLevel: Level = Level.INFO,
tableName: String? = "my_module_results"
) : AkibaModule(
id = id,
program = program,
consoleLogLevel = consoleLogLevel,
fileLogLevel = fileLogLevel,
tableName = tableName
) {
override suspend fun startProcess() {
val result = analyzeProgram()
updateData(mapOf("result" to result))
}
}
Akiba 按二进制文件和模块分离保存日志:
<log root>/
├── Root.log # 根日志
├── config.json # 任务配置
├── <failed>/ # 失败任务
│ └── <binary_id>/
│ └── ModuleName.log
├── <runtime_error>/ # 运行时错误
└── <success>/ # 成功任务
断点续传使用 starter.py 监控,日志 20 分钟无更新时自动重启:
python3 starter.py &
config.json 中增大对应任务的 timeout 值@IgnoreRuntimeTimeout 注解设置日志级别为 debug:
{
"consoleLogLevel": "debug",
"fileLogLevel": "debug"
}
检查数据库守护进程是否运行:
curl http://localhost:31777/test
git clone https://github.com/IoTS-P/Akiba.git
cd Akiba
git submodule update --init --recursive
docker compose up --build
config.json 配置任务127.0.0.1:31777./gradlew run --args="-c config.json@/main"
参考 subprojects/akiba_mod_example/usages_zh/AkibaExample.md(远程仓库路径:https://github.com/IoTS-P/Akiba-Mod-Example/blob/main/usages_zh/AkibaExample.md)
JAVA_HOME 环境变量git submodule update --init --recursiveakiba/akibaReentrantLock,改用 Mutex| 文档 | 说明 |
|---|---|
akiba_config.json | 全局配置 - 定位 Akiba 安装和数据库连接信息 |
REFERENCE.md | 快速参考卡片 - 包含完整命令、路径速查和配置模板 |
docs/CONFIGURATION.md | config.json 配置文件完整说明 |
docs/MODULE_DEVELOPMENT.md | Akiba 模块开发规范 |
subprojects/akiba_framework/Usage_guide_zh.md(远程) | 框架使用指南 |
subprojects/akiba_framework/README_zh.md(远程) | 框架 README - 包含子命令说明 |
subprojects/akiba_db_daemon/Usage_guide_zh.md(远程) | 数据库守护进程 API |