https://github.com/PoomSmart/IDAObjcTypes
A collection of types & functions definitions useful for iOS/macOS binaries analysis.
https://github.com/PoomSmart/IDAObjcTypes
analysis binaries definitions functions ghidra headers ida-pro objc types
Last synced: 1 day ago
JSON representation
A collection of types & functions definitions useful for iOS/macOS binaries analysis.
- Host: GitHub
- URL: https://github.com/PoomSmart/IDAObjcTypes
- Owner: PoomSmart
- License: other
- Created: 2019-01-02T07:26:08.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2026-05-03T06:35:09.000Z (3 months ago)
- Last Synced: 2026-05-03T08:27:59.282Z (3 months ago)
- Topics: analysis, binaries, definitions, functions, ghidra, headers, ida-pro, objc, types
- Language: Objective-C
- Homepage:
- Size: 2.44 MB
- Stars: 401
- Watchers: 6
- Forks: 45
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Security: Security/Security.h
Awesome Lists containing this project
- awesome-ghidra - IDAObjcTypes - A collection of (public and private) types and functions definitions useful for Objective-C binaries analysis. Supports Ghidra and IDA (Ghidra Scripts/Plugins/Extension)
README
# IDAObjcTypes
A collection of (public and private) types and functions definitions useful for iOS/macOS binaries analysis.
## Why even?
Would you rather re-define the same functions or types over and over as you work with different binaries?
## Usage (IDA Pro 8+)
1. Go to `File > Load file > Parse C header file` then choose `IDA.h` to import everything at once. Or, run this IDA command: `idaapi.idc_parse_types("/path/to/IDAObjcTypes/IDA.h", idc.PT_FILE)`.
2. Copy `IDA.til` and `IDA32.til` to `til` folder inside IDA application directory.
3. In IDA Pro, open `Type Libraries` window via `View > Open subviews > Type libraries` or press `Shift + F11`.
4. Right-click the type list and select `Load type library...`.
5. Select `IDA` (or `IDA32` if you target 32-bit binaries) and click `OK` button.
TIL created via this command:
```bash
tilib -c -hIDA.h IDA.til -D__EA64__ -P -tIDAObjcTypes
tilib -c -hIDA.h IDA32.til -P -tIDAObjcTypes32
```
## Usage (IDA Pro 7)
Go to `File > Load file > Parse C header file` then choose `IDA.h` to import everything at once.
Or, run this IDA command: `idaapi.idc_parse_types("/path/to/IDAObjcTypes/IDA.h", idc.PT_FILE)`
## Usage (Binary Ninja)
1. Go to `Analysis > Import Header File...`.
2. In `Header File(s)`, browse for `IDA.h` in this project.
3. In `Compiler Flag(s)`, add `-D__EA64__ -D__BINJA__`.
4. Click `Import` button.
## Usage (Ghidra)
1. Go to `File > Parse C Source`.
2. (Go to 6. if it's not the first time you do this) Clone `objc_mac_carbon.prf` profile into a new profile, called `OBJC.prf`, for example.
3. Remove everything in `Source files to parse`, and add `IDA.h` in this project to the list.
4. Add two additional flags: `-D__EA64__ -DGHIDRA` to Parse Options.
5. Save `OBJC.prf` profile as you might use it later.
6. Click `Parse to Program`, click `Proceed` if anything pops up.
7. Check `Data Type Manager` window (at bottom-left), (long) right-click at `` and select `Apply Function Data Types`.
### Ghidra limitation
You have to manually specify the size of enum members if what you get is incorrect.
## iOS version-specific analysis
By default the headers target **iOS 17+**. If you are reversing an older binary, uncomment the matching `#define` near the top of `IDA.h`:
| Target iOS | Line to uncomment |
|---|---|
| iOS 17 or lower | `// #define IOS17` |
| iOS 16 or lower | `// #define IOS16` |
| iOS 15 or lower | `// #define IOS15` |
| iOS 14 or lower | `// #define IOS14` |
The defines cascade — uncommenting `IOS14` also suppresses iOS 15, 16, and 17 additions automatically.
## ARM64e / pointer authentication
When analysing **arm64e** slices (iPhone XS / A12 and later), add `-D__ARM64E__` to your import flags. This enables the `ptrauth_strip` / `__ptrauth` annotation macros defined in `BaseTypes.h`.
## Included Frameworks/Libraries
- AppSupport
- AssetsLibraryServices
- AudioToolbox
- AVFCapture
- AVFoundation
- CommonCrypto
- CoreAnimation
- CoreAudio
- CoreFoundation
- CoreGraphics
- CoreMedia
- CoreServices
- CoreText
- CoreVideo
- CydiaSubstrate (if you ever want to RE tweaks)
- Darwin
- dyld
- fishhook
- Foundation
- GraphicsServices
- icu
- IOMobileFramebuffer
- IOKit
- IOSurface
- Kernel
- MediaRemote
- MobileGestalt
- objc
- os
- PowerLog
- pthread
- QuartzCore
- sandbox
- Security
- SoftLinking
- SpringBoard
- SpringBoardHome
- sqlite
- Swift (WIP, PRs welcome)
- System (libSystem)
- SystemConfiguration
- UIKit
- xpc
## Contributing
PRs are welcome! Please follow these guidelines:
1. **File structure**: Each framework should have a `FrameworkName/FrameworkName.h` for function declarations and a `FrameworkName/Types.h` for type definitions. Import `Types.h` from the main header.
2. **Source annotations**: Use the comment conventions defined in `BaseTypes.h`:
- No annotation — from Apple SDK / official headers
- `// RE:` — reverse-engineered; accuracy not guaranteed
- `// from research` — crowdsourced / community research
- `// WIP` — incomplete
3. **Version guards**: Wrap definitions that first appeared in iOS 15/16/17 inside `#ifndef IOS15` / `#ifndef IOS16` / `#ifndef IOS17` guards respectively.
4. **Regenerate .til files**: After changing headers, run `./build.sh /path/to/tilib` to update `IDA.til` and `IDA32.til`.