Watch & Learn

Debugwar Blog

Step in or Step over, this is a problem ...

Linux环境下使用Wine+IDA并激活Python插件

2022-01-20 @ UTC+0

前言


作为一名苦逼的反病毒人员,IDA是一个必不可少的工具,虽然IDA有Linux平台的版本,但其高昂的售价着实是让笔者望而却步,不过幸好Windows平台上有不少可用版本 ;)

作为一个用ArchLinux作为主力系统的反病毒人员,我选择用wine跑IDA…… 然后,就有了今天的故事。

IDA报错


IDA从某个版本开始,提供了python支持——当然,这个支持在windows上是没有问题的。可是在Linux平台,由于是wine模拟环境,会导致IDA提示找不到idapython3.dll模块:


为了使用上强大的python特性,因此有了本文……

Wine + IDA + Python


安装python环境


虽然Linux本身带了python环境,但是wine下的IDA是无法使用的,我们需要一个windows下的python环境。

从官网下载python3绿色包


当然你也可以下载安装版, 笔者选择绿色版主要是看中绿色版的portable特性和极为精简的目录结构。

我下载的是当前的最新版本,注意并不是版本越新越好,IDA本身支持的python版本有限,具体可以到IDA目录下的"python\<Python版本>\PyQt5"目录下查看,一定要下载对应支持的版本(截止到目前可用的最新IDA 7.7,建议用3.10.x版本的Python)。

https://www.python.org/ftp/python/3.10.2/python-3.10.2-embed-amd64.zip

下载完成后解压到对应目录:


这里需要注意Linux路径和wine下的Windows路径的对应关系,听着有点乱,举个例子就明白了:

Linux下的路径: /home/hacksign/.wine/drive_c/Program Files/Python3/
对应wine下的: C:\Program Files\Python3

OK, 解压到Python3目录后,我们就得到了一个windows下的python环境, 接下来为了方便后续调用,我们需要设置一下wine下的PATH环境变量。

设置环境变量


使用如下命令打开注册表

wine regedit

然后修改如下位置:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
在PATH最后,添加上面的python3环境(注意用分号分割各个路径 ):


配置完上述环境之后,我们新开个命令行, 执行如下命令:


如果你看到了python命令行提示符,那么恭喜你,你已经成功了一半了。

接下来我们需要修改IDA的python3.dll位置, 来到如下注册表位置(如果没有,需要先运行一下IDA):

HKEY_CURRENT_USER\Software\Hex-Rays

修改Python3TargetDLL为我们上面的python目录下的python3.dll绝对路径:


做完上述设置后,再开一个新的IDA,你会发现之前的报错信息没了,取而代之的是新的错误信息:


其实到这里,你的IDA已经可以使用ida-python了。不过作为一个完美主义者,我们还需要消除掉这个错误。

仔细观察上图的报错信息,可以发现其实是由于未安装python的yara模块导致。一般情况下,我们遇到ModuleNotFoundError: No module named 'xxx'的错误,第一时间想到的就是使用pip安装。

思路有了,接下来开干。

给Wine环境的Python安装Pip


首先从如下地址获取pip的安装脚本:


接着执行安装,如下图:


安装完成之后, 我们回到python目录下, 发现多了一个叫Lib的文件夹, 再往里找找,发现pip已经安装在 Libs\site-packages 这个目录下面了:


然而此时你想直接使用还是会提示找不到pip模块, 这是因为我们还没有设置变量,让python找到pip模块

设置python库的搜索路径


注意,如果你使用的是安装版本的python,那么需要设置PYTHONPATH环境变量(参考上面设置PATH变量)。

如果你使用的是绿色版python的话, 会在目录下找到一个叫做python310._pth的文件(310随下载的python版本号不同而不同)。打开并编辑这个文件,将site-packages路径写到文件中:


注意,这个文件中的路径填写的是相对路径,即相对于python.exe的路径。

保存退出后,执行如下命令:


如果看到了pip的版本信息,那么再次恭喜你,你已经成功了80%了。

接下来我们要安装yara模块,解决上面IDA报错找不到yara的错误, 命令如下图:


这时再次打开新的IDA,并随便反编译一个东西,又发现了新的错误:


这次是找不到libyara.dll文件,在python的目录下找一下这个文件在哪:


Emmmm……,发现位置有点问题, IDA尝试在 C:\Program Files\Python3 目录下找这个文件,而实际上文件安装到了 C:\Program Files\Python3\Lib\site-packages\Program Files\Python3\DLLs\libyara.dll这个目录下。人肉将libyara.dll移动到正确的位置,再次打开一个新的IDA并反汇编文件:


OK, 所有的错误已经消除, 功能初步测试正常。

后记


diaphora插件报错


在后续的使用过程中, 发现diaphora会报错:


下面记录一下如何解决错误。

首先要安装PyQt5这个包,由于笔者已经安装过了,因此下图报已经存在,安装命令是一样的:


然后发现脚本中似乎还在强制加载python38.dll, 而由于我们下载的是python 3.10版本, 并不存在python38.dll文件, 因此需要做个软连接:


之后再使用diaphora就不存在问题了, 下图是比较 true和false 两个程序的截图:


ret-sync插件无法启动


此插件enable之后立刻disable,日志大概下面这个样子:
  1. [sync] form create  
  2. [sync] default idb name: ntoskrnl_en.exe  
  3. [sync] found config file: user_conf(host='127.0.0.1', port=8844, alias=None, path='D:\\Windows10\\x64\\.sync')  
  4. [sync] hint: pdb name ('ntkrnlmp.exe') differs from registered module name ('ntoskrnl_en.exe')  
  5. [sync] sync enabled  
  6. [sync] init_broker  
  7. [sync] cmdline: "D:\Softwares\Python3\python.exe" -u "D:\Softwares\IDA Pro\plugins\retsync\broker.py" --idb "ntoskrnl_en.exe"  
  8. [sync] module base 0x140000000  
  9. [sync] hexrays #7.7.0.220118 found  
  10. [sync] broker new state: Starting  
  11. [sync] broker new state: Running  
  12. [sync] broker started  
  13. [sync] plugin loaded  
  14. [sync] broker new state: Not running  
  15. [sync]     check tmp file retsync.<broker|dispatcher>.err if you think this is an error  
  16. [sync] broker finished  
  17. [sync] idb is disabled  
此问题主要是由于Python缺少ret-sync库导致的, 解决办法为在python310._path文件中(310为版本号)加入ret-sync的库路径:
  1. >> cat python310._pth   
  2. D:\Softwares\IDA Pro\plugins\retsync  

IDA崩溃问题


如果你使用了idapyswitch.exe切换python环境,IDA可能会出现崩溃的情况。建议最后使用这个工具设置一下环境变量,然后再修复回来,不然IDA自带的PyQt5包可能无法使用。

这是因为idapyswitch.exe设置了一个错误的Python3TargetDLL值,你只需要打开注册表,修改如下位置的键值即可(具体见上文):
HKEY_CURRENT_USER\Software\Hex-Rays

IDA 7.6自带的go解析能力,用起来真的爽~

目录
前言
IDA报错
Wine + IDA + Python
安装python环境
设置环境变量
给Wine环境的Python安装Pip
设置python库的搜索路径
后记
diaphora插件报错
ret-sync插件无法启动
IDA崩溃问题

版权所有 (c) 2020 - 2025 Debugwar.com

由 Hacksign 设计