
オールインワンのmacOSバイナリ解析: Mach-O解析、ARM64逆アセンブリ、コード署名、およびデバッグ。
ネイティブなmacOSバイナリ解析ツール。Mach-Oパース、ARM64逆アセンブル、プロセスデバッグを提供します。完全にSwiftで構築され、外部依存関係はありません。
| 機能 | 説明 |
|---|---|
| Mach-Oパース | ヘッダー、セグメント、セクション、シンボル、ダイリブ、文字列 |
| コード署名 | 権限、CDHash、署名情報、チームID |
| ARM64逆アセンブル | PAC注釈付きの完全な命令デコーダ |
| プロセスデバッグ | アタッチ、ブレークポイント、メモリ、レジスタ |
| Swiftライブラリ | 自身のプロジェクトに組み込み可能 |
| JSON出力 | スクリプトに適した出力形式 |
# Build
swift build
# Parse a binary
swift run machscope parse /bin/ls
# Parse a macOS app
swift run machscope parse /Applications/Calculator.app/Contents/MacOS/Calculator
# View entitlements
swift run machscope parse /Applications/Safari.app/Contents/MacOS/Safari --entitlements
# JSON output
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バイナリ構造を解析:
# Basic analysis
machscope parse /bin/ls
# Full analysis
machscope parse /bin/ls --all
# Specific sections
machscope parse /path/to/binary --symbols
machscope parse /path/to/binary --dylibs
machscope parse /path/to/binary --strings
machscope parse /path/to/binary --signatures
machscope parse /path/to/binary --entitlements
# JSON output for scripting
machscope parse /bin/ls --json --all > analysis.json
ARM64コードを逆アセンブル:
# List functions
machscope disasm /bin/ls --list-functions
# Disassemble from address
machscope disasm /bin/ls --address 0x100003f40 --length 50
# Show instruction bytes
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
実行中のプロセスにアタッチ(署名が必要):
# First, sign with debugger entitlement
codesign --force --sign - --entitlements Resources/MachScope.entitlements .build/debug/machscope
# Enable Developer Tools in System Settings > Privacy & Security
# Attach to process
machscope debug <pid>
Package.swiftにMachScopeを追加:
dependencies: [
.package(url: "https://github.com/sadopc/machscope.git", from: "1.0.0")
]
コードで使用:
import MachOKit
import Disassembler
// Parse a binary
let binary = try MachOBinary(path: "/bin/ls")
print("CPU: \(binary.header.cpuType)")
print("Segments: \(binary.segments.count)")
// Check entitlements
if let signature = try binary.parseCodeSignature(),
let entitlements = signature.entitlements {
for key in entitlements.keys {
print("\(key): \(entitlements[key] ?? "nil")")
}
}
// Disassemble
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 | — | ❌ いいえ | ✅ はい | ❌ いいえ |