Skip to content

This script automates the process of refreshing pseudocode, renaming symbols, and saving the updated IDA database for all functions in a given binary, leveraging AI-assisted renaming for enhanced code readability.

Notifications You must be signed in to change notification settings

Inull-Studio/IDA-Local-Ollama

 
 

Repository files navigation

测试环境

  • Windows 10/11-IDA 9.0-IDAPython 3.8.10
  • MacOS-IDA 9.0-IDAPython 3.9.6

image-20241226102127346

image-20241226102139356

Install

本地部署 ollma 并下载好模型

并在代码以下部分替换成自己想用的模型

model_name_1 = 'qwen2.5:3b-instruct-q8_0'  # 第一个智能体使用的模型
model_name_2 = 'qwen2.5:3b-instruct-q8_0'  # 第二个智能体使用的模型

先检查 IDA

import sys
print(sys.version)

image-20241226101902179

在 idaapi.py 脚本开头替换对应 python 版本的路径

import sys
sys.path.append('/Users/lovensar/.pyenv/versions/3.9.6/lib/python3.9/site-packages')
import ollama #之前已经用pip安装好了ollama

可能会与到报错:

报错 ModuleNotFoundError: No module named 'pydantic_core._pydantic_core’。

我看路径是 3.11.8,然后输入pyenv global 3.9.6

替换好之后,重启 IDA

image-20241226102056297

然后我们可以开始了。

做了两天时间,目前只做了全局变量和函数名称。

调试

现在我的测试环境主要有 1.5b、3b、7b、32b 和 72b 的,主要参考了Qwen2.5Qwen2.5-Coder的。

但是具体的任务场景会有所不一样,我的目标是睡一觉起来之后能有一个大致的结果,我借助了 GPT-o1(测试时间 2024 年 12 月 28 日)来帮忙评分,大概满分 100 分的话可以拿一个 65 分。

image-20241228223815280

当然,这也只是一个不科学的自我尝试罢了。

要稳定的测试的话,针对不同的模型,有一些参数是需要调整一下的:

# AI Configuration
OLLAMA_HOST = 'http://localhost:11434'
MODEL_NAME = 'qwen2.5:72b'
TIMEOUT_SECONDS = 60
MAX_RESPONSE_LENGTH = 8192
RENAME_RETRIES = 10
CHUNK_SIZE = 20000
BATCH_SIZE = 10
MAX_TURNS = 2
TEMPERATURE = 0.2
TOP_P = 0.8
MAX_TOKENS = 50000

这里面的 CHUNK_SIZE 是一个比较重要的值,如果过大(超过 50000)可能会导致 qwen 模型陷入自己循环中,表现就是 IDA 未响应了(Mac 和 Windows 上都是,72b 模型和 3b 模型实测都有这个毛病)。

CHUNK_SIZE 的值我设置了多次查询(如果一个函数伪代码过长的话),72b 模型默认是 20000,32b 是 15000,14b/7b/3b 默认是 10000,1.5b 默认是 2000。

MAX_TOKENS 和 MAX_TURNS 是个没用的值,可以忽略。

TEMPERATURE 和 TOP_P 需要更专业的尝试,因此我就先设置比较严谨的值了,但是也尽可能多样性。

后面尝试稳定的话,有时间开发一下对局部变量进行重命名的操作。

About

This script automates the process of refreshing pseudocode, renaming symbols, and saving the updated IDA database for all functions in a given binary, leveraging AI-assisted renaming for enhanced code readability.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%