IDA 官方推出插件管理器: http://hex-rays.com/blog/introducing-the-ida-plugin-manager

IDA 官方推出了一款插件管理器 ida-hcli,可以很方便来管理插件 (安装、更新、删除等),除了管理插件,还有其它许多有趣的功能。以下只是记录使用管理器遇到的问题。

安装插件管理器

插件安装管理器需要依赖以下:

  • 至少 Python3.10
  • uv 包管理器

克隆 ida-hcli 库

git clone https://github.com/HexRaysSA/ida-hcli.git

安装项目依赖

cd ida-hcli
uv sync

执行

uv run hcli --help

如果不想通过 uv 方式来执行,可以将其打包成可执行文件

# 添加 pyinstaller
uv add pyinstaller

# 打包
uv run pyinstaller --onefile src/hcli/main.py

# 重命令为 hcli
mv dist/main dist/hcli

打包后的文件在 dist 目录下,为了方便到处运行,将其放在 /usr/local/bin 目录下

cp dist/hcli /usr/local/bin

安装插件

在初始使用 hcli 前先设置下 IDA 默认安装路径

hcli ida set-default /Applications/IDA\ Professional\ 9.3.app

执行完后会在 ~/.idapro 目录下生成 ida-config.json 文件,写入的内容

{"Paths": {"ida-install-dir": "/Applications/IDA Professional 9.3.app"}

列举可用的插件

hcli plugin search
hcli 列举可用插件列表

上图中 incompatible 表示此插件不兼容当前 IDA 版本,安装了插件会显示 installed。

遇到的问题

在装插件时遇到 python 环境问题,导致插件安装失败,在启动 IDA 时,会使用当前系统 Python 环境,如今 Python 不允许直接通过 pip 方式安装第三库。

较新版本的 IDA 支持使用虚拟 Python 环境,所以给 IDA 指定一个虚拟环境

# 进入 .idapro 目录下
cd ~/.idapro

# 使用 uv 来创建虚拟环境
uv venv --seed venv

# 激活虚拟环境
source venv/bin/activate

# 启动 IDA
/Applications/IDA\ Professional\ 9.3.app/Contents/MacOS/ida

以上有个问题,每次打开 IDA 时,都要先 source 一下,再从命令行启动,而且我是把 IDA 放在 Dock 启动栏,打开时不会运行在虚拟 Python 环境中,使用 idapyswitch 也检测不到虚拟环境,所以这就造成了 hcli 在装插件 (Python 类插件) 时会报错,那么有没有一种方式既能从 Dock 栏点击 IDA 图标启动自动设置虚拟环境,又能让 hcli 正常工作,这时需要手动在 ~/.idapro 目录下创建一个名为 idapythonrc.py 的脚本文件

idapythonrc.py

from pathlib import Path

def activate_virtualenv(virtualenv_path: Path):
    for bindir in ("Scripts", "bin"):
        activate_this_path = virtualenv_path / bindir / "activate_this.py"

        if not activate_this_path.exists():
            continue

        if not activate_this_path.is_file():
            continue

        exec(activate_this_path.read_text(), dict(__file__=str(activate_this_path)))
        print("activated virtual environment: " + str(virtualenv_path))
        break

    else:
        raise ValueError('Could not find "activate_this.py" in ' + str(virtualenv_path))

IDAUSR = Path("/Users/zer0daysec/.idapro")
activate_virtualenv(IDAUSR / "venv")

启动 IDA 会自动调用 idapythonrc.py 文件,此 py 文件又会去调用 activate_this.py 去激活虚拟环境,这样问题就解决了,hcli plugin install [要安装的插件名] 执行也就不会报错了。通过 hcli 安装的插件会装在 ~/.idapro/plugins 目录下。

通过 hcli 安装 hrtng 插件
验证

Have Fun !!!

参考