
Все в одном анализ бинарных файлов macOS: парсинг Mach-O, дизассемблирование ARM64, подписи кода и отладка.
Инструмент для анализа нативных бинарных файлов macOS, предоставляющий разбор Mach-O, дизассемблирование ARM64 и отладку процессов. Полностью написан на Swift без внешних зависимостей.
| Функция | Описание |
|---|---|
| Разбор Mach-O | Заголовки, сегменты, секции, символы, динамические библиотеки, строки |
| Кодовые подписи | Права (entitlements), CDHash, информация о подписи, идентификатор команды |
| Дизассемблирование ARM64 | Полный декодер инструкций с аннотациями PAC |
| Отладка процессов | Подключение, точки останова, память, регистры |
| Библиотека Swift | Встраивание в собственные проекты |
| Вывод JSON | Удобный для скриптов формат вывода |
# Сборка
swift build
# Парсинг бинарного файла
swift run machscope parse /bin/ls
# Парсинг приложения macOS
swift run machscope parse /Applications/Calculator.app/Contents/MacOS/Calculator
# Просмотр прав (entitlements)
swift run machscope parse /Applications/Safari.app/Contents/MacOS/Safari --entitlements
# Вывод в JSON
swift run machscope parse /bin/ls --json
brew install sadopc/tap/machscope
git clone https://github.com/sadopc/machscope.git
cd MachScope
swift build -c release
sudo cp .build/release/machscope /usr/local/bin/
Анализ структуры Mach-O:
# Базовый анализ
machscope parse /bin/ls
# Полный анализ
machscope parse /bin/ls --all
# Определённые секции
machscope parse /путь/к/бинарному --symbols
machscope parse /путь/к/бинарному --dylibs
machscope parse /путь/к/бинарному --strings
machscope parse /путь/к/бинарному --signatures
machscope parse /путь/к/бинарному --entitlements
# Вывод в JSON для скриптов
machscope parse /bin/ls --json --all > analysis.json
Дизассемблирование кода ARM64:
# Список функций
machscope disasm /bin/ls --list-functions
# Дизассемблирование с адреса
machscope disasm /bin/ls --address 0x100003f40 --length 50
# Показывать байты инструкций
machscope disasm /bin/ls --show-bytes
Просмотр доступных функций:
machscope check-permissions
Вывод:
Feature Status Notes
------------------------------------------------------------
Static Analysis ✓ Ready No special permissions needed
Disassembly ✓ Ready No special permissions needed
Debugger ✗ Denied Missing debugger entitlement
Подключение к запущенным процессам (требуется подпись):
# Сначала подпишите с правом на отладку
codesign --force --sign - --entitlements Resources/MachScope.entitlements .build/debug/machscope
# Включите «Инструменты разработчика» в Системных настройках > Конфиденциальность и безопасность
# Подключиться к процессу
machscope debug <pid>
Добавьте MachScope в ваш Package.swift:
dependencies: [
.package(url: "https://github.com/sadopc/machscope.git", from: "1.0.0")
]
Затем используйте в коде:
import MachOKit
import Disassembler
// Парсинг бинарного файла
let binary = try MachOBinary(path: "/bin/ls")
print("CPU: \(binary.header.cpuType)")
print("Segments: \(binary.segments.count)")
// Проверка прав (entitlements)
if let signature = try binary.parseCodeSignature(),
let entitlements = signature.entitlements {
for key in entitlements.keys {
print("\(key): \(entitlements[key] ?? "nil")")
}
}
// Дизассемблирование
let disasm = ARM64Disassembler(binary: binary)
let result = try disasm.disassembleFunction("_main", from: binary)
for instruction in result.instructions {
print(disasm.format(instruction))
}
MachScope/
├── Sources/
│ ├── MachOKit/ # Основная библиотека парсинга Mach-O
│ ├── Disassembler/ # Декодер инструкций ARM64
│ ├── DebuggerCore/ # Отладка процессов
│ └── MachScope/ # CLI-приложение
├── Tests/ # Наборы тестов (319+ тестов)
├── Resources/ # Файлы прав для подписи кода
└── docs/ # Документация
Главное преимущество MachScope: библиотека на Swift, которую можно встраивать в собственные инструменты.
Лицензия MIT — подробнее в LICENSE.
Приветствуются любые вклады! Пожалуйста, сначала прочитайте Руководство по участию.
# Запустите тесты перед отправкой
swift test
# Отформатируйте код
xcrun swift-format -i -r Sources/ Tests/
Создано с ❤️ на Swift
| Инструмент | Язык | Библиотека? | ARM64 PAC | Отладчик |
|---|
| MachScope | Swift | ✅ Да | ✅ Да | ✅ Да |
| otool | C | ❌ Нет | ❌ Нет | ❌ Нет |
| objdump | C | ❌ Нет | ❌ Нет | ❌ Нет |
| jtool2 | C | ❌ Нет | ✅ Да | ❌ Нет |
| Hopper | — | ❌ Нет | ✅ Да | ❌ Нет |