Some notes, tools, and techniques for reverse engineering macOS binaries The article provides a curated collection of notes, tools, and techniques for reverse engineering macOS binaries, covering topics such as C++ reversing, fat binaries, and VST plugins. It prominently features Binary Ninja, an interactive decompiler and binary analysis platform, along with its free cloud and local versions, AI-powered Sidekick assistant, and a comprehensive list of official and community plugins like Tantō for function slicing. The resource also includes links to plugin lists, themes, and discussions on advanced techniques like dataflow-based function fingerprinting. Reverse Engineering on macOS Some notes, tools, and techniques for reverse engineering macOS binaries. Table of Contents < -- TOC start generated with https://bitdowntoc.derlin.ch/ -- - Reverse Engineering Tools reverse-engineering-tools - Binary Ninja binary-ninja - Binary Ninja Plugins/Themes binary-ninja-pluginsthemes - Binary Ninja Blog binary-ninja-blog - Binary Ninja Docs binary-ninja-docs - Binary Ninja Training binary-ninja-training - Binary Ninja GitHub Issues binary-ninja-github-issues - WARP warp - Ghidra ghidra - Hex-Rays IDA hex-rays-ida - radare2 radare2 - Rizin / Cutter rizin--cutter - Frida / etc frida--etc - rr - Record and Replay Framework time travel debugger rr---record-and-replay-framework-time-travel-debugger - Reversing C++ Binaries reversing-c-binaries - Unsorted unsorted - C++ vtables c-vtables - std::string stdstring - std::vector stdvector - Universal Fat Binaries universal-fat-binaries - Reverse Engineering Audio VST Plugins reverse-engineering-audio-vst-plugins - Compiler Optimisations compiler-optimisations - Fast Division / Modulus fast-division--modulus - Unsorted unsorted-1 - See Also see-also - My StackOverflow/etc answers my-stackoverflowetc-answers - My Other Related Deepdive Gist's and Projects my-other-related-deepdive-gists-and-projects < -- TOC end -- Reverse Engineering Tools Binary Ninja - https://binary.ninja/ - Binary Ninja is an interactive decompiler, disassembler, debugger, and binary analysis platform built by reverse engineers, for reverse engineers. Developed with a focus on delivering a high-quality API for automation and a clean and usable GUI, Binary Ninja is in active use by malware analysts, vulnerability researchers, and software developers worldwide. Decompile software built for many common architectures on Windows, macOS, and Linux for a single price, or try out our limited but free Cloud version. - https://binary.ninja/free/ - There are two ways to try Binary Ninja for free Binary Ninja Cloud supports all architectures, but requires you to upload your binaries. Binary Ninja Free is a downloadable app that runs locally, but has architecture restrictions. Neither free option supports our powerful API / Plugin ecosystem. - https://cloud.binary.ninja/ - Binary Ninja Cloud is our free, online reverse engineering tool. - https://sidekick.binary.ninja/ - Sidekick Makes Reverse Engineering Easy Don't open that binary alone Take Sidekick, your AI-powered assistant, with you. Sidekick can help answer your questions about the binary, recover structures, name things, describe and comment code, find points of interest, and much more. Binary Ninja Plugins/Themes - https://extensions.binary.ninja/ - Binary Ninja Extensions - This is the new official site/list. - https://zerotistic.github.io/binja-plugins/ - Interactive Binja Plugin List - This is an older/unofficial site/list. - https://github.com/Zerotistic/binja-plugins - Interactive Binja Plugin List Note: this is heavily inspired by ida-plugins https://github.com/vmallet/ida-plugins from vmallet This is a comprehensive list of plugins for Binary Ninja that is more interactive, that is, it can be sorted and filtered to help with finding plugins of interest. It also has extra metadata like the language the plugin is written in and an attempt at putting plugins into categories. - https://github.com/Vector35/official-plugins - Official Binary Ninja Plugins - https://github.com/Vector35/community-plugins - Binary Ninja Community Plugins - https://github.com/Vector35/community-themes - Binary Ninja Community Themes - Some notable plugins I've stumbled across: - https://github.com/Vector35/tanto - Tantō is a plugin for Binary Ninja that slices programs so you can understand them faster. - Tantō slices functions into more consumable chunks - For a more detailed explanation of what Tantō does, please check out this blog post. - https://binary.ninja/2022/06/20/introducing-tanto.html - Introducing Tantō: Slicing Functions for Faster Finds - https://binary.ninja/2022/06/20/introducing-tanto.html potential-uses-and-some-speculation - What I’ve found most interesting, and have been speculating about, is using variable slices like these though not directly through the UI in the function fingerprinting space. I’ve long suspected that a dataflow-based approach to fingerprinting might prove to be robust against compiler optimizations and versions, as well as source code changes that don’t completely redefine the implementation of a function. Treating each variable slice as a record of what happens to data within a function, a similarity score for two slices could be generated from the count of matching operations, matching constant interactions 2 + var a , and matching variable interactions var f + var a . Considering all slices, a confidence metric could be derived for whether two functions match. Significant research would be required to answer these questions concretely… and, if you could solve subgraph isomorphism at the same time, that’d be great - https://bsky.app/profile/elykdeer.bsky.social - https://bsky.app/profile/1ns0mn1h4ck.bsky.social/post/3liypgatkt22x - We’re thrilled to announce Kyle Martin’s session at Insomni’hack 2025: "'A Slice of' Modern Program Analysis". - 🔍 Discover the lineup and book your spot: insomnihack.ch/talks/a-slic... - https://insomnihack.ch/talks/a-slice-of-modern-program-analysis/ - Talk: "A Slice of" Modern Program Analysis March 14, 13:30 CAMPUS - This talk introduces Tanto 2.0: an open-source, binary analysis, slicing framework and plugin for Binary Ninja designed to help discover and verify bugs and vulnerabilities faster than ever before. As government-funded programs and private-sector research continue to encounter increasingly complex problems that require more data and context to solve, slicing aims to cut those problems back down to size. - https://bsky.app/profile/binary.ninja/post/3lma74a4aem2n - Kyle's talk at Insomni'Hack is live youtu.be/I0PoE0IdtmE?... Check it out if you're interested in a slice of modern program analysis and try the latest version of Tanto as well, in the plugin manager or at github.com/Vector35/tanto - https://www.youtube.com/watch?v=I0PoE0IdtmE - YouTube: "A Slice Of" Modern Program Analysis - Kyle Martin 50:02 - https://github.com/Vector35/tanto insomnihack-2025-slides - Insomni'Hack 2025 Slides Here are the slides https://github.com/Vector35/tanto/blob/master/A%20Slice%20of%20Modern%20Program%20Analysis%20-%20Insomni%27hack%202025.pdf for the talk @ElykDeer https://github.com/ElykDeer gave at Insomni'Hack 2025: "A Slice of" Modern Program Analysis https://www.youtube.com/watch?v=I0PoE0IdtmE - https://github.com/fosdickio/binary ninja mcp - Binary Ninja MCP - A Binary Ninja plugin containing an MCP server that enables seamless integration with your favorite LLM/MCP client. - https://github.com/fosdickio/binary ninja mcp supported-integrations - Supported Integrations The following table details which integrations with Binary Ninja are currently supported. - https://github.com/MCPPhalanx/binaryninja-mcp - Another™ MCP Server for Binary Ninja The MCP Model Context Protocol Server for Binary Ninja - https://github.com/MCPPhalanx/binaryninja-mcp -but-why-another - ... but why Another? See: Key Differences from the Existing Plugin - https://github.com/Vector35/community-plugins/issues/305 - Key Differences from the Existing Plugin - Headless Mode Support – Run headlessly with a simple command: uvx binaryninja-mcp server file to reverse.elf - Multi-Binary Loading – Open and manage multiple binaries simultaneously in both UI and headless modes. MCP clients can retrieve a list of opened files. - Alternative Architectural Design : - Uses SSE transport instead of a handcrafted HTTP server for improved responsiveness. - Implements a built-in SSE-to-stdio relay , ensuring compatibility with stdio-transport-only clients like Claude Desktop. - Configurable via Binary Ninja Settings – Manage server parameters effortlessly, including listening configurations. - Packaged as a PyPI Module – The plugin version is strictly bound to the package version, ensuring consistency across updates. - Extensive Testing Coverage – CI pipelines, unit tests, and smoke tests validate reliability. - Minimal Setup Required – Configure MCP clients with one single command: uvx binaryninja-mcp client - https://github.com/mrphrazer/reverser ai - ReverserAI - Provides automated reverse engineering assistance through the use of local large language models LLMs on consumer hardware. - ReverserAI is a research project designed to automate and enhance reverse engineering tasks through the use of locally-hosted large language models LLMs . Operating entirely offline, this initial release features the automatic suggestion of high-level, semantically meaningful function names derived from decompiler output. ReverserAI is provided as a Binary Ninja plugin; however, its architecture is designed to be extended to other reverse engineering platforms such as IDA and Ghidra. - https://github.com/WhatTheFuzz/binaryninja-openai - BinaryNinja-OpenAI - Integrates OpenAI with BinaryNinja via a plugin. - https://github.com/ahaggard2013/binaryninja-ollama - Binary Ninja Ollama - Binary Ninja Ollama integrates with your own locally hosted ollama server to rename functions and variables with AI - https://github.com/jtang613/BinAssist - BinAssist - A plugin that provides LLM helpers to explain code and assist in RE. - This is a LLM plugin aimed at enabling the use of local LLM's ollama, text-generation-webui, lm-studio, etc for assisting with binary exploration and reverse engineering. It supports any OpenAI v1-compatible API. Recommended models are LLaMA-based models such as llama3.1:8b, but others should work as well. Binary Ninja Blog - https://binary.ninja/blog/ - https://www.youtube.com/watch?v=iD8UidhFbhg - Binary Ninja: 5.3 Feature Stream - https://binary.ninja/2025/12/05/5.2-release-2.html - 5.2 Release 2 - https://binary.ninja/2025/11/13/binary-ninja-5.2-io.html - Binary Ninja 5.2 Io - https://www.youtube.com/watch?v=I-IuXV44mps - Binary Ninja: 5.2 Feature Stream - https://binary.ninja/2025/08/14/5.1-release-2.html - 5.1 Release 2 - https://binary.ninja/2025/07/24/5.1-helion.html - 5.1 Helion - https://www.youtube.com/watch?v=UG5PHLJPe 0 - Binary Ninja: 5.1 Feature Stream - https://binary.ninja/2025/05/23/5.0-release-2.html - 5.0 Release 2 - https://binary.ninja/2025/04/23/5.0-gallifrey.html - 5.0 Gallifrey - https://binary.ninja/2025/04/23/5.0-gallifrey.html sidekick-31 - Sidekick 3.1 - https://www.youtube.com/watch?v=cVZnGjUT-q4 - Binary Ninja: 5.0 Feature Stream - https://binary.ninja/2025/02/26/sidekick-3.0.html - Sidekick 3.0 - https://binary.ninja/2025/02/26/sidekick-in-action-finding-vulnerabilities-in-dnsmasq.html - Sidekick in Action: Finding Vulnerabilities in dnsmasq - https://binary.ninja/2025/02/26/sidekick-in-action-analyzing-lockbit.html - Sidekick in Action: Analyzing LockBit 3.0 - https://binary.ninja/2024/11/20/4.2-frogstar.html - 4.2 Frogstar - https://www.youtube.com/watch?v=9ONb2LaOt8A - Binary Ninja: 4.2 Feature Stream - https://binary.ninja/2024/08/16/4.1-release-2.html - 4.1 Release 2 - https://binary.ninja/2024/08/12/sidekick-2.0.html - Sidekick 2.0 - https://binary.ninja/2024/07/17/4.1-elysium.html - 4.1 Elysium - https://www.youtube.com/watch?v=IdNFMIQ9roQ - Binary Ninja: 4.1 Feature Stream - https://binary.ninja/2024/05/27/4.0-update.html - 4.0 Update - https://binary.ninja/2024/04/18/sidekick-release.html - Sidekick 1.0 Release - https://binary.ninja/2024/02/28/4.0-dorsai.html - 4.0: Dorsai - https://www.youtube.com/watch?v=4nskle8sMKQ - Binary Ninja: 4.0 Feature stream - https://binary.ninja/2023/09/15/3.5-expanded-universe.html - 3.5: Expanded Universe - https://www.youtube.com/watch?v=E2MCx8oQZW8 - Binary Ninja Live Stream: August 4 3.5 Feature Announcement - https://binary.ninja/2023/05/03/3.4-finally-freed.html - 3.4: Finally Freed - https://www.youtube.com/watch?v=lxXj5ih6M3o - Binary Ninja Live Stream: March 31 - 3.4 Feature overview stream - https://binary.ninja/2023/01/18/3.3-the-bytes-must-flow.html - 3.3: The Bytes Must Flow - https://www.youtube.com/watch?v=0PFjwoFNQCk - Binary Ninja Live Stream: December 16 - 3.3 Release Feature Overview - https://binary.ninja/2022/10/28/3.2-released.html - 3.2 Release - https://www.youtube.com/watch?v=hZHtQqF7-eg - Binary Ninja Live Stream: October 28 - 3.2 Stable release - https://binary.ninja/2022/05/31/3.1-the-performance-release.html - 3.1 The Performance Release - https://www.youtube.com/watch?v=a8ATFKBwoQk - Binary Ninja Live Stream: June 3 3.1 launch - https://binary.ninja/2022/01/27/3.0-the-next-chapter.html - 3.0 The Next Chapter - https://binary.ninja/2023/02/17/hacking-the-binary-ninja-ui-for-fun-and-profit.html - Hijacking the Binary Ninja UI for Fun and Profit Binary Ninja Docs - https://docs.binary.ninja/guide/ - User Guide - https://docs.binary.ninja/guide/migration/ - Migrating from Other Tools - https://docs.binary.ninja/getting-started.html - Getting Started - https://docs.binary.ninja/guide/migration/migrationguideida.html - Migrating from IDA - https://docs.binary.ninja/guide/migration/migrationguideghidra.html - Migrating from Ghidra - https://docs.binary.ninja/guide/types/ - There's so many things to learn about working with Types in Binary Ninja that we've organized it into several sections - Basic Type Editing: Brief overview of the basics - https://docs.binary.ninja/guide/types/basictypes.html - Basic Type Editing The biggest culprit of bad decompilation is often missing type information. Therefore, some of the most important actions you can take while reverse engineering is renaming symbols/variables, applying types, and creating new types to apply. - Working with Types: Interacting with types in disassembly and decompilation - https://docs.binary.ninja/guide/types/type.html - Working with Types, Structures, and Symbols in Decompilation There are two main ways to interact with types in decompilation or disassembly. The first is to use the types view, and the second is to take advantage of the smart structures workflow or otherwise annotate types directly in a disassembly or IL view. - Importing/Exporting Types: How to import or export types from header files, archives, or other BNDBs - https://docs.binary.ninja/guide/types/typeimportexport.html - Importing Type Information Type information can be imported from a variety of sources. If you have header files, you can import a header. If your types exist in an existing BNDB, you can use import from a bndb. With the introduction of type archives we recommend migrating away from importing via BNDB to type archives as they allow types to remain synced between different databases. - https://docs.binary.ninja/guide/types/typeimportexport.html import-bndb-file - Import BNDB File The Import BNDB File feature imports types from a previous BNDB into your currently open file. In addition, it will apply types for matching symbols in functions and variables. Import BNDB will not port symbols from a BNDB with symbols to one without -- the names must already match. Matching functions and porting symbols is beyond the scope of this feature. - https://docs.binary.ninja/guide/types/typeimportexport.html import-header-file - Import Header File If you already have a collection of headers containing types you want to use, you can import them directly. You can specify the compiler flags that would be used if a compiler were compiling a source file that uses this header. - After specifying the file s and flag s , pressing Preview will give a list of all the types and functions defined in the file s . You may check or uncheck the box next to any of the types/functions to control whether they will be imported to your analysis. - https://docs.binary.ninja/guide/types/typeimportexport.html finding-system-headers - Finding System Headers Since you need to specify the include paths for system headers, you will need to deduce them for the target platform of your analysis. Here are a few tricks that may help - Systems with GCC/Clang macOS, Linux, etc On these systems, you can run a command to print the default search path for compilation: gcc -Wp,-v -E - clang -Wp,-v -E - For the directories printed by this command, you should include them with -isystem