如何在Linux上舒适地运行IDA Pro并且正常使用脚本

前因

自从将主力机更换为Linux桌面后,我遇到的最大的问题就是如何在Linux上舒适地运行Windows上的一些逆向工具。

是的,ghidra 开源且功能齐全,但是图形界面真的非常糟糕且国内学习资源太少,插件也屈指可数;

radare2 也开源,命令行略麻烦不说,官方的GUI iaito 功能稀缺,伪代码生成需要第三方仓库实现,最后的结果差强人意。

兜兜转转还是想用回IDA Pro,奈何Linux上免费但闭源的IDAFree只支持x86/64反汇编,想(不掏空钱包)用上IDA Pro,似乎只有Windows版可以选择(Linux上的学习版本都很老了)

虽然Wine可以正常支持IDA Pro,但是Python以及脚本的安装是一个非常大的问题,不过如果使用非安装版本的Python,并且自带了IDA所需要的modules / site-packages的话就简单许多了。

前置要求

  • IDA Pro(最好自带绿色版Python)
  • Wine (推荐使用bottles管理Winetricks)

这里我推荐一个非常棒的IDA Pro整合:https://www.52pojie.cn/thread-1584115-1-1.html

这个整合不仅包含了很多常用的Plugins,还自带“绿色版”Python3,为接下来的设置提供了非常大的便利。

Wine的话我推荐 bottles , lutris 虽好,但是它是纯为游戏设计的,总感觉启动IDA用 Play 怪怪的(,而且依赖库安装也麻烦一些;bottles有一系列内置的依赖库安装脚本,更换Runner方便,支持snapshot,而且对winetrick的操作更多一些。

注意IDA的设置不是写在程序目录中的文件里的,而是C盘的某处,所以设置会随着bottles实例更换改变。

**注意:配置完成前不要运行 IDA_InitTool.exeidapyswitch.exe**,这两个程序都会修改注册表为错误值导致IDA无法运行。

了解一下Wine是如何管理Linux和Windows文件的:

Linux中的 /home/frnks/Security/CTFTools/IDAPro7.7/ 在Wine中会映射成Windows路径 Z:\home\frnks\Security\CTFTools\IDAPro7.7\

而Bottles管理的Windows文件系统在Linux上一般是 /home/frnks/.local/share/bottles/bottles/sec/drive_c/ 在Wine中则为 C:/

安装 IDA Pro

我们下载的是免安装版本的学习版,可以放心将其解压在Linux文件系统下,没有必要一定放在Bottles管理的C盘中。

Bottles

新建Bottles实例可以用 Application 模板,默认配置应该可以正常运行IDA Pro,笔者日常使用的配置在文章末尾。

如果嫌这个Win95主题太难看,可以在Details -> Tools -> Legacy Wine Tools -> Configuration -> Desktop Intergration -> Apperance -> Theme 修改主题(自带 Light 主题),不过IDA本身可以更换颜色,所以这个不太所谓。

如何运行IDA Pro? Run Executable... 可以临时运行一些exe文件(比如安装程序),如果常用的话可以 Add Shortcuts...,找到解压的ida64.exe / ida.exe 运行即可。

修改注册表

虽然可以正常运行IDA Pro,但是大部分Plugin都无法使用,Output窗口提示报错:

1
2
LoadLibrary(Z:\home\frnks\Security\CTFTools\IDAPro7.7\plugins\idapython3_64.dll) error: 找不到模块。
Z:\home\frnks\Security\CTFTools\IDAPro7.7\plugins\idapython3_64.dll: can't load file

很正常,我们新建的Bottles没有安装Python,虽然可以系统范围安装一个Python,但是需要手动 pip install,麻烦不说,笔者还遇到某些模块需要VC依赖库构建的情况。

所幸这个整合包自带Python,我们物尽其用。

接下来我们来修改注册表以让IDA正确加载 python3.dll 动态库。

注意是 python3.dll 而不是 python38.dll!后者会导致IDA崩溃,这就是运行IDA_InitTool.exeidapyswitch.exe导致IDA崩溃的原因

Bottles中打开Details -> Tools -> Registry Editor,找到 HKEY_CURRENT_USER\Software\Hex-Rays ,修改 Python3TargetDLL 键值为我们安装的IDA自带的Python动态库,如 Z:\home\frnks\Security\CTFTools\IDAPro7.7\python38\python3.dll

如果没有注册表,启动一下IDA吧

设置完后再运行IDA,不出意外应该是Plugins都会正常加载~

1
2
Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] 
IDAPython 64-bit v7.4.0 final (serial 0) (c) The IDAPython Team

