下载与安装
根据网上泄露的资源,这里下载到的是 IDA Pro 7.6.210427 SP1 x64 + Hexrays, Hexarm & Hexmips Decompilers.7z。
压缩包内有两个文件夹,一个是 Other
,另一个是 Software
。将 Software
中的内容全部解压出来,IDA 的本体就可以使用了。
Python 配置
修改 IDA 文件
IDA 默认不支持 Python 3.9 版本。在压缩包的 Others
文件夹下有一个 ida76sp1_python39_win
目录。将其中的内容拖动到根目录,会有文件覆盖提示,依次覆盖即可。
下载 Python 本体
不建议使用系统 Python,容易引起环境之间的干扰。而且系统 Python 占用空间非常大,排起错来非常麻烦。
压缩包内并没有放置 Python 的文件,所以需要自行到官网下载。下载时选择 Windows embeddable package (64-bit)
。这里直接下载 python-3.9.8-embed-amd64.zip。
注:
- 经过测试,IDA 32位版也可以正常使用 Python 64位版。
- 经过测试,Python 3.8 也可以正常使用。
修改路径
-
下载后解压到根目录下,与
python
同目录,重命名文件夹为python39
。 -
进入注册表
计算机\HKEY_CURRENT_USER\Software\Hex-Rays\IDA\
,新建(修改)Python3TargetDLL
使其值为C:\Program Files\IDA\python39\python39.dll
-
这个时候打开根目录下的
idapyswitch.exe
可以看到 IDA 已经选中了下载的 Python。打开 IDA 也不会弹出错误。
安装 pip
默认的 Python 是不带 pip 的。
-
先去官网下载 get-pip.py。为了方便起见,直接放到
python39
目录下。 -
在
python39
目录下打开终端,运行./python.exe get-pip.py
。必须输入
./
否则会调用系统安装的 Python。 -
这个时候尝试运行
pip
会提示找不到模块。排查后发现是找不到路径,所以还需要配置库文件的路径。 -
在
python39
目录下存在python39._pth
的文件,用记事本打开后,新增一行指向库文件。这里新增C:\Program Files\IDA\python39\Lib\site-packages
。 -
重新打开 pip 就可以正常使用了。
IPyIDA 插件安装
IPyIDA 可以引入类似于 Jupyter Notebook
的功能,在逆向时十分有用。
根据官方指引,在 IDA 运行如下命令即可。
import urllib.request; exec(urllib.request.urlopen('https://github.com/eset/ipyida/raw/stable/install_from_ida.py').read())
但是总是会安装不成功。所以需要手动安装。
观察脚本,可以发现总共做了三件事:安装 pip,安装 IPyIDA,安装插件。
-
安装 pip 上面已经安装了。
-
安装 IPyIDA 直接执行
./python -m pip install ipyida
-
安装插件调用原脚本中 108行 至结尾。
if not os.path.exists(idaapi.get_user_idadir()): os.makedirs(idaapi.get_user_idadir(), 0o755) ida_python_rc_path = os.path.join(idaapi.get_user_idadir(), "idapythonrc.py") rc_file_content = "" if os.path.exists(ida_python_rc_path): with open(ida_python_rc_path, "r") as rc: rc_file_content = rc.read() if "# BEGIN IPyIDA loading" in rc_file_content: print("[.] Old IPyIDA loading script present in idapythonrc.py. Removing.") in_ipyida_block = False for line in fileinput.input(ida_python_rc_path, inplace=1, backup='.ipyida_old'): if line.startswith("# BEGIN IPyIDA loading code"): in_ipyida_block = True elif line.startswith("# END IPyIDA loading code"): in_ipyida_block = False elif not in_ipyida_block: sys.stdout.write(line) ipyida_stub_target_path = os.path.join(idaapi.get_user_idadir(), "plugins", "ipyida.py") if not os.path.exists(os.path.dirname(ipyida_stub_target_path)): os.makedirs(os.path.dirname(ipyida_stub_target_path), 0o755) # Make sure ipyida module is not the ipyida.py in the plugins folder, otherwise # pkg_resources will try to get file from there. This happends when package is # uninstalled, but ipyida.py is still in the plugin folder. if 'ipyida' in sys.modules: del sys.modules['ipyida'] shutil.copyfile( pkg_resources.resource_filename("ipyida", "ipyida_plugin_stub.py"), ipyida_stub_target_path ) print("[+] ipyida.py added to user plugins") idaapi.load_plugin(ipyida_stub_target_path) _ida_version = pkg_resources.parse_version(idaapi.get_kernel_version()) if os.name == 'nt' and _ida_version < pkg_resources.parse_version("7.4"): # No party for Windows with old IDA print("[+] IPyIDA Installation successful. Use <Shift+.> to open the console.") else: print("[] IPyIDA Installation successful. Use <Shift+.> to open the console.")
或者直接在 IDA 中执行
import urllib.request; exec(urllib.request.urlopen('https://gcore.jsdelivr.net/gh/kazutoiris/ipyida@master/install_from_ida.py').read())
-
按下
Shift+.
检查是否安装完成
Lumina 配置
Lumina 可以在线识别知名函数的元数据(函数名称,原型,注释,操作数类型和其他信息),不用再去手动标注,非常方便。
Lumina 目前暂时未对免费用户开放,所以在压缩包内配置了另一个免费服务器,测试效果还行。
但是压缩包内的服务器信息过于陈旧,需要更新
-
修改
cfg/ida.cfg
LUMINA_HOST = "lumen.abda.nl"; LUMINA_PORT = 1235
-
更新证书
下载最新 hexrays.crt,替换根目录下原先的证书。
-
测试是否可以正常使用