with one click
akiba-zh
Akiba 二进制分析框架使用与开发指南 - 基于 Ghidra 和 Kotlin 的批量流水线式分析框架,适用于大规模固件和二进制文件分析
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Akiba 二进制分析框架使用与开发指南 - 基于 Ghidra 和 Kotlin 的批量流水线式分析框架,适用于大规模固件和二进制文件分析
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| 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 |