前因
自从将主力机更换为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.exe
和 idapyswitch.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.exe
和 idapyswitch.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
|
自行安装 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: ''
|