result

自行安装 Python

由于笔者没能够正常通过pip安装所需的模块,所以若你不想使用百度网盘下载 / 网盘资源失效而需要自行安装Python并安装模块的话,可以参考这篇文章: https://www.debugwar.com/article/activate-IDAPython-with-wine-IDA-under-linux

总体过程基本一致,不过你可以使用Python for Windows的安装程序,并且自定义安装勾选上添加到PATH和安装pip免去大部分操作。至于最后要不要运行 idapyswitch.exe,笔者暂时没有遇到这种情况,由读者自行决定。

Bottles 配置

原谅我安装这么多依赖库,主要是为了兼容性~仅供参考~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
Arch: win64
CompatData: ''
Creation_Date: '2022-10-09 01:03:59.064507'
Custom_Path: false
DLL_Overrides: {}
DXVK: dxvk-1.10.3
Environment: Application
Environment_Variables: {}
External_Programs:
Installed_Dependencies:
- arial32
- times32
- courie32
- cjkfonts
- andale32
- arialb32
- comic32
- georgi32
- impact32
- tahoma32
- trebuc32
- verdan32
- webdin32
- allfonts
- vcredist2005
- vcredist2008
- vcredist2010
- vcredist2012
- vcredist2013
- vcredist2015
- winhttp
- vbrun6
- vcredist6
- vcredist6sp6
- msxml6
- dotnet40
- dotnet48
- gecko
- riched20
- msftedit
- gecko
- lucon
- unifont
- dsdmo
- dsound
- dswave
- gdiplus
- gmdls
- mediafoundation
- mono
- msls31
- atmlib
- d3dcompiler_47
- d3dx11
- d3dx9
- dotnet45
- dotnet46
- dotnet461
- dotnet462
- dotnetcoredesktop3
- dotnetcore3
- vcredist2019
Language: zh_CN
LatencyFleX: latencyflex-v0.1.0
NVAPI: dxvk-nvapi-v0.5.4
Name: sec
Parameters:
custom_dpi: 96
decorated: true
discrete_gpu: false
dxvk: true
dxvk_nvapi: false
fixme_logs: false
fsr: false
fsr_quality_mode: none
fsr_sharpening_strength: 5
fullscreen_capture: false
gamemode: false
gamescope: false
gamescope_borderless: false
gamescope_fps: 0
gamescope_fps_no_focus: 0
gamescope_fullscreen: true
gamescope_game_height: 0
gamescope_game_width: 0
gamescope_scaling: false
gamescope_window_height: 0
gamescope_window_width: 0
latencyflex: false
mangohud: false
mouse_warp: true
obsvkc: false
pulseaudio_latency: true
renderer: gl
sandbox: false
sync: wine
take_focus: false
use_be_runtime: true
use_eac_runtime: true
use_runtime: true
use_steam_runtime: false
versioning_automatic: false
versioning_compression: false
versioning_exclusion_patterns: false
virtual_desktop: false
virtual_desktop_res: 1280x720
vkbasalt: false
vkd3d: true
vmtouch: false
vmtouch_cache_cwd: false
Path: sec
Runner: caffe-7.20
RunnerPath: ''
Sandbox:
share_net: true
share_sound: true
State: 13
Uninstallers:
allfonts: true
andale32: false
arial32: false
arialb32: false
atmlib: false
cjkfonts: false
comic32: false
courie32: false
d3dcompiler_47: false
d3dx11: false
d3dx9: false
dotnet40: Microsoft .NET Framework 4 Extended
dotnet45: true
dotnet46: true
dotnet461: true
dotnet462: true
dotnet48: true
dotnetcoredesktop3: true
dsdmo: false
dsound: false
dswave: false
gdiplus: false
gecko: true
georgi32: false
gmdls: false
impact32: false
lucon: false
mediafoundation: false
mono: true
msftedit: false
msls31: false
msxml6: false
riched20: false
tahoma32: false
times32: false
trebuc32: false
unifont: false
vbrun6: false
vcredist2005: true
vcredist2008: true
vcredist2010: true
vcredist2012: true
vcredist2013: true
vcredist2015: true
vcredist2019: true
vcredist6: false
vcredist6sp6: false
verdan32: false
webdin32: false
winhttp: false
Update_Date: '2023-03-28 20:19:24.229983'
VKD3D: vkd3d-proton-2.6-1-5b73139
Versioning: false
Versioning_Exclusion_Patterns: []
Windows: win10
WorkingDir: ''
data: {}
run_in_terminal: false
session_arguments: ''