Стандартная установка
1. Скачиваем последнюю версию keypatch.py (ссылка на репозиторий) и помещаем файл в каталог:
Bash:
/Applications/IDA Professional 9.0.app/Contents/MacOS/plugins/
2. Устанавливаем keystone
Bash:
pip3 install keystone-engine
Если используется Python версии ниже 3.11, дополнительно выполняем:
Bash:
pip3 install six
После этого, если у вас Intel-версия macOS, Keypatch в IDA Pro 9.0 должен заработать сразу.Но на ARM (Apple Silicon) при запуске IDA Pro 9.0, скорее всего, появится ошибка
Code:
/Applications/IDA Professional 9.0.app/Contents/MacOS/plugins/keypatch.py: ERROR: fail to load the dynamic library.
Traceback (most recent call last):
...
ImportError: ERROR: fail to load the dynamic library.
Причины ошибки
Ошибку могут вызывать два фактора:- В каталоге keystone отсутствуют libkeystone.dylib и libkeystone.0.dylib
(важнее всего наличие именно libkeystone.0.dylib, первый файл - лишь симлинк). - Файл libkeystone.dylib собран под архитектуру x86_64, а не arm64.
Bash:
# Библиотека по умолчанию:
➜ ~ file /opt/homebrew/lib/python3.13/site-packages/keystone/libkeystone.dylib
# результат: /opt/homebrew/lib/python3.13/site-packages/keystone/libkeystone.dylib: Mach-O 64-bit dynamically linked shared library x86_64
# Собранная вручную:
➜ ~ file ~/Downloads/keystone/build/llvm/lib/libkeystone.0.dylib
# результат: /Users/studio/Downloads/keystone/build/llvm/lib/libkeystone.0.dylib: Mach-O 64-bit dynamically linked shared library arm64
Решение
Необходимо самостоятельно собрать arm64-версию библиотеки libkeystone.0.dylib и скопировать её в каталог установки keystone.Шаг 1. Скачивание исходников
Code:
git clone https://github.com/keystone-engine/keystone.git
cd keystone
mkdir build
cd build
Шаг 2. Настройка конфигурации
1. В файле make-common.sh заменяем строку:
Code:
# было
ARCH=''
# стало
ARCH='arm64'
2. В файле make-share.sh указываем свой путь к Python:
Code:
# было
cmake ... -G "Unix Makefiles" ..
# стало (пример для Python 3.12):
cmake -DBUILD_LIBS_ONLY=$BUILD_LIBS_ONLY -DLLVM_BUILD_32_BITS="$LLVM_BUILD_32_BITS" -DCMAKE_OSX_ARCHITECTURES="$ARCH" -DCMAKE_BUILD_TYPE=$BUILDTYPE -DBUILD_SHARED_LIBS=ON -DLLVM_TARGETS_TO_BUILD="all" -DPYTHON_LIBRARY="/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.12/lib/libpython3.12.dylib" -DPYTHON_EXECUTABLE="/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.12/bin/python3.12" -G "Unix Makefiles" ..
3. В каждом CMakeLists.txt меняем:
Code:
# было
cmake_minimum_required(VERSION 2.8.7)
# стало
cmake_minimum_required(VERSION 3.5)
# это комментируем. CMP0051 является устаревшим
if (POLICY CMP0051)
# CMake 3.1 and higher include generator expressions of the form
# $<TARGETLIB:obj> in the SOURCES property. These need to be
# stripped everywhere that access the SOURCES property, so we just
# defer to the OLD behavior of not including generator expressions
# in the output for now.
cmake_policy(SET CMP0051 OLD)
endif()
Шаг 3. Сборка
В каталоге build выполняем:
Code:
../make-share.sh
Если компиляция успешна — появится соответствующее окно.
Не удалось прогрузить медиа
Использование собранной библиотеки
Собранные файлы libkeystone.dylib и libkeystone.0.dylib находятся в:
Code:
keystone/build/llvm/lib
Code:
/opt/homebrew/lib/python3.13/site-packages/keystone/
Полезная ссылка
👍38
😁6
👏9
🤔4
LIMB