首页
社区
课程
招聘
[原创] 套娃之arm架构下的MacBook通过parallels+rosetta安装Linux amd64版本的IDA Pro
2024-3-26 14:08 4651

[原创] 套娃之arm架构下的MacBook通过parallels+rosetta安装Linux amd64版本的IDA Pro

2024-3-26 14:08
4651

前言

苹果公司在MacBook这种生产力平台使用无疑是个伟大且大胆的创新,经过几年的软件生态环境的改善,各种常用工具基本都能在mac下运行。但仍有些闭源发布的软件仍需要在amd64架构下的Linux环境中才能运行,比如本文中的IDA Pro 7.6版,因此整理一下踩坑记录,可供相关需求的同学参考。

划重点:arm环境下运行amd64程序;ldd跨架构运行

环境和工具

  • MacBook with M3 chip
  • parallels Desktop 19
  • IDA Pro 8.3 for Linux 安装包

支持amd64的Linux环境

parallels是Mac生态下非常好用的虚拟机软件,但之前的版本仅支持运行arm架构的虚拟机,不支持amd64的程序。在parallels的v19版本之后,基于苹果官方提供的支持, parallels推出了在arm虚拟机中运行amd64程序的能力,并提供了一套配置好了的ubuntu 22.04虚拟机镜像。

因此,我们只需要点击创建虚拟机,下载Ubuntu with x86_emulation,即可获得amd64的模拟运行环境。如下图。

创建虚拟机,下载Ubuntu with x86_emulation

安装IDA pro并解决各种依赖缺失

打开安装好的虚拟机,把安装包拷贝进来,在终端中运行。

1
sudo idapronl_xxx.run

但直接报错: rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2

这是因为parallel提供的虚拟机仅安装了基础了amd64的组件,仍有大量的组件缺失。比如在这里,是缺失了binutils组件。

因此作者安装了amd64架构下的binutils,注意使用:amd64选择安装的目标架构

1
2
sudo apt-get update
sudo apt-get install binutils:amd64

然后,安装程序顺利进行,作者将idapro安装在/opt/idapro-8.3目录下。

尝试运行ida64,果然又提示各种库文件缺失。

比如以下报错提示:

1
/opt/idapro-8.3/ida64: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory

表示缺失了libGL.so.1动态链接库,谷歌搜索后发现需要安装libgl1-mesa-glx库,则运行命令sudo apt install libgl1-mesa-glx:amd64安装amd64架构下的libgl1-mesa-glx库。

类似的,提示libgthread-2.0.so.0缺失则安装libglib2.0-0:amd64。提示libSM.so.6则安装libsm6:amd64libxext6:amd64。提示libfontconfig.so.1则安装libsm6:amd64

解决Qt插件无法运行的问题

经过不断修补缺失链接库,ida不再提示缺失链接库,开始提示QT的xcb插件无法加载。如下:

1
2
3
4
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
 
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

这是因为IDA安装目录下libQt5XcbQpa.so.5所依赖的其他链接库无法运行,将在下一章使用ldd命令分析缺失的动态链接库。

修改ldd使其支持分析amd64程序

通常情况下,我们选择使用ldd命令分析程序所需的动态链接库,寻找其中的缺失项。

但当运行ldd libQt5XcbQpa.so.5,终端却提示not a dynamic executable

而尝试使用ldd分析系统自带的arm架构二进制文件时,却能正常显示。

因此猜测是ldd无法跨架构运行。ldd工具包含在libc-bin中,所以尝试使用sudo apt install libc-bin:amd64安装amd64架构下的ldd工具。但很不幸,由于amd64下的libc-bin和arm原生的libc-bin冲突,无法正常安装。

1
2
3
4
The following packages have unmet dependencies:
 libc-bin : Conflicts: libc-bin:amd64
 libc-bin:amd64 : Conflicts: libc-bin
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

libc-bin看起来又像是系统比较重要的库,因此没有冒险把原本的libc-bin替换为amd64架构的软件。

通过进一步查阅资料,发现ldd程序本身其实是脚本,并非二进制程序。/usr/bin/ldd代码中使用RTLDLIST定义了使用哪个ld-linux。

1
RTLDLIST=/lib/ld-linux-aarch64.so.1

ldd是依赖于ld-linux动态链接库的实现的,而ld-linux在不同架构下对应有不同的二进制包。比如在arm下为ld-linux-aarch64.so.1,在amd64下为ld-linux-x86-64.so.2

因此,作者尝试使用/lib64/ld-linux-x86-64.so.2替换掉arm架构的版本,并将程序保存为/usr/bin/ldd-amd64,现在可以成功运行 ldd libQt5XcbQpa.so.5,分析缺失的依赖项。

继续解决Qt插件无法运行的问题

尝试运行 ldd libQt5XcbQpa.so.5,解决依赖缺失问题。

1
2
3
4
5
6
$ ldd-amd64 /opt/idapro-8.3/libQt5XcbQpa.so.5
...(省略)
    /lib64/ld-linux-x86-64.so.2 (0x00007ffffffc4000)
    libdbus-1.so.3 => not found
    libxcb-util.so.1 => /lib/x86_64-linux-gnu/libxcb-util.so.1 (0x00007ffffe6b5000)
...(省略)

发现是libdbus-1.so.3缺失,搜索发现缺少了libdbus-1-3,于是运行安装sudo apt install libdbus-1-3:amd64

终于可以顺利的运行IDA,实现二进制反编译!

IDA运行成功

解决idapython无法运行的问题

运行后,IDA控制台提示:

1
2
dlopen(/opt/idapro-8.3/plugins/idapython3_64.so): libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
/opt/idapro-8.3/plugins/idapython3_64.so: can't load file

看起来是idapython3_64.so运行时无法找到libpython3.6m.so.1.0,导致出错。

尝试安装amd64架构下的libpython3.10:amd64,但还是不行。

参考 https://askubuntu.com/a/1432778 ,可以将高版本的libpython强行软链接为低版本的libpython。

1
2
3
4
sudo apt install libpython3.10:amd64
dpkg -L libpython3.10:amd64  #查看libpython3.10的so文件所在路径
sudo ln -s libpython3.10.so.1 libpython3.6m.so.1
sudo ln -s libpython3.10.so.1.0 libpython3.6m.so.1.0

再次打开IDA,已经可以正确运行IDAPython。

IDAPython运行成功

libpython3.6m.so.1缺失的另一种解决方式

也可以通过安装python3.6并且制定库搜索路径的方式解决libpython3.6m.so.1缺失的问题。尝试使用miniconda安装python3.6的环境。

1
2
3
4
curl -O https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ./Miniconda3-latest-Linux-x86_64.sh
/opt/miniconda3/bin/conda init
conda create --name idapy36 "python=3.6,<3.7"

设定库搜索路径

1
export LD_LIBRARY_PATH=/home/parallels/.conda/envs/idapy36/lib:$LD_LIBRARY_PATH

All in One

使用以下命令解决IDAPro安装时所有的依赖问题。

1
2
3
4
5
6
7
8
sudo apt-get update
sudo apt-get install binutils:amd64 libgl1-mesa-glx:amd64 libglib2.0-0:amd64 libsecret-1-0:amd64
sudo apt-get install libfontconfig1:amd64 libxcb-icccm4:amd64 libxcb-image0:amd64 libxcb-keysyms1:amd64 libxcb-render-util0:amd64 libxcb-render0:amd64 libxcb-shape0:amd64 libxcb-xinerama0:amd64 libxcb-xkb1:amd64 libsm6:amd64 libice6:amd64 libxkbcommon-x11-0:amd64 libxkbcommon0:amd64 libdbus-1-3:amd64
 
sudo apt install libpython3.10:amd64
cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libpython3.10.so.1 libpython3.6m.so.1
sudo ln -s libpython3.10.so.1.0 libpython3.6m.so.1.0

总结

非常套娃的踩了安装IDA Pro的坑,在arm架构下的MacBook通过parallels+rosetta安装Linux amd64版本的IDA Pro。本技术也可以用于安装其他跨架构软件。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (9)
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
LightE 2024-3-26 15:06
2
0
感谢分享
雪    币: 2037
活跃值: (4081)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
默NJ 2024-3-26 15:09
3
0
Linux amd64版本的IDA Pro在哪下载?
雪    币: 1274
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
m2kar 2024-3-26 15:25
4
0
这个买的正版,没看到IDA Pro amd64的泄漏版。
雪    币: 19085
活跃值: (28674)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2024-3-27 09:31
5
1
感谢分享
雪    币: 1181
活跃值: (2614)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iyue_t 2024-3-27 15:40
6
0
m2kar 这个买的正版,没看到IDA Pro amd64的泄漏版。

直到看到这句话,666。

最后于 2024-3-27 15:40 被iyue_t编辑 ,原因:
雪    币: 1412
活跃值: (4128)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2024-3-28 16:09
7
0
再套一层wine解决 linux版本的问题吧
雪    币: 3447
活跃值: (2237)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
citscn 2024-3-28 16:39
8
1
m2kar 这个买的正版,没看到IDA Pro amd64的泄漏版。
为啥不直接买mac版的
雪    币: 777
活跃值: (946)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killsu 2024-3-30 14:11
9
0
PD 直接装 Windows 用 X64 的转译能力直接跑 IDA Pro 好像更简单?不过折腾本身就是一种乐趣和价值,感谢 LZ 的分享
雪    币: 424
活跃值: (1407)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kingking888 2024-4-1 12:24
10
0
citscn 为啥不直接买mac版的
???? 的我肚子疼
游客
登录 | 注册 方可回帖
返回